版本 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. Results the mutual for the first time(alpha阶段总结)

    由于前天听大家的成果展时,做得笔记不够完善,有一两个组找不到信息,如果没有评到的组望谅解. 分数分配: 由于组内某些原因,我们现重新分组: 试用版: 总结前阶段的工作: 在前一段时间,我们第一个spr ...

  2. APP分析----饿了么

    产品      饿了么 选择原因:有了外卖就可以轻松拥有一个不用出门也饿不着的爽歪歪周末. 第一部分 调研, 评测 下载软件并使用起来,描述最简单直观的个人第一次上手体验. 主界面: 第一次上手是大一 ...

  3. jieba库的应用

    #!/usr/bin/python# -*- coding:utf-8 -*- import imp,sys imp.reload(sys)from matplotlib.font_manager i ...

  4. 电梯调度系统(界面由C图形库编绘)

    电梯调度系统编程 1.编程题目 电梯调度. 2.结对编程组员 黄冠译,刘畅. 3.编程语言 C语言图形库. 4.题目要求: 5.代码运行及结果调试: ① 运行界面为C++图形库支持,开始运行的初始界面 ...

  5. [BUAA_SE_2017]个人作业-Week1

    个人作业-Week1 疑问 教材中说,PM在衡量需求时需要方方面面的能力与研究.可是,当下许多互联网IT公司只承担外包业务,即客户给什么需求就实现什么需求,甚至可能不要求其它先进的功能.此时,开发团队 ...

  6. HDU 1231 最大子序列

    http://acm.hdu.edu.cn/showproblem.php?pid=1231 Problem Description 给定K个整数的序列{ N1, N2, ..., NK },其任意连 ...

  7. hdu1542 Atlantis (线段树+矩阵面积并+离散化)

    There are several ancient Greek texts that contain descriptions of the fabled island Atlantis. Some ...

  8. BZOJ3550 [ONTAK2010]Vacation 【单纯形】

    题目链接 BZOJ3550 题解 单纯形裸题 题意不清,每个位置最多选一次 #include<algorithm> #include<iostream> #include< ...

  9. 解题:POI 2011 Dynamite

    题面 从零开始的DP学习系列之叁 树形DP的基本(常见?)思路:先递归进儿子,然后边回溯边决策,设状态时常设$dp[x]$表示以$x$为根的子树中(具体分析算不算$x$这个点)的情况 显然的二分答案, ...

  10. 解题:BZOJ 2818 GCD

    题面 转化一下题目,即是求$1$到$n$中对于某个素数$pri$使得$gcd(x*pri,y*pri)=pri$的$(x,y)$的数目 这样一来就可以考虑每个质数$pri$对答案的贡献,即为$1$到$ ...