所以我使用Spring和IBM MQ Queue发送一个对象:
public void sendObjectMessage(final Object message) {
// jmsTemplate.convertAndSend(message);
jmsTemplate.send(new MessageCreator()
{
public Message createMessage(Session session) throws JMSException
{
ObjectMessage outMessage = session.createObjectMessage((Serializable) message);
return(outMessage);
}
});
}
在调试过程中我可以看到我确实将它作为对象消息发送。但是使用Spring的监听器实现我在onMessage()方法中接收消息为JMSBytesMessages ????
public void onMessage(Message message) {
System.out.println(">>>>>>> Recieved in onMessage");
System.out.println(message.getClass());
}
输出:
>>>>>>> Recieved in onMessage
class com.ibm.jms.JMSBytesMessage
有谁知道这里发生了什么?这很难调试,因为它似乎发生在队列???
感谢您的帮助
P.S我也尝试使用
来捕捉消息if (message instanceof ObjectMessage) {
object = ((ObjectMessage) message).getObject();
}
和
if (message instanceof JMSBytesMessage) {
System.out.println("ITS A BYTES MESSAGE!!!!!!!!!!!");
}
两者都不起作用???
答案 0 :(得分:3)
我遇到了同样的问题。就我而言,我使用了错误的传输类型:
<bean id="mqQueue" class="com.ibm.mq.jms.MQQueue">
<property name="baseQueueName" value="..." />
<property name="targetClient">
<util:constant static-field="com.ibm.mq.jms.JMSC.MQJMS_CLIENT_NONJMS_MQ" />
</property>
</bean>
相反应该是:
<bean id="mqQueue" class="com.ibm.mq.jms.MQQueue">
<property name="baseQueueName" value="..." />
<property name="targetClient">
<util:constant static-field="com.ibm.mq.jms.JMSC.MQJMS_CLIENT_JMS_COMPLIANT" />
</property>
</bean>
答案 1 :(得分:2)
我的第一个猜测是,您正在使用WebSphere AppServer并且您的JMS队列对象(在JNDI中)被配置为本机MQ系列客户端,即您创建一个JMSObjectMessage,您将其移交给会话,然后MQSeries认为它必须转换为BytesMessage。