ActiveMQ队列消息过期时间设置和自动清除解决方案
版本 apache-activemq-5.15.3
1、消息过期设置
参数详情
1)message过期则客户端不能接收
2)ttlCeiling:表示过期时间上限(程序写的过期时间不能超过此时间,超过则以此时间为准)
3)zeroExpirationOverride:表示过期时间(给未分配过期时间的消息分配过期时间)
配置示例
-
<broker>
-
...
-
<plugins>
-
<!-- 86,400,000ms = 1 day -->
-
<timeStampingBrokerPluginttlCeiling="30000" zeroExpirationOverride="30000" />
-
</plugins>
-
...
-
</broker>
2、死信队列设置
消息过期后会进入死信队列,如不想抛弃死信队列,默认进入ACTIVEMQ.DLQ队列,且不会自动清除;对于过期的消息进入死信队列还有一些可选的策略:放入各自的死信通道、保存在一个共享的队列(默认),且可以设置是否将过期消息放入队列的开关以及死信队列消息过期时间。
1)直接抛弃死信队列
AcitveMQ提供了一个便捷的插件:DiscardingDLQBrokerPlugin,来抛弃DeadLetter。如果开发者不需要关心DeadLetter,可以使用此策略。
配置示例
-
<broker>
-
...
-
<plugins>
-
<!-- 丢弃所有死信-->
-
<discardingDLQBrokerPlugindropAll="true" dropTemporaryTopics="true" dropTemporaryQueues="true" />
-
<!-- 丢弃指定死信-->
-
<!-- <discardingDLQBrokerPlugindropOnly="MY.EXAMPLE.TOPIC.29 MY.EXAMPLE.QUEUE.87" reportInterval="1000" />-->
-
<!--使用丢弃正则匹配到死信-->
-
<!--<discardingDLQBrokerPlugindropOnly="MY.EXAMPLE.TOPIC.[0-9]{3} MY.EXAMPLE.QUEUE.[0-9]{3}" reportInterval="3000"/>-->
-
</plugins>
-
...
-
</broker>
2)定时抛弃死信队列
默认情况下,ActiveMQ永远不会过期发送到DLQ的消息。但是,从ActiveMQ 5.12开始,deadLetterStrategy支持expiration属性,其值以毫秒为单位。
配置示例
-
<policyEntryqueue=">"…>
-
...
-
<deadLetterStrategy>
-
<sharedDeadLetterStrategy processExpired="true" expiration="30000"/>
-
</deadLetterStrategy>
-
...
-
</policyEntry>
3、慢消费者策略设置
Broker将会启动一个后台线程用来检测所有的慢速消费者,并定期关闭关闭它们;中断慢速消费者,慢速消费将会被关闭。abortConnection是否关闭连接;如果慢速消费者最后一个ACK距离现在的时间间隔超过阀maxTimeSinceLastAck,则中断慢速消费者。
配置示例
-
<policyEntryqueue=">"…>
-
…
-
<slowConsumerStrategy>
-
<abortSlowConsumerStrategyabortConnection="false"/> <!--不关闭底层链接-->
-
</slowConsumerStrategy>
-
…
-
</policyEntry>
4、测试
1)配置activemq.xml;
2)批量消息发送;
3)等待若干秒,消息减少;
4)等待若干秒,消息队列清除(设置了抛弃死信队列);
5)等待若干秒,消息队列清除(未设置抛弃死信队列,设置了死信队列过期时间);
6)等待若干秒,消息队列清除(不抛弃死信队列,死信队列不过期);
5、参考网址
https://my.oschina.net/coderedrain/blog/724943?utm_source=tuicool&utm_medium=referral
http://ask.csdn.net/questions/376817
http://activemq.apache.org/message-redelivery-and-dlq-handling.html
完整配置
-
<!--
-
Licensed to the Apache Software Foundation (ASF) under one or more
-
contributor license agreements. See the NOTICE file distributed with
-
this work for additional information regarding copyright ownership.
-
The ASF licenses this file to You under the Apache License, Version 2.0
-
(the "License"); you may not use this file except in compliance with
-
the License. You may obtain a copy of the License at
-
-
http://www.apache.org/licenses/LICENSE-2.0
-
-
Unless required by applicable law or agreed to in writing, software
-
distributed under the License is distributed on an "AS IS" BASIS,
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-
See the License for the specific language governing permissions and
-
limitations under the License.
-
-->
-
<!-- START SNIPPET: example -->
-
<beans
-
xmlns="http://www.springframework.org/schema/beans"
-
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
-
http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">
-
-
<!-- Allows us to use system properties as variables in this configuration file -->
-
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
-
<property name="locations">
-
<value>file:${activemq.conf}/credentials.properties</value>
-
</property>
-
</bean>
-
-
<!-- Allows accessing the server log -->
-
<bean id="logQuery" class="io.fabric8.insight.log.log4j.Log4jLogQuery"
-
lazy-init="false" scope="singleton"
-
init-method="start" destroy-method="stop">
-
</bean>
-
-
<!--
-
The <broker> element is used to configure the ActiveMQ broker.
-
-->
-
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}" schedulePeriodForDestinationPurge="10000">
-
<destinationPolicy>
-
<policyMap>
-
<policyEntries>
-
<policyEntry queue=">" gcInactiveDestinations="true" inactiveTimoutBeforeGC="30000">
-
<deadLetterStrategy>
-
<sharedDeadLetterStrategy processExpired="true" expiration="30000"/>
-
</deadLetterStrategy>
-
</policyEntry>
-
<policyEntry topic=">" >
-
<!-- The constantPendingMessageLimitStrategy is used to prevent
-
slow topic consumers to block producers and affect other consumers
-
by limiting the number of messages that are retained
-
For more information, see:
-
http://activemq.apache.org/slow-consumer-handling.html
-
-->
-
<pendingMessageLimitStrategy>
-
<constantPendingMessageLimitStrategy limit="1000"/>
-
</pendingMessageLimitStrategy>
-
</policyEntry>
-
</policyEntries>
-
</policyMap>
-
</destinationPolicy>
-
-
<!--
-
The managementContext is used to configure how ActiveMQ is exposed in
-
JMX. By default, ActiveMQ uses the MBean server that is started by
-
the JVM. For more information, see:
-
http://activemq.apache.org/jmx.html
-
-->
-
<managementContext>
-
<managementContext createConnector="false"/>
-
</managementContext>
-
-
<!--
-
Configure message persistence for the broker. The default persistence
-
mechanism is the KahaDB store (identified by the kahaDB tag).
-
For more information, see:
-
-
http://activemq.apache.org/persistence.html
-
-->
-
<persistenceAdapter>
-
<kahaDB directory="${activemq.data}/kahadb"/>
-
</persistenceAdapter>
-
<!--
-
The systemUsage controls the maximum amount of space the broker will
-
use before disabling caching and/or slowing down producers. For more information, see:
-
http://activemq.apache.org/producer-flow-control.html
-
-->
-
<systemUsage>
-
<systemUsage>
-
<memoryUsage>
-
<memoryUsage percentOfJvmHeap="70" />
-
</memoryUsage>
-
<storeUsage>
-
<storeUsage limit="100 gb"/>
-
</storeUsage>
-
<tempUsage>
-
<tempUsage limit="50 gb"/>
-
</tempUsage>
-
</systemUsage>
-
</systemUsage>
-
-
<!--
-
The transport connectors expose ActiveMQ over a given protocol to
-
clients and other brokers. For more information, see:
-
http://activemq.apache.org/configuring-transports.html
-
-->
-
<transportConnectors>
-
<!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
-
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
-
<transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
-
<transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
-
<transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
-
<transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
-
</transportConnectors>
-
-
<!-- destroy the spring context on shutdown to stop jetty -->
-
<shutdownHooks>
-
<bean xmlns="http://www.springframework.org/schema/beans" class="org.apache.activemq.hooks.SpringContextHook" />
-
</shutdownHooks>
-
-
<plugins>
-
<!-- 86,400,000ms = 1 day -->
-
<timeStampingBrokerPlugin ttlCeiling="30000" zeroExpirationOverride="30000" />
-
<!-- <discardingDLQBrokerPlugin dropAll="true" dropTemporaryTopics="true" dropTemporaryQueues="true" />-->
-
</plugins>
-
</broker>
-
-
<!--
-
Enable web consoles, REST and Ajax APIs and demos
-
The web consoles requires by default login, you can disable this in the jetty.xml file
-
Take a look at ${ACTIVEMQ_HOME}/conf/jetty.xml for more details
-
-->
-
<import resource="jetty.xml"/>
-
</beans>
-
<!-- END SNIPPET: example -->
ActiveMQ队列消息过期时间设置和自动清除解决方案的更多相关文章
- RabbitMQ 设置队列的过期时间
设置队列的过期时间非常简单,在声明队列时,设置x-expires参数即可.当队列的生存周期超时后,RabbitMQ server会自动将该队列删除. 代码如下: channel.QueueDeclar ...
- 面试官:RabbitMQ过期时间设置、死信队列、延时队列怎么设计?
哈喽!大家好,我是小奇,一位不靠谱的程序员 小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧 文章持续更新 一.前言 RabbitMQ我们经常的使用, ...
- 为什么一段时间后网站后台自动退出 php中session过期时间设置
修改php配置文件中的session.gc_maxlifetime.如果想了解更多session回收机制,继续阅读.(本文环境php5.2) 概述:每一次php请求,会有1/100的概率(默认值)触发 ...
- rabbitmq设置队列消息存活时间
public static final int ALIVETIME = 600000; public static final String QUEUE = "hnyz_gs_queue&q ...
- RabbitMQ(三)RabbitMQ消息过期时间(TTL)
在RabbitMQ(二)AMQP协议mandatory和immediate标志位区别中我们提到,在RabbitMQ3.0以后的版本里,去掉了immediate参数支持,要实现类似的确认功能要使用TTL ...
- [ASP.NET] 如果将缓存“滑动过期时间”设置为1秒会怎样?
今天编写了一个采用ASP.NET Caching的组件,在为它编写Unit Test的过程中发现了一个有趣的问题,接下来我通过一个简单的实例说明这个问题.我们在一个控制台应用中编写了如下一段程序,这个 ...
- redis基本操作和 过期时间设置以及持久化方案
Redis是NOSQL阵营中的一种数据库,主要用于存储缓存 五大数据类型:字符串(String).散列(hash).列表(list).集合(set).有序集合(SortedSett .zset) St ...
- srpingboot2 session过期时间设置
springboot2 设置session过期的配置 server.servlet.session.timeout = 1800 而不再是 server.session.timeout=1800
- jquery.cookie.js存与取以及过期时间设置
$(function(){ $(".active_out .abtn").click(function(){ $(this).parents(".active_out&q ...
随机推荐
- 关于datatable的数据绑定问题
最近做项目掉在数据绑定这个小坑里了,最后发现问题其实很简单,只是官方的文档描述可能不太清除导致的吧.首先贴上官网地址:http://www.datatables.club/ 关于这个插件的简单使用就不 ...
- fcn模型训练及测试
1.模型下载 1)下载新版caffe: https://github.com/BVLC/caffe 2)下载fcn代码: https://github.com/shelhamer/fcn.berkel ...
- [2017BUAA软工]第3次个人作业
软工第3次个人作业--案例分析 一. 调研,评测 1.软件的bug(至少两个,不少于40字) 测试软件: 必应词典移动端 测试平台:iPhone 6 bug1 对于翻译功能中的图片翻译功能,必应词典是 ...
- Beta版本测试第二天
一. 每日会议 1. 照片 2. 昨日完成工作 登入界面的优化与注册界面的优化,之前的登入界面与注册界面没有设计好,使得登入界面与注册界面并不好看,这次对界面进行了优化.另外尝试了找回密码的功能. 3 ...
- mysql只修改年月日,时分秒不变
比如时间为 “2014-12-11 13:12:01”修改为“2014-09-26 13:12::01”修改内容为修改yyyy-mm-dd为对应的日期,时间不变.UPDATE result_road_ ...
- Mysql 定位执行效率低的sql 语句
一.通过MySQL慢查询日志定位执行效率低的SQL语句. MySQL通过慢查询日志定位那些执行效率较低的SQL 语句,用--log-slow-queries[=file_name]选项启动时,mysq ...
- Fastqc使用说明
用FastQC检查二代测序原始数据的质量 2013-01-28 21:28:10| 分类: Bioinformatics | 标签:bioinformatics deep-seq |举报 | ...
- es6 字符串String的扩展
新特性:模板字符串 传统字符串 let name = "Jacky"; let occupation = "doctor"; //传统字符串拼接 let str ...
- SSL证书部署
SSL证书部署指南 https://www.trustauth.cn/ssl-guide
- excel 技能收集
排序: 对某D列第4行开始的数据排序,对D4之后的700个数据全部排序 =RANK(D4,$D$4:$D$700)