我发送了3条消息
Message1 - 相关ID:5000
空消息(无正文/消息)-correlation id:5001
Message2 - 相关ID:5002
我的出站队列流程就像这样
Message1 - 相关ID:5000
Message1-correlation id:5001 =>在空消息上写了相同的上一条消息。 *
Message2 - 相关ID:5002
上面的第二行不应该有Message1,而只是为空。有什么想法吗?
我的获取方法
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);
}
如果我不进行长度检查,我将获得与流阅读器相关的异常。
我的put方法
if(mqQueue==null)
mqQueue = mqQMgr.AccessQueue("Queue Name", MQC.MQOO_OUTPUT | MQC.MQOO_INPUT_SHARED | MQC.MQOO_INQUIRE);
mqMsg.WriteString(message);
答案 0 :(得分:2)
我没有听到过在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选项无效。你需要删除它。
更多详细信息浏览选项为here
答案 1 :(得分:2)
我可以想象两个可能导致这种情况的问题。
为了确定发生在你身上的事情,我建议你把所有的消息都放好,但是在运行你的样本之前得到它们,而是运行类似于提供的样本amqsget以排除1的可能性。
然后您可以专注于应用程序中的get缓冲区。如果MQ表示返回消息的长度为零,请确保您没有使用它。