ActiveMQ的消息重发策略和DLQ处理
来源:互联网 发布:套淘宝保证金如何秒回 编辑:程序博客网 时间:2024/05/22 14:07
在以下三种情况中,ActiveMQ消息会被重发给客户端/消费者:
1.使用一个事务session,并且调用了rollback()方法;
2.一个事务session,关闭之前调用了commit;
3.在session中使用CLIENT_ACKNOWLEDGE签收模式,并且调用了Session.recover()方法。
Broker根据自己的规则,通过BrokerInfo命令包和客户端建立连接,向客户端传送缺省发送策略。但是客户端可以使用ActiveMQConnection.getRedeliveryPolicy()方法覆盖override这个策略设置。
一旦消息重发尝试超过重发策略中配置的maximumRedeliveries(缺省为6次)时,会给broker发送一个"Poison ack",通知它,这个消息被认为是一个毒丸(a poison pill),接着broker会将这个消息发送到DLQ(Dead Letter Queue),以便后续分析处理。
缺省死信队列(Dead Letter Queue)叫做ActiveMQ.DLQ;所有的未送达消息都会被发送到这个队列,以致会非常难于管理。你可以设置activemq.xml文件中的destination policy map的"individualDeadLetterStrategy"属性来修改.
自动丢弃过期消息(Expired Messages)
一些应用可能只是简单的丢弃过期消息,而不想将它们放到DLQ中,完全跳过了DLQ。在dead letter strategy死信策略上配置processExpired属性为false,可以实现这个功能。
将非持久消息(non-persistent messages)放入死信队列
ActiveMQ缺省不会将未发到的非持久消息放入死信队列。如果一个应用程序并不想将消息message设置为持久的,那么记录下来那些未发送到的消息对它来说往往也是没有价值的。不过如果想实现这个功能,可以在dead-letter strategy死信策略上设置processNonPersistent="true"
1.使用一个事务session,并且调用了rollback()方法;
2.一个事务session,关闭之前调用了commit;
3.在session中使用CLIENT_ACKNOWLEDGE签收模式,并且调用了Session.recover()方法。
Broker根据自己的规则,通过BrokerInfo命令包和客户端建立连接,向客户端传送缺省发送策略。但是客户端可以使用ActiveMQConnection.getRedeliveryPolicy()方法覆盖override这个策略设置。
- RedeliveryPolicy policy = connection.getRedeliveryPolicy();
- policy.setInitialRedeliveryDelay(500);
- policy.setBackOffMultiplier(2);
- policy.setUseExponentialBackOff(true);
- policy.setMaximumRedeliveries(2);
一旦消息重发尝试超过重发策略中配置的maximumRedeliveries(缺省为6次)时,会给broker发送一个"Poison ack",通知它,这个消息被认为是一个毒丸(a poison pill),接着broker会将这个消息发送到DLQ(Dead Letter Queue),以便后续分析处理。
缺省死信队列(Dead Letter Queue)叫做ActiveMQ.DLQ;所有的未送达消息都会被发送到这个队列,以致会非常难于管理。你可以设置activemq.xml文件中的destination policy map的"individualDeadLetterStrategy"属性来修改.
- <broker...>
- <destinationPolicy>
- <policyMap>
- <policyEntries>
- <!-- Set the following policy on all queues using the '>' wildcard -->
- <policyEntry queue=">">
- <deadLetterStrategy>
- <!--
- Use the prefix 'DLQ.' for the destination name, and make
- the DLQ a queue rather than a topic
- -->
- <individualDeadLetterStrategy
- queuePrefix="DLQ." useQueueForQueueMessages="true" />
- </deadLetterStrategy>
- </policyEntry>
- </policyEntries>
- </policyMap>
- </destinationPolicy>
- ...
- </broker>
自动丢弃过期消息(Expired Messages)
一些应用可能只是简单的丢弃过期消息,而不想将它们放到DLQ中,完全跳过了DLQ。在dead letter strategy死信策略上配置processExpired属性为false,可以实现这个功能。
- <broker...>
- <destinationPolicy>
- <policyMap>
- <policyEntries>
- <!-- Set the following policy on all queues using the '>' wildcard -->
- <policyEntry queue=">">
- <!--
- Tell the dead letter strategy not to process expired messages
- so that they will just be discarded instead of being sent to
- the DLQ
- -->
- <deadLetterStrategy>
- <sharedDeadLetterStrategy processExpired="false" />
- </deadLetterStrategy>
- </policyEntry>
- </policyEntries>
- </policyMap>
- </destinationPolicy>
- ...
- </broker>
将非持久消息(non-persistent messages)放入死信队列
ActiveMQ缺省不会将未发到的非持久消息放入死信队列。如果一个应用程序并不想将消息message设置为持久的,那么记录下来那些未发送到的消息对它来说往往也是没有价值的。不过如果想实现这个功能,可以在dead-letter strategy死信策略上设置processNonPersistent="true"
- <broker...>
- <destinationPolicy>
- <policyMap>
- <policyEntries>
- <!-- Set the following policy on all queues using the '>' wildcard -->
- <policyEntry queue=">">
- <!--
- Tell the dead letter strategy to also place non-persisted messages
- onto the dead-letter queue if they can't be delivered.
- -->
- <deadLetterStrategy>
- <sharedDeadLetterStrategy processNonPersistent="true" />
- </deadLetterStrategy>
- </policyEntry>
- </policyEntries>
- </policyMap>
- </destinationPolicy>
- ...
- </broker>
阅读全文
0 0
- ActiveMQ的消息重发策略和DLQ处理
- ActiveMQ的消息重发策略和DLQ处理
- ActiveMQ的消息重发策略和DLQ处理
- ActiveMQ的消息重发策略和DLQ处理
- ActiveMQ消息重发策略和DLQ处理(转载)
- ActiveMQ的消息重发与死信管理(DLQ)
- ActiveMQ的消息重发与死信管理(DLQ)
- ActiveMQ的消息重发与死信管理(DLQ)
- ActiveMQ的消息重发与死信管理(DLQ)
- ActiveMQ的消息重发与死信管理(DLQ)
- ActiveMQ Redelivery Policy(消息重发策略)
- ActiveMQ的消息重发机制
- ActiveMQ 处理失败时的消息重发机制
- ActiveMQ中的消息重发时间间隔和重发次数吗?
- ActiveMQ中的消息重发时间间隔和重发次数吗?
- ActiveMQ Redelivery Policy(讯息重发策略)
- spring activeMQ 整合(二): 重发机制(消息发送失败后的重新发送)
- activemq消息权限策略
- 入域的Windows访问未入域的Samba服务
- 头文件包含
- 将Unity的脚本封装为dll文件(使用monodevelop编译器)
- 网络图片浏览器
- myeclipse使用中遇到的一些问题
- ActiveMQ的消息重发策略和DLQ处理
- 卡顿检测工具TraceView之分析每个方法的执行时间
- android 原生app嵌入reactnative页面
- 次导数 次梯度 小结
- ICLR'16 best paper 深度压缩,加速网络前传
- UNet实战系列(一)
- Kettle安装使用教程(未完待续)
- java https请求
- Android 高仿微信图片查看花式效果