ActiveMQ配置持久化消息的過期策略

爲什麼要配置這個策略

最近在開發中遇到一個問題,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小時)。

改完配置保存,重啓生效。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章