2014-06-19 30 views
3

我使用ActiveMQ版本5.7.x,我不得不監聽器監聽一個ActiveMQ隊列的Java的ActiveMQ nonBlockingRedelivery

隊列有一個ConnectionFactoryredeliveryPolicy設置爲3,intialRedeliveryDelay設置爲5000

隊列有一些好消息和壞消息。在聽這樣的隊列的時候,當壞消息到來時,他們被嘗試3次,等待時間爲5000毫秒,但是那麼好的消息在那段時間內被阻塞。

我想要的是,在每次重試5000毫秒的等待時間內,正常消息的處理應該繼續,並且不應該等待壞消息處理。

爲此,我試圖1個屬性的connectionFactory,即nonBlockingRedelivery設置爲TRUE。

nonBlockingRedelivery不起作用。

有沒有其他方法可以做到這一點?

回答

2

對於失敗的消息,您始終可以擁有重發隊列。

也就是說,接收來自主隊列的消息(無需重新傳送),並且如果發生異常,請將消息放在重新傳送隊列中。

讓你的應用程序監聽兩個隊列,並對兩個消息執行相同的邏輯。它應該只是兩個調用相同方法的消息監聽器。一個有重新傳遞,另一個沒有,但是具有稍微不同的錯誤處理。

+0

非常感謝您的回覆。得到了答案。會嘗試這個並讓你知道。 – user3755182

+1

但是你知道爲什麼nonblockingredelivery不適合我嗎? – user3755182

+0

沒有線索。從未使用它。 –

0

請看看ActiveMQConnectionFactory該屬性的描述, 它說什麼,我正是我想要的..

「當真的MessageConsumer將會停止不前的郵件傳遞從回滾事務重新傳遞信息。這意味着消息順序將不會被保留,並且會導致啓用TransactedIndividualAck選項「

但是同樣不起作用.. !!!

請問您可以考慮一下嗎?

+0

確保您的使用者正在使用正確的ConnectionFactory – deFreitas