2013-04-05 154 views
4

我正在使用MQ 7x客户端的MQ.NET类,并且导入和导出消息正常工作。但是,如果存在网络断开连接或远程管理器断开连接,那么IBM MQ客户端不会自动重新连接。我得到:如何自动连接IBM MQ客户端?

Error: Remote host ' not available, retry later. 

有没有办法在发生这些问题时自动连接并继续处理消息?

还有就是要检查队列管理器的连接属性:

mqQMgr = new MQQueueManager("My queue manager name" ,"my channel name",",my connection name"); 

mqQMgr.IsConnected返回真/假,但这并不能帮助自动连接。

这是我在用的:

// mq properties 
    Hashtable properties = new Hashtable(); 
    properties.Add(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_MANAGED);    
    properties.Add(MQC.CONNECTION_NAME_PROPERTY, "connectionName");    
    properties.Add(MQC.CHANNEL_PROPERTY, "channelName"); 
    properties.Add(MQC.CONNECT_OPTIONS_PROPERTY, MQC.MQCNO_RECONNECT_Q_MGR); 

    mqQMgr = new MQQueueManager("my queue manager"), properties); //error thrown 

我得到上面的一行

IBM MQException caught in send message - reason code - 2046- message -CompCode: 2, Reason: 2046 
{"MQRC_OPTIONS_ERROR"} 
base {System.ApplicationException}: 
{"MQRC_OPTIONS_ERROR"} 
CompCode: 2 
CompletionCode: 2 
Message: "MQRC_OPTIONS_ERROR" 
Reason: 2046 

回答

5

自v7.1起,MQ C#客户端支持自动客户端重新连接。您必须使用MQCNO_RECONNECTMQCNO_RECONNECT_Q_MGRMQCNO_RECONNECT_AS_DEF CNO选项启用自动重新连接。 MQ v7.1发布了几个样本,SimpleClientAutoReconnectPut.cs就是其中之一。详情请参阅样本。

简单的片段。

mqQMgr = new MQQueueManager("QM", MQC.MQCNO_RECONNECT,"SVRCONNCHN","localhost(1414)"); 
+0

我使用的代码连接相同的队列管理,MQCNO_RECONNECT_Q_MGR,我得到的错误 - 原因码2046。我使用的是7倍的客户端和连接到远程队列(这是6.0.5.2) – Sharpeye500 2013-04-08 18:31:36

+1

啊!那就是问题所在。自动客户端重新连接需要队列管理器7.0或更高版本。它不适用于v6.0.x. – Shashi 2013-04-09 00:28:35

+0

对于我来说即使使用客户端版本7.5.0.5,我的客户端程序在Java中也不会重新连接,即使我通过下面。它总是与2009年的错误失败qMgr =新的MQQueueManager(queueMgr,MQConstants.MQCNO_RECONNECT); – sijo0703 2016-07-26 21:59:57

0

它一直我用了一段时间这个错误,但也有自动重新连接选项: 在这里你可以了解更多一点,即使它是Java的定制,选项也可在C#包装: IBM MQ: Automatic Client Reconnection

一个很好的模式是你写的消息,以检查其是否连接&重新连接之前:

if (!mqQMgr.IsConnected) { 
    mqQMgr.Connect(); 
} 
mqQMgr.Write(message); 

我不知道这是否会帮助你。祝你好运!