2011-12-30 32 views
1

我在主題發佈者和可變數量的主題訂閱者之間使用JMS(ActiveMQ)。Pub/Sub範例:我可以知道訂閱者是否還活着嗎?

我將不得不檢查,在給定的時間,一些訂戶是否「脫機」(斷開連接,關機,無法通信等...)。
JMS是否允許發佈者知道哪些訂戶被「註冊」?

現在,我已經實現了它,以便訂戶在特定隊列(作爲生產者)發送「活動」消息,並且發佈者接收它們(充當消費者):如果檢測到任何訂閱者在X秒(閾值)沒有「ping」時,它被假定爲離線。 它的作品,但我很好奇,知道如果我重新發明了輪...

我知道這個功能是不完全相關的消息或Pub/Sub範式,我也知道Pub/Sub是專門設計的發佈商不必擔心其消息將被消費的人數/時間......但我想知道,如果它想知道,也許有一種方法。 畢竟,它似乎不是一個特別罕見的用例....

非常感謝。

+0

也許使用此線程中顯示的持久訂閱http://stackoverflow.com/questions/4937262/how-to-find-out-all-subscribers-to-a-jms-topic-have-replied – Alfabravo 2011-12-30 16:15:33

+0

@Alfabravo該線程中顯示的解決方案特定於HornetQ。也DurableSubscriptions是不是真的關於我想檢查,他們?他們所做的只是將消息保存在內存中,以便將它們傳遞給「不可緩解」的訂閱者......這不會將訂閱者列表公開給我的程序。 – mdm 2011-12-30 16:23:37

+0

不是,該設置不綁定到HornetQ。 http://docs.oracle.com/cd/E19798-01/821-1841/bncgd/index.html Aaaand很好,也許有了適當的解決方法,它可能會幫助您http://docs.oracle.com/cd/ E19798-01/821-1841/bncfx/index.html的 – Alfabravo 2011-12-30 16:41:57

回答

3

我不認爲有辦法直接告訴您的發佈者有關訂閱者的信息。

你應該做的是實際使用AMQ advisory messages來跟蹤你的用戶的狀態。閱讀文章 - 它提供了您需要的所有信息。

1

JMS明確地將發佈者從訂閱者中分離出來。整個觀點應該是這兩個人不需要知道或關心另一個人的狀態。因此JMS沒有設施來做你需要的。另一方面,提供商將擁有特定於供應商的管理API,正如Paul所指出的那樣,AMQ建議消息是您希望使用Active MQ的消息。因爲這些是供應商特定的,所以它不能移植到任何其他提供者,但不會遵循JMS。不是AMQ的錯,只是它不是JMS規範的一部分。

相關問題