2009-07-08 71 views
0

我有一個「服務器」應用程序接收來自JMS隊列的消息。和客戶端應用程序創建一個臨時隊列,然後發送消息到服務器,將JMSReplyTo頭設置爲臨時隊列。JMS,檢測當臨時隊列被破壞

服務器使用臨時隊列回覆給客戶端。但是服務器有很多回復客戶端的請求都是通過臨時隊列發送很長一段時間(回覆是特定於客戶端的,並且對其他人不感興趣)

我的服務器檢測客戶端是否斷開 - 所以我可以停止通過特定的臨時隊列發送消息?或者我想用JMS來做事情,我不應該這樣做?

回答

0

那麼,發佈到該隊列應該失敗,因爲一旦客戶端消失,它就不應該存在。臨時隊列只有在創建它的會話存在時才存在。

所以我沒有看到當客戶端不在的時候需要通知,而這是通過JMS無法做到的,因爲發送回覆消息的嘗試實際上會表明這一點。

+0

那麼,一些初始測試(使用activemq)顯示服務器端在客戶端被終止20秒後纔會向臨時隊列atlest發送無錯信息 – nos 2009-07-08 17:34:43

0

使用activeMQ,您可以將您的臨時隊列轉換爲Destination,然後詢問目的地,例如,

if (dest.getConsumers().size() < 1) { 
    // No more consumers on this destination, so kill it. 
} 

或者從目標,得到了DestinationStatistics,然後從getMessages()得到隊列深度,如果大於n然後殺死tempQ。