【发布时间】:2019-07-09 08:30:05
【问题描述】:
我需要根据相关 ID 从队列中获取特定消息。
有没有一种方法可以让我们获取对应相关 ID 的消息,然后只从队列中删除该消息而不删除其他消息。
我尝试过的选项是检索消息,但在查找我的消息时也会从队列中删除其他消息
我在浏览队列时在 accessQueue 方法中使用了以下 openOptions
MQC.MQOQ_INPUT_SHARED | MQC.MQOO_FAIL_IF_QUIESCING | MQC_MQOO_INQUIRE | MQC.MQOOBROWSE
以及获取消息的以下选项
String correlation ID = <correlationID>
MQMessage respMessage = new MQMessage();
respMessage.correlationId = correlation ID.getBytes();
MQGetMessageOptions msg = new MqGetMessageOptions();
msg.options = MQC.MQGMO_NO_WAIT + MQC.MQGMO_FAIL_IF_QUIESCING + MQC.MQGMO_CONVERT + MQC.MQGMO_BROWSE_NEXT
msg.matchOptions = MQC.MQMO_MATCH_MSG_ID
msg.waitInterval = 2000;
queue.get(respMessage, msg);
【问题讨论】:
-
您的获取选项集中似乎有 MQGMO_BROWSE_NEXT。您的问题表明您想删除该消息,而不是浏览它?
-
您正在设置相关 ID,但您设置的匹配选项是 MQMO_MATCH_MSG_ID。如果要获取匹配相关ID的消息,则需要设置MQMO_MATCH_CORREL_ID。
-
@morag hughson 获取 MQJE001:完成代码 '2',原因 '2033' .... 使用 msg.options = MQC.MQGMO_WAIT + MQC.MQGMO_SYNCPOINT + MQC.MQGMO_FAIL_IF_QUIESCING + MQC 的提及选项.MQGMO_CONVERT
-
@Shashi ... 感谢您指出已进行更改但遇到 MQ 错误“2033”
-
您如何确定您要求的相关 ID 在队列中。您是否尝试打印出您填写到
respMessage.correlationId的相关ID 的十六进制字节,并将其与运行amqsbcg示例以浏览队列内容时显示的内容进行比较。 2033 表示没有找到匹配的消息。您的问题并未向我们展示您对相关 ID 的处理,因此我们无法轻易评论您所做的事情。
标签: java browser ibm-mq correlation getmessage