版本 apache-activemq-5.15.3

1、消息过期设置

参数详情

1)message过期则客户端不能接收

2)ttlCeiling:表示过期时间上限(程序写的过期时间不能超过此时间,超过则以此时间为准)

3)zeroExpirationOverride:表示过期时间(给未分配过期时间的消息分配过期时间)

配置示例


  1. <broker>
  2. ...
  3. <plugins>
  4. <!-- 86,400,000ms = 1 day -->
  5. <timeStampingBrokerPluginttlCeiling="30000" zeroExpirationOverride="30000" />
  6. </plugins>
  7. ...
  8. </broker>

2、死信队列设置

消息过期后会进入死信队列,如不想抛弃死信队列,默认进入ACTIVEMQ.DLQ队列,且不会自动清除;对于过期的消息进入死信队列还有一些可选的策略:放入各自的死信通道、保存在一个共享的队列(默认),且可以设置是否将过期消息放入队列的开关以及死信队列消息过期时间。

1)直接抛弃死信队列

AcitveMQ提供了一个便捷的插件:DiscardingDLQBrokerPlugin,来抛弃DeadLetter。如果开发者不需要关心DeadLetter,可以使用此策略。

配置示例


  1. <broker>
  2. ...
  3. <plugins>
  4.     <!-- 丢弃所有死信-->
  5. <discardingDLQBrokerPlugindropAll="true" dropTemporaryTopics="true" dropTemporaryQueues="true" />
  6. <!-- 丢弃指定死信-->
  7. <!-- <discardingDLQBrokerPlugindropOnly="MY.EXAMPLE.TOPIC.29 MY.EXAMPLE.QUEUE.87" reportInterval="1000" />-->
  8.     <!--使用丢弃正则匹配到死信-->
  9. <!--<discardingDLQBrokerPlugindropOnly="MY.EXAMPLE.TOPIC.[0-9]{3} MY.EXAMPLE.QUEUE.[0-9]{3}" reportInterval="3000"/>-->
  10. </plugins>
  11. ...
  12. </broker>

2)定时抛弃死信队列

默认情况下,ActiveMQ永远不会过期发送到DLQ的消息。但是,从ActiveMQ 5.12开始,deadLetterStrategy支持expiration属性,其值以毫秒为单位。

配置示例


  1. <policyEntryqueue=">"…>
  2. ...
  3. <deadLetterStrategy>
  4.     <sharedDeadLetterStrategy processExpired="true" expiration="30000"/>
  5. </deadLetterStrategy>
  6. ...
  7. </policyEntry>

3、慢消费者策略设置

Broker将会启动一个后台线程用来检测所有的慢速消费者,并定期关闭关闭它们;中断慢速消费者,慢速消费将会被关闭。abortConnection是否关闭连接;如果慢速消费者最后一个ACK距离现在的时间间隔超过阀maxTimeSinceLastAck,则中断慢速消费者。

配置示例


  1. <policyEntryqueue=">"…>
  2.     <slowConsumerStrategy>
  3.         <abortSlowConsumerStrategyabortConnection="false"/> <!--不关闭底层链接-->
  4.     </slowConsumerStrategy>
  5.     …
  6. </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

完整配置


  1. <!--
  2. Licensed to the Apache Software Foundation (ASF) under one or more
  3. contributor license agreements. See the NOTICE file distributed with
  4. this work for additional information regarding copyright ownership.
  5. The ASF licenses this file to You under the Apache License, Version 2.0
  6. (the "License"); you may not use this file except in compliance with
  7. the License. You may obtain a copy of the License at
  8. http://www.apache.org/licenses/LICENSE-2.0
  9. Unless required by applicable law or agreed to in writing, software
  10. distributed under the License is distributed on an "AS IS" BASIS,
  11. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. See the License for the specific language governing permissions and
  13. limitations under the License.
  14. -->
  15. <!-- START SNIPPET: example -->
  16. <beans
  17. xmlns="http://www.springframework.org/schema/beans"
  18. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  19. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  20. http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">
  21. <!-- Allows us to use system properties as variables in this configuration file -->
  22. <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  23. <property name="locations">
  24. <value>file:${activemq.conf}/credentials.properties</value>
  25. </property>
  26. </bean>
  27. <!-- Allows accessing the server log -->
  28. <bean id="logQuery" class="io.fabric8.insight.log.log4j.Log4jLogQuery"
  29. lazy-init="false" scope="singleton"
  30. init-method="start" destroy-method="stop">
  31. </bean>
  32. <!--
  33. The <broker> element is used to configure the ActiveMQ broker.
  34. -->
  35. <broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}" schedulePeriodForDestinationPurge="10000">
  36. <destinationPolicy>
  37. <policyMap>
  38. <policyEntries>
  39. <policyEntry queue=">" gcInactiveDestinations="true" inactiveTimoutBeforeGC="30000">
  40. <deadLetterStrategy>
  41. <sharedDeadLetterStrategy processExpired="true" expiration="30000"/>
  42. </deadLetterStrategy>
  43. </policyEntry>
  44. <policyEntry topic=">" >
  45. <!-- The constantPendingMessageLimitStrategy is used to prevent
  46. slow topic consumers to block producers and affect other consumers
  47. by limiting the number of messages that are retained
  48. For more information, see:
  49. http://activemq.apache.org/slow-consumer-handling.html
  50. -->
  51. <pendingMessageLimitStrategy>
  52. <constantPendingMessageLimitStrategy limit="1000"/>
  53. </pendingMessageLimitStrategy>
  54. </policyEntry>
  55. </policyEntries>
  56. </policyMap>
  57. </destinationPolicy>
  58. <!--
  59. The managementContext is used to configure how ActiveMQ is exposed in
  60. JMX. By default, ActiveMQ uses the MBean server that is started by
  61. the JVM. For more information, see:
  62. http://activemq.apache.org/jmx.html
  63. -->
  64. <managementContext>
  65. <managementContext createConnector="false"/>
  66. </managementContext>
  67. <!--
  68. Configure message persistence for the broker. The default persistence
  69. mechanism is the KahaDB store (identified by the kahaDB tag).
  70. For more information, see:
  71. http://activemq.apache.org/persistence.html
  72. -->
  73. <persistenceAdapter>
  74. <kahaDB directory="${activemq.data}/kahadb"/>
  75. </persistenceAdapter>
  76. <!--
  77. The systemUsage controls the maximum amount of space the broker will
  78. use before disabling caching and/or slowing down producers. For more information, see:
  79. http://activemq.apache.org/producer-flow-control.html
  80. -->
  81. <systemUsage>
  82. <systemUsage>
  83. <memoryUsage>
  84. <memoryUsage percentOfJvmHeap="70" />
  85. </memoryUsage>
  86. <storeUsage>
  87. <storeUsage limit="100 gb"/>
  88. </storeUsage>
  89. <tempUsage>
  90. <tempUsage limit="50 gb"/>
  91. </tempUsage>
  92. </systemUsage>
  93. </systemUsage>
  94. <!--
  95. The transport connectors expose ActiveMQ over a given protocol to
  96. clients and other brokers. For more information, see:
  97. http://activemq.apache.org/configuring-transports.html
  98. -->
  99. <transportConnectors>
  100. <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
  101. <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
  102. <transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
  103. <transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
  104. <transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
  105. <transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
  106. </transportConnectors>
  107. <!-- destroy the spring context on shutdown to stop jetty -->
  108. <shutdownHooks>
  109. <bean xmlns="http://www.springframework.org/schema/beans" class="org.apache.activemq.hooks.SpringContextHook" />
  110. </shutdownHooks>
  111. <plugins>
  112. <!-- 86,400,000ms = 1 day -->
  113. <timeStampingBrokerPlugin ttlCeiling="30000" zeroExpirationOverride="30000" />
  114. <!-- <discardingDLQBrokerPlugin dropAll="true" dropTemporaryTopics="true" dropTemporaryQueues="true" />-->
  115. </plugins>
  116. </broker>
  117. <!--
  118. Enable web consoles, REST and Ajax APIs and demos
  119. The web consoles requires by default login, you can disable this in the jetty.xml file
  120. Take a look at ${ACTIVEMQ_HOME}/conf/jetty.xml for more details
  121. -->
  122. <import resource="jetty.xml"/>
  123. </beans>
  124. <!-- END SNIPPET: example -->

ActiveMQ队列消息过期时间设置和自动清除解决方案的更多相关文章

  1. RabbitMQ 设置队列的过期时间

    设置队列的过期时间非常简单,在声明队列时,设置x-expires参数即可.当队列的生存周期超时后,RabbitMQ server会自动将该队列删除. 代码如下: channel.QueueDeclar ...

  2. 面试官:RabbitMQ过期时间设置、死信队列、延时队列怎么设计?

    哈喽!大家好,我是小奇,一位不靠谱的程序员 小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧 文章持续更新 一.前言 RabbitMQ我们经常的使用, ...

  3. 为什么一段时间后网站后台自动退出 php中session过期时间设置

    修改php配置文件中的session.gc_maxlifetime.如果想了解更多session回收机制,继续阅读.(本文环境php5.2) 概述:每一次php请求,会有1/100的概率(默认值)触发 ...

  4. rabbitmq设置队列消息存活时间

    public static final int ALIVETIME = 600000; public static final String QUEUE = "hnyz_gs_queue&q ...

  5. RabbitMQ(三)RabbitMQ消息过期时间(TTL)

    在RabbitMQ(二)AMQP协议mandatory和immediate标志位区别中我们提到,在RabbitMQ3.0以后的版本里,去掉了immediate参数支持,要实现类似的确认功能要使用TTL ...

  6. [ASP.NET] 如果将缓存“滑动过期时间”设置为1秒会怎样?

    今天编写了一个采用ASP.NET Caching的组件,在为它编写Unit Test的过程中发现了一个有趣的问题,接下来我通过一个简单的实例说明这个问题.我们在一个控制台应用中编写了如下一段程序,这个 ...

  7. redis基本操作和 过期时间设置以及持久化方案

    Redis是NOSQL阵营中的一种数据库,主要用于存储缓存 五大数据类型:字符串(String).散列(hash).列表(list).集合(set).有序集合(SortedSett .zset) St ...

  8. srpingboot2 session过期时间设置

    springboot2 设置session过期的配置 server.servlet.session.timeout = 1800 而不再是 server.session.timeout=1800

  9. jquery.cookie.js存与取以及过期时间设置

    $(function(){ $(".active_out .abtn").click(function(){ $(this).parents(".active_out&q ...

随机推荐

  1. 安装AndroidJDK的坑

    最近公司要用weex了,先开始搭一下环境,真的都是坑,写下来大家引以为鉴,我踩坑三天的后果. 首先要安装JavaJDK这个过程就不写了都是程序员网上搜索一下很多,注意找论坛上最新的帖子来看,这里有一个 ...

  2. 一个简单的加减乘除自动生成小程序升级版(JAVA)

    import java.util.Scanner; public class Suan { public static void main(String[] args) { int []b;//设置数 ...

  3. Beta冲刺 (6/7)

    队名:天机组 组员1友林 228(组长) 今日完成:修改代码 明天计划:封装代码 剩余任务:优化网络通讯机制 主要困难:暂无 收获及疑问:暂无 组员2方宜 225 今日完成:优化了一部分活动,调整了界 ...

  4. jquery easyui datagrid getSelected getChecked获取选择行数据(勾选)数据

    要想获得上图所选取的元素只能用getChecked getSelected不能进行多个选择,只能单选 /* getSelected取得选中的数据,否则为null */ var user=$(" ...

  5. Internet History, Technology and Security (Week 4)

    Week 4 History: Commercialization and Growth We are now moving into Week 4! This week, we will be co ...

  6. PAT 甲级 1004 Counting Leaves

    https://pintia.cn/problem-sets/994805342720868352/problems/994805521431773184 A family hierarchy is ...

  7. 命令行方式操作O365

    这几天公司为O365启用了双因子认证,期间出了些小问题,导致我无法使用管理员账号登入控制台,但是Powershell的方法依旧可以.所以我觉得还是有必要把图形化操作改成脚本操作,以备不时之需.以后凡是 ...

  8. 小程序 获取用户的openid

    wx.login({ success: res => { var code = res.code; //返回code // 小程序appid var appId = 'wxd751fc845c9 ...

  9. 深入理解JAVA虚拟机阅读笔记4——虚拟机类加载机制

    虚拟机把描述类的Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制. 在Java语言中,类型的加载.连接和初始化过程都是 ...

  10. Angular中sweetalert弹框的使用详解

    最近太忙了,项目中使用的弹框老板嫌太丑,让我们优化一下,我在网上找了一下,找到了sweetalert弹框,算是比较好看的弹框了.所以我就想办法将sweetalert用到项目中,在项目中引入sweeta ...