2015-02-12 125 views
0

這是Difference between AUTO_ACKNOWLEDGEMENT mode with and without Spring JMS的後續問題。DMLC消息消耗和確認

我正在使用DMLC,並且我的併發使用者數爲1.預取限制爲> 1.我收到消息並在偵聽器執行之前進行確認。所以,當偵聽器正在執行時,代理具有更多的消息,並按照預取設置將消息發送給使用者。由於聽衆仍在執行,消費和確認如何對後續消息起作用?

是否會爲所有新消息調用receive()方法並確認它們並等待偵聽器執行完成? [如果是這種情況,我很困惑爲什麼我在消費者統計中得到未確認的消息計數] 或 receive()將被調用,但是直到前一個監聽器完成其執行後纔會確認下一個消息? [如果我的聽衆執行被其他原因阻止,這可能會解釋未確認的消息] 或 引擎蓋下發生了其他事情。

有人能解釋一下嗎?它會幫助我很多。

感謝和乾杯!

回答

0

編號被調用來獲取第一個消息;收到退貨時確認;容器線程然後調用監聽器。 (如果要回滾失敗的傳遞 - 如果偵聽器引發異常,則必須使用與DMLC的事務)。

任何預取消息都由代理交付給客戶端庫,但直到聽衆退出(onMessage())之後,它纔會被Spring看到。即在與MessageListener相同的線程上被調用。

預取的好處在於下一個消息將立即可用於下一個,但缺點是,如果您有多個消費者線程,並且偵聽器有時可能需要很長時間才能處理消息,則可以預取消息在他的隊列中,而其他線程空閒。

+0

所以,這可能會在消息代理端留下未確認的消息。 – xabhi 2015-02-12 21:26:46

+0

只有當你的聽衆舉起線程;一旦當前消息處理完成,下一個消息將被接收/接收。如果您不想看到未分類的消息,請不要使用預取。 – 2015-02-12 22:07:42