Ibm mq 远程队列和本地队列之间未保留消息ID

Ibm mq 远程队列和本地队列之间未保留消息ID,ibm-mq,Ibm Mq,当我将消息MQPUT到远程队列时,我获取消息ID并记录它 当我打开MQ浏览器查看不同队列管理器上本地队列上的消息时,我会看到具有不同消息ID的消息 是否有办法确保在远程队列中分配的消息ID保留在本地队列中 执行PUT操作时,我正在使用MQMI_NONE和MQPMO_NEW_MSG_ID选项 我正在使用IBM Websphere MQ 7.5.0.4 是否有办法确保在远程队列中分配的消息ID保留在本地队列中 两项要求: 确保MQ是移动消息的对象 不要使用pub/sub 如果使用IBM的MQ PUB

当我将消息MQPUT到远程队列时,我获取消息ID并记录它

当我打开MQ浏览器查看不同队列管理器上本地队列上的消息时,我会看到具有不同消息ID的消息

是否有办法确保在远程队列中分配的消息ID保留在本地队列中

执行PUT操作时,我正在使用
MQMI_NONE
MQPMO_NEW_MSG_ID
选项

我正在使用IBM Websphere MQ 7.5.0.4

是否有办法确保在远程队列中分配的消息ID保留在本地队列中

两项要求:

  • 确保MQ是移动消息的对象
  • 不要使用pub/sub
  • 如果使用IBM的MQ PUB/SUB实现,他们会考虑将消息发布到一个主题,而订阅服务器所接收的消息是完全不同的消息。据我(以及许多其他人,包括JMS规范负责人)所认为,这破坏了JMS规范。但是,这是我们目前的行为,因此如果您不想更改消息ID,那么不要使用IBM的Pub/Sub

    如果MQ将点对点消息从一个QMgr移动到下一个QMgr,则消息的详细信息保持不变,除非通道出口或其他中介截获该消息。这是产品基本功能的一部分,您不需要做任何特殊的事情来实现这一点

    如果您看到其他行为,则很可能是您不知道的某个行为正在拦截和处理消息。或者,应用程序代码可能没有在正确的时间捕获
    MQMD.MsgID
    。当然,通过采用API跟踪,您可以很容易地调和您对代码和消息ID的期望。的设计就是为了实现这一点,它将在API调用之前和之后向您显示消息字段


    唯一的其他可能性是MQ错误。影响消息ID的错误非常基本,因此不太可能传出,如果传出,则几乎会立即被捕获并修复,因此不太可能是MQ错误。

    请记住,消息ID是一个二进制字段。如果将一些文本放入消息ID并保存,则IBM MQ会将消息移动到另一个平台。该平台上的二进制表示可能是不同的字符。例如,如果在Windows计算机(ASCII)上MQPUT消息,然后在z/OS计算机(EBCDIC)上再次查看然后,字符表示将非常不同。

    使用远程队列定义不会更改消息ID。在发送消息和检查消息ID之间,必须有一些组件处理消息。顺便说一句。您不需要MQMI_NONE和MQPMO_NEW_MSG_ID,任何一个单独都足以使队列管理器生成消息ID。