2013-04-05 188 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); 

我不知道這是否會幫助你。祝你好運!

相關問題