0

我在這裏對如何正確使用ActiveMQ有點困惑。在ActiveMQ中使用具有虛擬主題的持久訂閱者並且訂閱恢復策略扮演什麼角色?

我想要做的

我有一個消息產生一個虛擬的主題系統中。然後是系統B和C,它們都使用來自同一個虛擬主題的消息。系統B或C可能會脫機。因此,當他們重新聯機時,我需要他們接收在脫機期間生成的所有消息。

我已經試過到目前爲止

我讀過關於持久訂閱者(http://activemq.apache.org/how-do-durable-queues-and-topics-work.htmlVirtual topics/queues and durability)。這似乎符合我的問題描述,並且在做了一些實現之後,一切似乎都按照我最初的想法工作。

什麼造成混亂

然後我讀到認購恢復策略(http://activemq.apache.org/subscription-recovery-policy.html)。這是我應該配置的東西還是我完全誤解了一些東西?例如,如果我想存儲指定數量的消息,我應該配置一個FixedCountSubscriptionRecoveryPolicy還是應該查看一些pendingMessageLimitStrategy

回答

1

第一個問題是爲什麼當虛擬主題的主要點要發佈到主題(例如VirtualTopic.FOO)時,在虛擬主題的主題部分上使用持久主題訂閱,然後在匹配的過濾器值上創建隊列使用者(例如Consumer.A.VirtualTopic.FOO)?

關於恢復策略,它們僅適用於與持久主題訂閱不一樣的主題訂閱。對於一個普通的舊主題訂閱,只要發送到該主題的消息被刪除,所有發送該消息的消息被刪除後,只有在該主題已連接時纔會將該消息發送給該主題。訂閱恢復策略的作用是創建可配置的排序緩存,以允許創建主題訂閱並獲取發送到匹配主題的消息的重播。對於持久主題訂閱來說,這是不必要的,因爲只要用戶處於離線狀態,發送到其訂閱的主題的消息就存儲在代理消息存儲中。

只有在幾個邊緣情況下,恢復策略才能混合到持久主題訂閱中,例如發送到標記爲非持久性或第一次訂閱的消息,其中某些過去的消息可從內存中恢復並播放到新的Durable訂閱作爲一種入門書,但這是關於他們在耐用情況下的所有優點。

無論如何,通過創建隊列使用者,您最好使用虛擬主題,因爲此機制提供了許多優於持久主題訂閱的優點。 Virtual Destinations上的ActiveMQ文檔解釋了所有這些。

+0

現在更有意義了,謝謝! –