【问题标题】:Copying MQMessage MQMD values to JMS message将 MQMessage MQMD 值复制到 JMS 消息
【发布时间】:2017-02-09 23:36:17
【问题描述】:

我有一个要求,我必须将 MessageID、correlationID、持久性、Expiry 和 Priority 的值从请求 MQ 消息复制到响应。我使用 RFHUtil 将请求消息放入队列中。但是由于消息被会话 bean 消费,MQMD 标头的 messageID 更改为一些不同的值 -HEXADECIMAL,这与我放入 RFHUTIL 的 MessageID 不同。

然后我使用 set 方法将上述值从请求复制到响应消息 - setJMSMessageID 等,但是一旦我查看响应消息,这些值就会不同。 这是由于 MQ 到 JMS 的转换吗?有什么办法可以解决这个问题。

之前我使用 MQ 消息并且能够将所有字段从请求复制到响应。

【问题讨论】:

    标签: jms ibm-mq


    【解决方案1】:

    IBM MQ 中的 MessageID 始终为十六进制,无论它是从哪个 API(Base MQ 或 MQ JMS)设置的。

    发送请求消息时不需要设置MessageID。让 MQ 为您做到这一点。 MQ 将为请求消息生成一个唯一的消息 ID。在您的会话 bean 中,您只需将请求消息的 MessageID 复制到响应消息的 CorrelationID。这样您就可以关联请求和响应消息。

    更多详情请见IBM WebSphere MQ request/reply scenario

    更新

    发送消息时,使用setMessageID 方法设置的任何值都将被忽略,但该方法可用于更改接收到的消息中的值。

    由于在发送消息时会忽略setMessageID 方法设置的消息ID,因此应用程序无法指定外发消息的消息ID。因此,应用程序无法接收消息,然后转发相同的消息,或发送具有与其接收到的消息相同的消息 ID 的不同消息。见link

    【讨论】:

    • 谢谢 shashi,但要求是发送消息 ID,因为它是响应消息而不做任何更改。有什么方法可以复制吗?关联 ID 将复制到响应的关联 ID 中,而不是消息 ID。
    • 我可以使用基本 MQ 来做到这一点,但由于项目重新要求,必须转移到 jms 并且它正在产生问题。甚至持久性、到期和优先级的价值也在相应地发生变化。
    猜你喜欢
    • 2016-02-10
    • 2011-04-13
    • 2010-12-07
    • 2014-09-29
    • 1970-01-01
    • 2021-05-31
    • 1970-01-01
    • 2016-05-02
    • 2019-12-14
    相关资源
    最近更新 更多