ActiveMQ队列消息过期时间设置和自动清除解决方案

版本 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 -->

原文地址:https://www.cnblogs.com/jpfss/p/10411528.html

时间: 2024-10-08 00:41:43

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

redis的过期时间设置和过期删除机制

1.设置过期时间 redis有四种命令可以用于设置键的生存时间和过期时间 EXPIRE <KEY> <TTL> : 将键的生存时间设为 ttl 秒 PEXPIRE <KEY> <TTL> :将键的生存时间设为 ttl 毫秒 EXPIREAT <KEY> <timestamp> :将键的过期时间设为 timestamp 所指定的秒数时间戳 PEXPIREAT <KEY> <timestamp>: 将键的过期时间设

如果将缓存“滑动过期时间”设置为1秒会怎样?

今天编写了一个采用ASP.NET Caching的组件,在为它编写Unit Test的过程中发现了一个有趣的问题,接下来我通过一个简单的实例说明这个问题.我们在一个控制台应用中编写了如下一段程序,这个段程序很简单:我们通过HttpRuntime的静态属性Cache得到表示当前缓存的Cache对象,并调用其Insert方法对当前的时间实施缓存.需要注意的是,我们采用“滑动时间”过期策略,并将这个滑动时间设置为1秒.

缓存:本地缓存和分布式缓存及缓存过期时间设置

1.首先对于本地内存缓存,就是把数据缓存在本机的内存中,如下图1所示: 2. 分布式缓存机制:可能存在跨进程,跨域访问缓存数据 对于分布式的缓存,此时因为缓存的数据是放在缓存服务器中的,或者说,此时应用程序需要跨进程的去访问分布式缓存服务器,如图2: 当我们在应用中使用跨进程的缓存机制,例如分布式缓存memcached或者微软的AppFabric,此时数据被缓存在应用程序之外的进程中.每次,当我们要把一些数据缓存起来的时候,缓存的API就会把数据首先序列化为字节的形式,然后把这些字节发送给缓存服

rabbitmq-设置队列全局过期时间后不能发送消息

最开始创建队列能正常发送消息,是这样的: 能正常发送,当把上面的注释放开后,则不能发送消息,报如下错误: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILED - inequivalent arg 'x-message-ttl' for queue 'top

小程序过期时间设置

原文地址:http://blog.51cto.com/13507333/2155783

SSH长时间不使用自动断开解决方案

修改ssh的配置文件 /etc/ssh/sshd_config. [[email protected] ~]# vim /etc/ssh/sshd_config #ClientAliveInterval 0 #服务器向客户端发送请求消息的时间间隔,默认为0,不发送 #ClientAliveCountMax 3 #服务器发出求后客户端没有响应的最大次数,超过后将自动断开. ClientAliveInterval 300 #每300秒发送一个KeepAlive请求 ClientAliveCountM

Laravel5.2队列驱动expire参数设置带来的重复执行问题 数据库驱动

  'connections' => [     ....         'database' => [             'driver' => 'database',             'table' => 'jobs',             'queue' => 'default',             'expire' => 60,         ],         'redis' => [             'driver

C#如何设置session过期时间

1.操作系统  步骤:开始——〉管理工具——〉Internet信息服务(IIS)管理器——〉网站——〉默认网站——〉  右键“属性”——〉主目录——〉配置——〉选项——〉启用会话状态——〉会话超时(在这儿设置你要的超时时间,单位分钟).确定即可.2.ASP.NET应用程序中Session过期时间的设置  在ASP.NET这样的Web应用中,Session是用来保存用户状态的常用手段,不过由于服务器内存空间是有限的,所以Session过期时间设置是很有必要的.  在ASP.NET中如何设置Sess

asp中设置session过期时间方法总结

http://www.jb51.net/article/31217.htm asp中设置session过期时间方法总结 作者: 字体:[增加 减小] 类型:转载 asp中默认session过期时间为20分钟,很多情况下不够,今天有客户要求很多就要重新登录了,所以准备了这篇文章,方便需要的朋友 如果程序中没有设置session的过期时间,那么session过期时间就会按照IIS设置的过期时间来执行,IIS中session默认过期时间为20分钟,IIS中session时间可以更改 时间设置要放在前面