这对于可靠的消息传递来说是奇怪的,有点令人担忧。我希望我能错过一些东西。
由于已知的网络故障,今天才发现这一点。它给了我一个很好的机会来看看一些容错。
在线程1上,我们在队列管理器管理的队列上发送消息。这段代码:
using (MQQueueManager qMgr = new MQQueueManager(_queueManager, _connectionProperties))
{
// send message
}
只是"挂起"在队列管理器上。在,它似乎运行,然后超时。也许它在一个线程上运行并且线程崩溃。
除了我们有第二个线程正在侦听另一个队列之外,我们不会知道任何事情。
我们在接收线程上有相同的构造:
using (MQQueueManager qMgr = new MQQueueManager(_queueManager, _connectionProperties))
{
// listen for message
}
但是这会抛出MQException
错误代码2009.这表明存在网络问题。 (http://www-01.ibm.com/support/docview.wss?uid=swg21472342)
然而,同样,第二个线程上的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的新手,我注意到我有连接属性MQC.MQCNO_RECONNECT_Q_MGR
。这会起作用吗?我的目标是在出现问题时了解和管理,而不是依赖我们不完全理解的事情。