博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ActiveMQ的消息重发策略和DLQ处理
阅读量:6517 次
发布时间:2019-06-24

本文共 1588 字,大约阅读时间需要 5 分钟。

  hot3.png

在以下三种情况中,ActiveMQ消息会被重发给客户端/消费者:
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"属性来修改。
...

自动丢弃过期消息(Expired Messages)
一些应用可能只是简单的丢弃过期消息,而不想将它们放到DLQ中,完全跳过了DLQ。在dead letter strategy死信策略上配置processExpired属性为false,可以实现这个功能。
...

将非持久消息(non-persistent messages)放入死信队列
ActiveMQ缺省不会将未发到的非持久消息放入死信队列。如果一个应用程序并不想将消息message设置为持久的,那么记录下来那些未发送到的消息对它来说往往也是没有价值的。不过如果想实现这个功能,可以在dead-letter strategy死信策略上设置processNonPersistent="true"
...

转载于:https://my.oschina.net/ramboo/blog/182681

你可能感兴趣的文章
ES6特性之:模板字符串
查看>>
从零玩转jQuery-属性相关
查看>>
Unity导航系统Navigation使用教程
查看>>
Unity C#图片转换二进制流、字符串互转
查看>>
NIO框架入门(四):Android与MINA2、Netty4的跨平台UDP双向通信实战
查看>>
Anroid文章推荐
查看>>
YAML文件中在单一文件中区分多个文件
查看>>
Android开发小技巧之商品属性筛选与商品筛选
查看>>
Netflix如何节省92%视频编码成本?
查看>>
ios兼容iphonex刘海屏解决方案
查看>>
Virtual Box 工具栏(菜单栏)消失的解决方法
查看>>
HBuilder使用夜神模拟器调试Android应用
查看>>
公司的一个面试题:如何用css让一个容器水平垂直居中?
查看>>
大数据教程(一)—— Hadoop集群坏境搭建配置
查看>>
汇聚年度最佳技术与实践 OpenStack Days China大会7月在京举行
查看>>
第119天:移动端:CSS像素、屏幕像素和视口的关系
查看>>
数据库两大神器【索引和锁】
查看>>
linux查找目录下的所有文件中是否含有某个字符串
查看>>
jQuery新的事件绑定机制on()示例应用
查看>>
云栖大会·武汉峰会|阿里云E-HPC联合安世亚太、联科集团共建云超算生态
查看>>