2012-09-20 59 views
2

我有一個應用程序使用WebSphere MQ通過WebSphere將數據發送到雲中的數據中心。部分功能是,如果服務器端用戶檢測到30分鐘內沒有收到消息,線程將暫停5分鐘,並且連接被刪除。當它重新啓動時,它重新連接。IBM MQ XMS訂閱未關閉

實際上,我發現斷開連接並沒有刪除訂閱。嘗試重新連接時,我看到此錯誤:

「創建訂閱可能存在問題,因爲它正在被另一個消息使用者使用。 請確保任何使用此訂閱的消息使用者在嘗試創建新名稱同名,請參閱鏈接的例外以獲取更多信息。「

這表明消息處理程序仍然連接,意味着斷開連接失敗。對於XmsClient對象斷開代碼(庫的一部分,但我的一個同事可能已經改變了它)是:

public override void Disconnect() 
     { 
      _producer.Close(); 
      _producer.Dispose(); 
      _producer = null; 
      _consumer.MessageListener = null; 
      _consumer.Close(); 
      _consumer.Dispose(); 
      _consumer = null; 
      _sessionRead.Close(); 
      _sessionRead.Dispose(); 
      _sessionRead = null; 
      _sessionWrite.Close(); 
      _sessionWrite.Dispose(); 
      _sessionWrite = null; 
      _connection.Stop(); 
      _connection.Close(); 
      _connection.Dispose(); 
      _connection = null; 

      //GC.Collect(); 



      IsConnected = false; 
     } 

任何人有任何的想法,爲什麼連接是否仍然存在?

回答

3

從錯誤描述看,它看起來像服務器用戶正在創建一個持久的訂閱。即使訂閱應用程序未運行,持久訂閱也會繼續接收消息。要刪除持久訂閱,您必須調用Session.Unsubscribe()。簡單地關閉消費者不會刪除訂閱。

如果您的目的是在不移除訂閱的情況下關閉訂閱者,請先發出Connection.Stop(),然後註銷消息監聽器,然後關閉使用者。調用connection.Stop方法停止消息傳遞。

+0

謝謝Shashi,這個工作很完美。 – MrShoes