2010-06-01 166 views
1

正在使用以下代碼連接MQ。我能夠成功連接到MQ。我的情況是我每隔1分鐘將消息放置到MQ一次。斷開電纜後,我收到ResonCode錯誤,但IsConnected屬性仍顯示爲真。這是檢查連接是否仍然連接的正確方法嗎?或者有任何最好的遊戲。MQ連接 - 2009錯誤

我想在應用程序啓動時打開連接並保持打開狀態。

公共靜態MQQueueManager ConnectMQ(){

如果((的QueueManager == NULL)||(!queueManager.IsConnected)||(queueManager.ReasonCode == 2009)){ 的QueueManager =新MQQueueManager (); } return queueManager; }

回答

2

WMQ客戶端連接的行爲是,當閒置時它將顯示爲連接,直到API調用失敗或連接超時。因此isConnected()可能會報告爲真,直到嘗試獲取,放入或查詢呼叫並失敗,此時QMgr將報告斷開連接。

這裏要考慮的另一件事是,2009年不是你可能得到的唯一代碼。它恰好是連接斷開時得到的,但QMgr關閉,通道關閉以及各種資源和其他錯誤存在連接代碼。

通常,爲了保持恆定連接的需求,您希望將嵌套在while語句內的try/catch塊內的連接和消息處理循環封裝起來。當你捕捉到一個意外退出以外的異常時,關閉這些對象和QMgr,至少睡5秒鐘,然後循環到最上面。睡眠是至關重要的,因爲如果你被困在一個緊密的重新連接環路中,並且在QMgr上發起數百次連接嘗試,你甚至可以將一臺主機QMgr帶到膝蓋上。

另一種方法是使用v7 WMQ客戶端和QMgr。通過這種組合,自動重新連接可配置爲通道配置。