当我将消息MQPUT到远程队列时,我获取消息ID并记录它。
当我打开MQ浏览器以查看不同队列管理器上本地队列上的消息时,我看到具有不同消息ID的消息。
有没有办法确保在远程队列中分配的消息ID保留在本地队列中?
我在执行PUT操作时使用MQMI_NONE
和MQPMO_NEW_MSG_ID
选项。
我正在使用IBM Websphere MQ 7.5.0.4。
答案 0 :(得分:0)
有没有办法确保在远程队列中分配的消息ID保留在本地队列中?
两个要求:
如果您使用IBM的MQ Pub / Sub实现,他们会将发布到主题的消息和订阅者收到的消息视为完全不同的消息。就我而言(以及许多其他人,包括JMS规范负责人)认为,这打破了JMS规范。然而,这是我们现在的行为,所以如果您不希望更改消息ID,那么请不要使用IBM的Pub / Sub。
如果MQ将点对点消息从一个QMgr移动到下一个QMgr,则消息的详细信息保持不变,除非通道出口或其他中介拦截该消息。这是产品基本功能的一部分,您无需执行任何特殊操作即可实现。
如果您看到其他一些行为,很可能您不知道的是拦截和处理消息。或者,应用程序代码可能无法在正确的时间捕获MQMD.MsgID
。您当然可以通过API跟踪轻松地协调您对代码和消息ID的期望。 MA0W SupportPac旨在实现这一目标,并在API调用之前和之后显示消息字段。
唯一的另一种可能性是MQ错误。影响消息ID的错误是非常根本的,它几乎不可能出来,如果它确实会被捕获并几乎立即修复,所以不可能这是一个MQ错误。