版本 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. 啊啊啊 草蛋啊 之前努力一天搞出来的时间算法 被一句pk掉 给我砖头

    package yun3; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Cale ...

  2. Windows服务器安全配置指南

    1).系统安全基本设置 2).关闭不需要的服务 Computer Browser:维护网络计算机更新,禁用 Distributed File System: 局域网管理共享文件,不需要禁用 Distr ...

  3. JS获取地址栏中的链接URL参数

    function getUrlParam(name){ var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&am ...

  4. git常用命令复习及其基本使用示例

    年后回来新上到项目,对于git的一些操作命令记得有点混乱了,所以特整理笔记如下: 一.git常用命令复习 查看当前分支:git branch (显示结果中带有*号的是当前分支)查看所有分支: git ...

  5. Js 中的原始值和引用值

    最近遇写 node.js 时到一个问题,把对象当赋值给数组成员时总是出错,比如下面的代码, var Arr = new Array(); var Obj = new Object(); for(var ...

  6. 【百度】大型网站的HTTPS实践(一)——HTTPS协议和原理

    大型网站的HTTPS实践(一)——HTTPS协议和原理 原创 网络通信/物联网 作者:AIOps智能运维 时间:2018-11-09 15:07:39  349  0 前言 百度于2015年上线了全站 ...

  7. poj 1523 SPF(双连通分量割点模板)

    题目链接:http://poj.org/problem?id=1523 题意:给出无向图的若干条边,求割点以及各个删掉其中一个割点后将图分为几块. 题目分析:割点用tarjan算法求出来,对于每个割点 ...

  8. nowcoder 202F-平衡二叉树

    题目链接 题目描述 平衡二叉树,顾名思义就是一棵“平衡”的二叉树.在这道题中,“平衡”的定义为,对于树中任意一个节点,都满足左右子树的高度差不超过 d. 空树的高度定义为0,单个节点的高度为1,其他情 ...

  9. 关于BIO和NIO的理解

    摘要: 关于BIO和NIO的理解 最近大概看了ZooKeeper和Mina的源码发现都是用Java NIO实现的,所以有必要搞清楚什么是NIO.下面是我结合网络资料自己总结的,为了节约时间图示随便画的 ...

  10. NOIP2018前的一些计划&记录(日更)

    先空着,等停课了再开始写. 诸位好,我是yyb.现在显然已经不再是高一的小蒟蒻了,已经升级为了高二的菜鸡了 现在已经不能再每天划划水切切题了,毕竟......已经高二了,所有的机会从高一的两倍全部除了 ...