在IBM MQ上重写消息
本文关键字:重写 消息 MQ IBM | 更新日期: 2023-09-27 18:10:00
我正在发送3条消息
Message1 - correlation id:5000
空消息(没有正文/消息)-关联id:5001
Message2 - correlation id:5002
我的出站队列处理如下
Message1 - correlation id:5000
Message1-correlation id:5001 =>在空消息上覆盖相同的先前消息*
Message2 - correlation id:5002
上面的第二行不应该有Message1,而应该是空的。任何想法吗?
get方法
mqGetMsgOpts = new MQGetMessageOptions();
if (mqQueue != null)
{
//Get options for the messsage
mqGetMsgOpts.Options = MQC.MQGMO_BROWSE_FIRST | MQC.MQGMO_WAIT | MQC.MQOO_INQUIRE;
mqGetMsgOpts.MatchOptions = MQC.MQMO_NONE;
mqGetMsgOpts.WaitInterval = 5000; // 5 seconds limit for waiting
}
if (mqMsg.MessageLength > 0 && mqMsg.DataLength > 0)
{
messageData = mqMsg.ReadString(mqMsg.MessageLength);
}
如果我不做长度检查,我将得到流读取器相关的异常。
My put method
if(mqQueue==null)
mqQueue = mqQMgr.AccessQueue("Queue Name", MQC.MQOO_OUTPUT | MQC.MQOO_INPUT_SHARED | MQC.MQOO_INQUIRE);
mqMsg.WriteString(message);
我没有听到消息在WMQ中被覆盖。我怀疑这一定是应用程序的问题。这行代码:
mqGetMsgOpts.Options = MQC.MQGMO_BROWSE_FIRST | MQC.MQGMO_WAIT | MQC.MQOO_INQUIRE;
MQC.MQGMO_BROWSE_FIRST
选项将使WMQ始终返回满足MQMD结构中指定条件的第一条消息。我不能从你的代码片段中看出,如果这个选项在稍后修改为指定MQGMO_BROWSE_NEXT
来读取队列中的下一个消息。
代替MQC.MQGMO_BROWSE_FIRST
,可以指定MQGMO_BROWSE_NEXT
选项连续读取消息。
你还指定了MQC.MQOO_INQUIRE
,这对GMO选项无效。你得把它去掉
更多详细的浏览选项在这里
我可以想象两种可能的原因。
- 您的推杆应用程序没有为消息2发送空消息体。 您的get应用程序正在显示来自消息1的消息缓冲区。如果没有从MQ传递的消息缓冲区,则将保留以前的消息缓冲区内容。
要确定哪些发生在您身上,我建议您放置所有消息,但在运行示例以获取它们之前,而是运行提供的示例amqsget以排除1的可能性。
然后您可以专注于应用程序中的get缓冲区。如果MQ说返回消息的长度为零,请确保不使用它。