我有用于 IBM MQ XMS 的发送方和接收方控制台应用程序。发送方填充队列,接收方使用接收方法使队列管理器出队。我正在使用带有 bool 值的 while 循环来继续运行接收器,这样只要队列接收器中有新消息可用,就可以获取该数据。 现在我想将接收器代码更改为异步消息监听器而不是 consumer.Receive()。 代码片段是,
consumerAsync = sessionWMQ.CreateConsumer(destination);
messageListener = new MessageListener(OnMessageCallBack);
consumerAsync.MessageListener = messageListener;
connectionWMQ.Start();
While(true)
{
console.writeline("Wait for message");
}
上面的代码只获取已经可用的数据,而不是新的数据。例如,如果我在启动接收器应用程序时队列中有 2 个数据,那么这些消息将被下载。但是当我保持接收方应用程序运行并从发送方应用程序发送新数据时,它没有被下载,我必须重新启动接收方应用程序才能获取该数据。类似的情况适用于 同步模式 consumer.ReceiveNoWait()。
我错过了什么?
最佳答案
XMS 的版本? 9.2 版有一个错误,已由 IBM 10.28.2020 确认。他们正在努力修复。 还没有 APAR。临时解决方案是降级到客户端版本 9.1。
更新:收到基于版本 9.2.0.1 构建的修复程序 IT34722 .测试正常。应与修复包 9.2.0.4 一起发布。
关于asynchronous - IBM MQ XMS 消息监听器仅获取队列中已有的消息而不是新消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64571907/