4

我正在使用 MQ 7x 客户端的 MQ.NET 类,并且导入和导出消息工作正常。但是,如果网络断开连接或远程管理器断开连接,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
4

2 回答 2

5

从 v7.1 开始,MQ C# 客户端支持自动客户端重新连接。您必须使用MQCNO_RECONNECTorMQCNO_RECONNECT_Q_MGRMQCNO_RECONNECT_AS_DEFCNO 选项来启用自动重新连接。MQ v7.1 提供了几个示例,SimpleClientAutoReconnectPut.cs 就是其中之一。详情请参阅样本。

简单的片段。

mqQMgr = new MQQueueManager("QM", MQC.MQCNO_RECONNECT,"SVRCONNCHN","localhost(1414)");
于 2013-04-06T00:23:03.057 回答
-2

我使用它已经有一段时间了,但是有自动重新连接的选项:在这里你可以阅读更多,即使它是 Java 定制的,这些选项也可以在 C# 包装器中使用: IBM MQ:自动客户端重新连接

一个好的模式是在您编写消息以检查它是否已连接并重新连接之前:

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

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

于 2013-04-05T23:39:10.170 回答