2009-09-01 115 views
2

我有一個簡單的JMS應用程序部署在AIX服務器上的OC4J中,在我的應用程序中我正在偵聽某些隊列併發送到部署在AS400服務器下的Websphere MQ上的其他隊列。Websphere MQ使用JMS,閉合連接停留在MQ

的問題是,我對這些隊列連接將終止/時,它保持空閒一段時間與錯誤MQJMS1016關閉(這是沒有問題的),並且這種情況發生時,我嘗試恢復連接,並將其工作,但是,舊的連接卡在MQ,並不會終止,直到手動終止。

恢復代碼去如下:

public void recover() { 
    cleanup(); 
    init(); 
} 

public void cleanup(){ 
    if (session != null) { 
     try { 
      session .close(); 
     } catch (JMSException e) { 
     } 
    } 
    if (connection != null) { 
     try { 
      connection.close(); 
     } catch (JMSException e) { 
     } 
    } 
} 

public void init(){ 
    // typical initialization of the connection, session and queue... 
} 
+0

但問題是什麼,它在哪裏「卡住」 - 在session.close()? – nos 2009-09-01 19:43:15

+0

問題是,在Websphere MQ方面,舊的監聽器/製作者被卡住了,所以我將會有額外的工作似乎連接到MQ。 恢復代碼正常運行 – 2009-09-01 20:17:30

回答

1

由於孤立的連接(MQ上側卡連接)不影響郵件處理(即它們不消耗的消息),我們離開的事情,因爲它是直到達到MQ允許的最大連接數。

恢復不再起作用,一旦我們達到這一點,MQ管理員必須手動清除孤立連接,但好消息是,搜索此特定問題導致IBM支持站點上報告問題:

check here

+0

參考的APAR只是告訴您如何調整通道,以便WMQ更快地收回孤兒。雖然這很有幫助,但它仍然只是一種解決方法,無法替代修復根本原因和打印鏈接異常。 – 2010-08-25 17:19:40

3

的MQJMS1016是一個內部錯誤,表示連接損失是由於一些錯誤的代碼或WMQ本身。調整頻道將有所幫助,但您真的需要解決爲什麼應用程序正在噴出孤立連接速度足以耗盡所有可用頻道的問題。

我想要做的第一件事是檢查正在運行的WMQ和WMQ客戶端的版本。如果這是新開發,請確保您使用的是WMQ v7客戶端,因爲截至2011年9月,v6已達到使用期限.v7客戶端可以與v6 QMgrs配合使用,直到您可以升級爲止。一旦你開始使用v7客戶端和QMgr,就可以使用很多頻道調諧和重新連接選項。

的WMQ V7客戶端下載是在這裏:http://bit.ly/bXM0q3

另外請注意,在代碼中重新連接邏輯,上面並沒有嘗試之間睡覺。如果客戶端以較高的速度拋出連接請求,它可以重載WMQ偵聽器並執行非常有效的DOS攻擊。建議在兩次嘗試之間休息幾秒鐘。

最後,請在您的JMSException catch塊中打印鏈接的異常。如果您對JMS傳輸提供程序有問題,則JMS關聯的異常將包含任何低級錯誤信息。對於WMQ,它包含原因代碼,例如2035 MQRC_AUTHORIZATION_ERROR或2033 MQRC_NO_MSG_AVAILABLE。這裏有一個例子:

try { 
    . 
    . code that might throw a JMSException 
    . 
} catch (JMSException je) { 
    System.err.println("caught "+je); 
    Exception e = je.getLinkedException(); 
    if (e != null) { 
    System.err.println("linked exception: "+e); 
    } else { 
    System.err.println("No linked exception found."); 
    } 
} 

如果你在凌晨2點一些夜間得到一個錯誤,你的WMQ管理員會感謝你的鏈接例外。

+0

網絡配置爲終止任何空閒連接,所以問題很明顯,鏈接的異常是無關緊要的(不過,我會檢查問題的歷史記錄,並在有更多時間時提供鏈接的異常)。 實際上,連接恢復時間超過30秒,並且最大連接數已達到問題需要幾天時間(不像我原來的文章所暗示的那樣頻繁) 最終,我們不得不發送保持連接消息通過我們發起的每個連接。 – 2010-08-27 20:40:20

+0

這是個好消息!對於它的價值,鏈接的異常事件不是WMQ特有的。任何運輸公司都可以選擇在那裏放置相關信息。所以如果它成爲一個編碼標準,它將有助於任何JMS代碼。我有許多客戶如果沒有它,就不接受代碼。無論哪種方式,很高興聽到Keepalive現在保持聯繫。 – 2010-08-27 21:25:09