【发布时间】:2017-12-19 13:03:51
【问题描述】:
我在使用 C# 的 .NET 应用程序中使用 IBM MQ 版本 8.0.0.0。现在我正在尝试从队列中读取消息。我正在使用下面的代码从队列中读取消息。
.....
Hashtable props = new Hashtable();
props.Add(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_MANAGED);
props.Add(MQC.CONNECT_OPTIONS_PROPERTY, MQC.MQCNO_RECONNECT_Q_MGR); // Reconnect option
openOptions = MQC.MQOO_INPUT_SHARED | MQC.MQOO_FAIL_IF_QUIESCING;
queueManager = new MQQueueManager(queueManagerName, props);
this.queue = queueManager.AccessQueue(queueName, openOptions);
....
MQGetMessageOptions gmo = new MQGetMessageOptions();
gmo.Options = MQC.MQGMO_FAIL_IF_QUIESCING
| MQC.MQGMO_WAIT | MQC.MQGMO_SYNCPOINT;
gmo.MatchOptions = MQC.MQMO_NONE;
gmo.WaitInterval = 5000; // I'm specifying this
var message = new MQMessage();
this.queue.Get(message, gmo); // Waits here forever in case connection is lost to IBM MQ.
.........
.........
现在,如果与 MQ 服务器的连接丢失 AFTER 连接已建立,但 BEFORE 发出了 queue.Get() 调用,我会看到 .GET() 调用会永远等待并且尽管指定了 WAIT_INTERVAL 并不会停止。
另外,我观察到,一旦连接恢复,.Get() 调用会立即返回,并带有从队列中读取的消息。
我是不是做错了什么?
编辑: 添加了带有属性的 queueManager 创建代码,其中之一指示客户端在可能的情况下重新连接到同一个队列管理器。
【问题讨论】:
标签: ibm-mq