打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Spring ActiveMQ 整合(五): 死信队列

1.死信队列和回退队列的区别:

 这篇文章写得非常到位:http://blog.csdn.net/coderepository/article/details/7023304

2.什么是死信队列:

DLQ-死信队列(Dead Letter Queue)用来保存处理失败或者过期的消息。
出现以下情况时,消息会被redelivered
 A transacted session is used and rollback() is called.
 A transacted session is closed before commit is called.
 A session is using CLIENT_ACKNOWLEDGE and Session.recover() is called.
当一个消息被redelivered超过maximumRedeliveries(缺省为6次,具体设置请参考后面的链接)次数时,会给broker发送一个"Poison ack",这个消息被认为是a poison pill,这时broker会将这个消息发送到DLQ,以便后续处理。
缺省的死信队列是ActiveMQ.DLQ,如果没有特别指定,死信都会被发送到这个队列。
缺省持久消息过期,会被送到DLQ,非持久消息不会送到DLQ
可以通过配置文件(activemq.xml)来调整死信发送策略。
具体的配合可参考:http://blog.csdn.net/fengyong7723131/article/details/52415299

3.怎么样才能将失败的消息放入死信队列呢?


      我当时配置的时候,是折腾了好久,我能在界面上看到,我的testQueOne队列里面有消息,但是消费失败后,只见失败,不见他在ActiveMQ.DLQ死信队列里面出现。
    看了好久。最终解决了。
    解决的过程是:
     ①.先给activeMQ配置事务。可参考上篇文章: Spring ActiveMQ 整合(四): JMS 事务管理
     ②.再消费者接受消息失败后,对事物进行回滚,当文件配置的重发机制等等,执行完后,由应用发送rollback触发。
         即:session.rollback();

      这样就进入了死信队列,不进行这样的操作,他是不会出现在死信队列里面的。






   

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
ActiveMQ讯息策略
ActiveMQ --- 高级篇
ActiveMQ  延时投递
Activemq5.2.0的spring开发
JMS--ActiveMQ的简单使用
干货:RabbitMQ核心概念及工作原理
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服