我正在尋找一個奇怪的問題,其中一個緩慢的消費者隊列導致同一隊列上的所有其他使用者開始以30秒的間隔消費消息的幫助。這就是所有的消費者,但速度慢的消費者不會盡可能快地消費信息,相反他們在消費前等待一些神奇的30年代的障礙。一個緩慢的ActiveMQ消費者導致其他消費者緩慢
我的應用程序的基本流程是這樣的:
- 一些生產者發生的信息到一個隊列中。消息可以有不同的JMSXGroupIDs
- 許多消費者收聽消息對單個隊列
- 作爲標準做法JMSXGroupIDs得到分佈在消費者
- 在某些點上消費者的一個變慢,無法處理的消息非常快速
- 緩慢的消費者最終在代理上填充其預取緩衝區,並且AMQ認識到它在該點處的速度很慢(默認行爲)
- - 或者一些「隨機」但稍後關閉時間 - 除緩慢一開始只以相同的30秒間隔消費郵件
- 如果接收者很慢變快又那麼事情很快恢復正常運行和上世紀30年代屏障消失
我在爲這可能是導致該問題的損失,或如何解決它,請幫幫我。
更多的背景和結果
- 我已經成功地可靠地重現上AMQ 5.8.0,5.9.0(在問題最初發現)和5.9.1這個問題,執行全新安裝和現有的操作系統管理的安裝,並在不同的機器上有些虛擬機,有些則沒有。所有的Linux安裝,不同的操作系統和Java版本。
- 它似乎沒有受到與預取相關的任何事情的影響,即:將預取值從1更改爲10並不會阻止問題的發生
- [red herring?]啓用調試日誌amq實例顯示與定期檢查可能過期的消息有關的日誌。該隊列沒有過期策略,所以我只能認爲計劃的時間只是以這樣一種方式喚醒,然後纔將消息發送給非慢速消費者。
- 如果進入30s模式,則再次進入,然後再次進入秒 - 過去分鐘時間總是相同的,例如過去一分鐘的14秒和44秒。所有消費者和所有託管這些消費者的機器都是如此。這些障礙點在重新啓動amq後會發生變化。
創建單元測試,並打開一個JIRA來和ActiveMQ –
OK問題就行了。我認爲這不是預期的行爲呢? – Matt
https://issues.apache.org/jira/browse/AMQ-5200 - 創建此票以涵蓋此確切情況(即使用羣組而非選擇器),以防其被視爲比修復備選案例更重要 – Matt