2012-07-03 66 views
2

如何在activemq.xml中創建/預配置持久訂閱服務器,以便在ActiveMQ出現後就可以使用這些訂閱服務?就好像用戶處於離線狀態一樣。如何在activemq.xml中創建/預配置持久訂戶,以便在ActiveMQ啓動時準備好這些訂閱?

我們期待固定(但可配置)數量的已知訂戶。 如果不是所有訂戶 都啓動,則希望緩衝發佈商從第1天開始發送的所有信息。不知道這是否是一種常見的情況,但提前感謝幫助。

+0

對於以數據爲中心的分佈式系統,這是一種常見的情況,並且作爲FYI,在使用使用Durability QoS的OMG DDS實現時,您的用例很容易實現。有關更多信息,請參閱[OMG數據分發服務門戶](http://portals.omg.org/dds/)。 –

回答

5

這是一個非常常見的用例。實際上你應該看到的是composite destinations,而不是持久話題(這個功能存在很多問題,主要的是信息不被默認持續存在,因此不會存在代理中斷)。

使用此方案,您可以設置一個複合主題,將每個消息轉發到多個隊列 - 每個用戶專用一個隊列。

<destinationInterceptors> 
    <virtualDestinationInterceptor> 
    <virtualDestinations> 
     <compositeTopic name="orders"> 
     <forwardTo> 
      <queue physicalName="orders.consumer1" /> 
      <queue physicalName="orders.consumer2" /> 
     </forwardTo> 
     </compositeTopic> 
    </virtualDestinations> 
    </virtualDestinationInterceptor> 
</destinationInterceptors> 

通過這種方式,當用戶最終連接到自己的隊列時,會消耗饋送到其中的消息。

請謹慎使用,請確保您的memory limits are large enough處理存儲在這些隊列中的消息,或者您的代理似乎掛起(稱爲生產者流量控制的代理功能)。

我看到你是一個新用戶,所以如果這回答你的問題,請打勾。

+0

Thx爲您的答案。我們會在什麼情況下使用pub/durable sub而不是虛擬主題?我的印象虛擬虛擬主題似乎總體上是一個更好的發佈/訂閱方法,唯一的區別是隊列支持? – user1500049

+0

實際上,我總是喜歡虛擬主題。我能想到的唯一用例是,我可能會考慮持久話題,例如連接到經紀商的網絡客戶端,幾乎總是能夠爲追溯消費者服務。虛擬主題更容易考慮,可以通過JMX進行檢查,可以連接池,可以在代理網絡中正常工作,並且可以在其上設置目標策略(如消息過期,內存限制和DLQ)。總之,他們在各方面都非常好。如果有幫助,別忘了投票! –

0

您可以使用一個持久隊列(而不是一個主題)並使用隊列瀏覽器(訂閱者)來接收消息。追蹤序列號的責任在用戶端(不確定在你的情況下是否可行)。隊列瀏覽器不會從持久隊列中刪除消息。您必須使用帶時間的消息,或者在特定時間段後使用常規隊列用戶來清除舊消息。

具有持久隊列的隊列瀏覽器在服務器上的納稅越來越少 - 但是您正在向訂戶推送更多的負載。

希望它有幫助。

相關問題