繁体   English   中英

为什么我在使用 Spring 和 MQ 队列发送 OBject 消息时收到 JMSBytesMessage

[英]Why am I recieving a JMSBytesMessage when I'm sending an OBject message using Spring and MQ Queue

所以我使用 Spring 和 IBM MQ 队列发送一个 object:

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);
        }
      }); 
}

在调试过程中,我可以看到我确实将它作为 object 消息发送。 但是使用 Spring 的侦听器实现,我将 onMessage() 方法中的消息作为 JMSBytesMessages 获取????

public void onMessage(Message message) {
    System.out.println(">>>>>>> Recieved in onMessage");
    System.out.println(message.getClass());
}

OUTPUT:

>>>>>>> Recieved in onMessage
class com.ibm.jms.JMSBytesMessage

有人知道这里发生了什么吗? 这很难调试,因为它似乎正在队列中发生???

谢谢你的帮助

PS我也尝试过使用

if (message instanceof ObjectMessage) {
    object = ((ObjectMessage) message).getObject();
}

if (message instanceof JMSBytesMessage) {
    System.out.println("ITS A BYTES MESSAGE!!!!!!!!!!!"); 
}

哪个都不行???

我有同样的问题。 就我而言,我使用了错误的传输类型:

<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>

我的第一个猜测是,您正在使用 WebSphere AppServer 并且您的 JMS 队列 object(在 JNDI 中)被配置为本地 MQ 系列客户端,即您创建一个 JMSObjectMessage 并将其移交给 session,然后 MQSeries 认为它必须转换为 BytesMessage。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM