2017-08-07 80 views
0

我使用activemq,駱駝和春天的組合。對於隊列,我們​​有多個消費者;在某些隊列消費者中,我們看到有未決消息(達到100,與預取相同),並且根本沒有得到處理,除了其他使用者處於同一隊列之外,它仍然是一切照舊。隊列消費者有待處理的消息,但他們沒有得到處理

我深入瞭解發生了什麼事情,發現spring cachingconnectionfactory可能導致此問題 - 我們懷疑此緩存連接工廠可能會將某些客戶端設置爲非活動狀態,並且留在預取緩衝區中的郵件未得到處理。我們的發現是否正確?

除此之外,有沒有什麼辦法可以從非活動用戶發佈的預取緩衝區中獲取消息?

回答

2

您不能使用具有可變併發性的CachingConnectionFactory,或者必須禁用使用者的緩存;請參閱javadocs的DefaultMessageListenerContainer

* <p><b>Note: Don't use Spring's {@link org.springframework.jms.connection.CachingConnectionFactory} 
* in combination with dynamic scaling.</b> Ideally, don't use it with a message 
* listener container at all, since it is generally preferable to let the 
* listener container itself handle appropriate caching within its lifecycle. 

否則空閒消費者將被放入緩存中。

+0

謝謝,這也是我們的發現。有沒有辦法檢索停留在非活動用戶的消息? –

+1

否;除非卷再次增加並且消費者被檢出緩存。 –