Ibm mq IBM MQ Error 2009-如何检测队列管理器何时启动自己的线程

Ibm mq IBM MQ Error 2009-如何检测队列管理器何时启动自己的线程,ibm-mq,Ibm Mq,这很奇怪,对于可靠的消息传递来说有些令人担忧。我希望我错过了什么 由于已知的网络故障,这一点直到今天才被发现。这给了我一个很好的机会来看看容错性 在线程1上,我们在队列管理器管理的队列上发送消息。此代码: using (MQQueueManager qMgr = new MQQueueManager(_queueManager, _connectionProperties)) { // send message } 只是“挂起”队列管理器。如中所示,它似乎先运行,然后超时。也许它运行在一个线

这很奇怪,对于可靠的消息传递来说有些令人担忧。我希望我错过了什么

由于已知的网络故障,这一点直到今天才被发现。这给了我一个很好的机会来看看容错性

在线程1上,我们在队列管理器管理的队列上发送消息。此代码:

using (MQQueueManager qMgr = new MQQueueManager(_queueManager, _connectionProperties))
{
 // send message
}
只是“挂起”队列管理器。如中所示,它似乎先运行,然后超时。也许它运行在一个线程上,线程崩溃了

除了第二个线程监听另一个队列之外,我们什么都不知道

我们在接收线程上有相同的构造:

using (MQQueueManager qMgr = new MQQueueManager(_queueManager, _connectionProperties))
{
 // listen for message
}
但这会抛出一个
MQException
,错误代码为2009。这意味着一个网络问题。()

但是,第二个线程上的
QueueManager
似乎又启动了自己的线程,在该线程上抛出异常,导致无法捕获异常并作出反应

我们有什么遗漏吗


更新

以下是我的连接属性:

Hashtable connectionProperties = new Hashtable();
connectionProperties.Add(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_MANAGED);
connectionProperties.Add(MQC.USE_MQCSP_AUTHENTICATION_PROPERTY, true);
connectionProperties.Add(MQC.HOST_NAME_PROPERTY, hostName);
connectionProperties.Add(MQC.CHANNEL_PROPERTY, channel);
connectionProperties.Add(MQC.PORT_PROPERTY, portNumber);
connectionProperties.Add(MQC.CONNECT_OPTIONS_PROPERTY, MQC.MQCNO_RECONNECT_Q_MGR);
return connectionProperties;

请记住,我是IBM MQ的新手,我注意到我有connection属性
MQC.MQCNO\u RECONNECT\u Q\u MGR
。这会起作用吗?我的目标是在事情出错时了解和管理,而不是依赖我们不完全理解的东西

应用程序端的mq版本是什么?不清楚您为连接属性设置了什么。您使用的是自动重新连接吗?@JoshMc我们使用的是8.0.0.7。@Shashi我在问题中添加了连接属性。希望这有帮助。:)谢谢由于您已设置了重新连接选项MQC.MQCNO_reconnect_Q_MGR,当与队列管理器的连接中断时,MQ.NET客户端可能正在尝试重新连接到队列管理器。默认情况下,重新连接尝试持续30分钟。如果不成功,它将超时。