2012-10-22 31 views
4

在我的程序中,我有兩個模塊: - 通過主題進行通信的發佈者和訂閱者。ACTIVEMQ - 訂閱者在發佈者之後啓動時如何接收主題消息?

據我所知,爲了接收訂閱者的消息,應該在發佈者之前啓動它。但可能會出現用戶由於某種原因停機並需要重新啓動的情況。有什麼辦法,如果我在發佈者之後啓動訂閱者,那麼它也應該能夠接收消息?

回答

1

一般來說,如果你要考慮用戶脫機,並沒有丟失任何消息,你會使用JMS持久訂閱返回。這允許您的訂閱者在離線時收到錯過的任何消息。請注意,這裏需要注意的是,在開始收集離線消息之前,需要先訂閱一次。

除了標準的JMS Durable消費者型號外,ActiveMQ還提供retroactive consumer。另一種可能性是Virtual destinations

2

使用spring DMLC和持久訂閱者添加代碼示例。用一個普通的JMSTemplate(你標記了這個,所以我猜你正在使用JMS模板接收?)很難實現這一點,因爲你必須從模板中獲取會話並自己創建持久使用者。如果您使用DMLC方法,這將自動處理。

<bean id="myDurableConsumer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> 
<property name="connectionFactory" ref="myCf" /> 
<property name="sessionTransacted" value="true" /> 
<property name="subscriptionDurable" value="true"/> 
<property name="durableSubscriberName" value="myDurableNameThatIsUniqueForThisInstance" /> 
<property name="destinationName" value="someTopic" /> 
<property name="messageListener" ref="myListener" /> 
< /bean> 
+0

謝謝。我認爲它現在是'durableSubscriptionName'而不是'durableSuscriberName' – Kirby

相關問題