爲什麼要配置這個策略
最近在開發中遇到一個問題,mq的生產者正常工作,此時消費端由於異常與mq失去連接,加入消費端失聯時間較長會導致mq堆積大量消息,等下一次消費端連接上的時候會有大量消息涌入,如果處理不好會導致消費端直接內存溢出。所以我們希望如果mq消息在我們設定的時間內沒有被消費就把它刪掉,一方面也能緩解mq端的消息積壓,釋放壓力。
配置過期策略
打開配置文件在conf目錄下的activemq.xml
- message過期自動刪除配置
<broker xmlns="http://activemq.apache.org/schema/core" schedulePeriodForDestinationPurge="10000">
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry topic=">" expireMessagesPeriod="60000">
<deadLetterStrategy>
<sharedDeadLetterStrategy processExpired="false" />
</deadLetterStrategy>
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy>
</broker>
在broker
節點的destinationPolicy
節點加入即可
標籤processExpired="false"
表示不保存過期消息到死信隊列,處理手段爲刪除,爲true則是保留。
標籤expireMessagesPeriod="60000"
屬性表示每隔60秒鐘檢查message
是否過期。
topic=">"
表示該策略對所有topic都生效。而topic="active.>"
就表示該策略對以active.開頭的所有topic生效,注意有個點號。同理配置queue只需將topic改爲queue即可。
- message過期時間設置
<borker>
<plugins>
<timeStampingBrokerPlugin ttlCeiling="360000" zeroExpirationOverride="360000" />
</plugins>
</borker>
上面那步搞定了之後,再修改timeStampingBrokerPlugin
標籤裏ttlCeiling="360000" zeroExpirationOverride="360000"
表示過期時間爲360000ms(1小時)。
改完配置保存,重啓生效。