如果消費者變為慢速消費者,那麼後面可能會導致訊息積壓,導致生產者速度也變慢,甚至停止。我們可以配置訊息的過期時間,並設定訊息過期丟棄策略,以及使用死信佇列來處理訊息的積壓。
activemq提供了乙個timestampingbrokerplugin外掛程式,通過此外掛程式,我們可以為持久化訊息設定過期時間。參考:
>
ttlceiling
="86400000"
zeroexpirationoverride
="86400000"
/>
plugins
>
zeroexpirationoverride會為沒有設定過期時間的訊息設定過期時間。ttlceiling表示過期時間上限,如果程式中設定的過期時間超過此值,以此值為準。
>
>
>
>
topic
=">"
expiremessagesperiod
="60000"
>
>
proces***pired
="false"
/>
deadletterstrategy
>
policyentry
>
policyentries
>
policymap
>
destinationpolicy
>
borker
>
xmlns
=""scheduleperiodfordestinationpurge
="10000"
>
>
>
>
queue
=">"
gcinactivedestinations
="true"
inactivetimoutbeforegc
="30000"
/>
policyentries
>
policymap
>
destinationpolicy
>
broker
>
scheduleperiodfordestinationpurge:執行清理任務的週期;
gcinactivedestinations=true:表示啟用清理功能;
inactivetimoutbeforegc:queue或topic的超時時間,在規定的時間內,無有效訂閱,沒有入隊記錄,超時後就會被清理。
參考:
訊息積壓的處理
一 訊息積壓的原因 訊息積壓的直接原因,一定是系統中某個部分出現了效能問題,來不及處理上游傳送的訊息,才會導致訊息積壓。二 優化效能來避免訊息積壓 在使用訊息佇列的系統中,對於效能的優化,主要體現在生產者和消費者兩部分的業務邏輯中。對於訊息佇列本身的效能,作為使用者不需要太關注。主要原因是對於絕大多...
快速處理積壓訊息
場景二場景三 1 大量訊息在mq裡積壓了七八個小時還沒解決 一般的解決方案是修復消費者,讓消費者恢復消費速度。但是資料量大的情況下需要耗時很久。一般這個時候,只能操作緊急擴容了,1 先修復consumer的問題,確保其恢復消費的速度 2 新建乙個topic,partition是原來的10倍,臨時建立...
處理訊息佇列積壓
當消費者出現異常,很容易引起佇列積壓,如果一秒鐘1000個訊息,那麼乙個小時就是幾千萬的訊息積壓,是非常可怕的事情,但是生產線上又有可能會出現 當訊息積壓來不及處理,rabbitmq如果設定了訊息過期時間,那麼就有可能由於積壓無法及時處理而過期,這訊息就被丟失了 解決方法 不建議在生產環境使用資料過...