【问题标题】:How do I auto-connect IBM MQ client?如何自动连接 IBM MQ 客户端?
【发布时间】:2013-03-28 12:30:21
【问题描述】:

我正在使用 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

【问题讨论】:

    标签: c# .net ibm-mq


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 我认为这行不通。根据文档:“对 IsConnected 的任何调用都不会主动尝试到达队列管理器,因此物理连接可能会中断,但 IsConnected 仍然可以返回 true。IsConnected 状态仅在活动时更新,例如,将在队列管理器上执行一条消息,获取一条消息。” ibm.com/support/knowledgecenter/en/SSFKSJ_7.5.0/…
    【解决方案2】:

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

    简单的sn-p。

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

    【讨论】:

    • 我正在使用代码连接同一个队列管理器 MQCNO_RECONNECT_Q_MGR,我收到错误 - 原因代码 2046。我正在使用 7x 客户端并连接到远程队列(即 6.0.5.2)
    • 啊!那就是问题所在。自动客户端重新连接需要队列管理器版本 7.0 或更高版本。它不适用于 v6.0.x。
    • 对我来说,即使客户端版本为 7.5.0.5,我的 Java 客户端程序也不会重新连接,即使我通过了下面。它总是失败并出现 2009 错误 qMgr = new MQQueueManager(queueMgr, MQConstants.MQCNO_RECONNECT);
    • 您的队列管理器必须是 7.0.1 或更高版本。它还取决于与队列管理器的连接如何丢失。如果您使用没有 -r 或 -s 选项的 endmqm 命令关闭了队列管理器,那么客户端应用程序将不会重新连接。请阅读知识中心。
    猜你喜欢
    • 2022-11-08
    • 2011-03-04
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-09
    相关资源
    最近更新 更多