2014-01-22 80 views
1

我將發佈到一個單一的Activemq主題,我會有很多用戶從這個Activemq消費。我的一些訂閱者可能會在晚些時候連接,但是當他們這樣做時,我希望他們接收發布到該Activemq主題的所有消息。我該如何做到這一點,這是什麼pubub的子類型調用,你可以得到一個完整的圖片在第一次訂閱?駱駝Activemq主題延遲訂戶

+0

我不知道這是可能的。在ActiveMQ中使用主題時,必須告訴它主機是誰提前,以便知道需要多長時間才能掛上消息。在你的情況下,你希望它們永遠被掛起,這就失去了ActiveMQ的部分目的。這是一個消息隊列,而不是數據庫。消息意味着被處置。 – bstempi

+0

我想我找到了一些東西。追溯是關鍵字。目前正在測試,如果它是我正在尋找。這應該是可行的,因爲Activemq內置了一個數據庫(kahadb)。 – Thirlan

+0

基本上你正在做的是讓你的數據庫增長無限。遲早的表現將會非常糟糕。 Activemq旨在僅在短時間內存儲消息。 –

回答

1

創建單獨的初始加載服務通常要好很多。新客戶連接並希望多年錯過更新可觸發源應用程序的某些同步,並通過其他一些渠道(例如隊列)接收這些消息。一旦同步,您只需在您的主題上使用耐用用戶,以確保您不會錯過任何更新。

ActiveMQ並非真正用於長期存儲大量數據的中間數據庫。 Kahadb不像常規數據庫(儘管如果您願意,可以使用JDBC數據源來備份它)。在MOM軟件中長期存儲消息實際上是一種反模式。

+1

ActiveMQ in Action本書實際上建議使用Retroactive來解決這個問題,因爲在這種情況下使用兩種服務存在棘手的競爭條件,您必須非常仔細地編寫代碼以避免它們。因此,根據每個人的建議,我寧願只使用追溯功能,並將檢索策略設置爲1小時。對於我們的目標應該沒問題。 – Thirlan

+0

作爲一個通用的答案,我接受你的Petter,因爲它對未來的讀者很好,但它不是我們想要的解決方案。 – Thirlan

+0

啊哈,好吧。如果你正在談論幾個小時,那麼你的罰款具有追溯力,這可能是最好的解決方案。如果案例要將數據保存數週甚至數年,那麼您還有另一個問題。 –