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小时)。

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

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