2019独角兽企业重金招聘Python工程师标准>>>

ActiveMQ的消息重发策略和DLQ处理 博客分类: MQ

在以下三种情况中,ActiveMQ消息会被重发给客户端/消费者: 
1.使用一个事务session,并且调用了rollback()方法; 
2.一个事务session,关闭之前调用了commit; 
3.在session中使用CLIENT_ACKNOWLEDGE签收模式,并且调用了Session.recover()方法。

Broker根据自己的规则,通过BrokerInfo命令包和客户端建立连接,向客户端传送缺省发送策略。但是客户端可以使用ActiveMQConnection.getRedeliveryPolicy()方法覆盖override这个策略设置。

Java代码
  1. RedeliveryPolicy policy = connection.getRedeliveryPolicy();
  2. policy.setInitialRedeliveryDelay(500);
  3. policy.setBackOffMultiplier(2);
  4. policy.setUseExponentialBackOff(true);
  5. 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"属性来修改.

Java代码
  1. <broker...>
  2. <destinationPolicy>
  3. <policyMap>
  4. <policyEntries>
  5. <!-- Set the following policy on all queues using the '>' wildcard -->
  6. <policyEntry queue=">">
  7. <deadLetterStrategy>
  8. <!--
  9. Use the prefix 'DLQ.' for the destination name, and make
  10. the DLQ a queue rather than a topic
  11. -->
  12. <individualDeadLetterStrategy
  13. queuePrefix="DLQ." useQueueForQueueMessages="true" />
  14. </deadLetterStrategy>
  15. </policyEntry>
  16. </policyEntries>
  17. </policyMap>
  18. </destinationPolicy>
  19. ...
  20. </broker>

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

Java代码
  1. <broker...>
  2. <destinationPolicy>
  3. <policyMap>
  4. <policyEntries>
  5. <!-- Set the following policy on all queues using the '>' wildcard -->
  6. <policyEntry queue=">">
  7. <!--
  8. Tell the dead letter strategy not to process expired messages
  9. so that they will just be discarded instead of being sent to
  10. the DLQ
  11. -->
  12. <deadLetterStrategy>
  13. <sharedDeadLetterStrategy processExpired="false" />
  14. </deadLetterStrategy>
  15. </policyEntry>
  16. </policyEntries>
  17. </policyMap>
  18. </destinationPolicy>
  19. ...
  20. </broker>

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

Java代码
  1. <broker...>
  2. <destinationPolicy>
  3. <policyMap>
  4. <policyEntries>
  5. <!-- Set the following policy on all queues using the '>' wildcard -->
  6. <policyEntry queue=">">
  7. <!--
  8. Tell the dead letter strategy to also place non-persisted messages
  9. onto the dead-letter queue if they can't be delivered.
  10. -->
  11. <deadLetterStrategy>
  12. <sharedDeadLetterStrategy processNonPersistent="true" />
  13. </deadLetterStrategy>
  14. </policyEntry>
  15. </policyEntries>
  16. </policyMap>
  17. </destinationPolicy>
  18. ...
  19. </broker>

http://sharong.iteye.com/blog/1987171

转载于:https://my.oschina.net/xiaominmin/blog/1597342

ActiveMQ的消息重发策略和DLQ处理相关推荐

  1. activeMQ - 消息重发策略和DLQ死信队列

    2019独角兽企业重金招聘Python工程师标准>>> 1:死信队列简介 DLQ-死信队列(Dead Letter Queue)用来保存处理失败或者过期的消息. 出现以下情况时,消息 ...

  2. ActiveMQ的消息重发机制

    本文以ActiveMQ最新的5.10版本为准. 大家知道,JMS规范中,Message消息头接口中有setJMSRedelivered(boolean redelivered)和getJMSRedel ...

  3. ActiveMQ消息重发

    2019独角兽企业重金招聘Python工程师标准>>> 消息重发的问题: 1. 处理失败 指的是MessageListener的onMessage方法里抛出RuntimeExcept ...

  4. activemq - 浅析消息确认模式

    2019独角兽企业重金招聘Python工程师标准>>> 前言 JMS的消息确认模式,定义了客户端(消息发送者或者消费者)与broker确认消息的方式,可以认为是客户端与Broker之 ...

  5. PHP中使用ActiveMQ实现消息队列

    2019独角兽企业重金招聘Python工程师标准>>> PHP中使用ActiveMQ实现消息队列前面我们已经学了如何部署ActiveMQ, 我们知道通过ActiveMQ的一个管理后台 ...

  6. mqtt消息推送 java_MQTT+ActiveMQ实现消息推送(服务器端java实现)

    上一篇文章已经介绍了mqtt+activemq实现消息推送移动端的实现,也介绍了利用自带的web console进行消息发布的方法.但是在具体的项目应用中,当我们将需要将该消息推送模块嵌入到一个后台管 ...

  7. ActiveMQ点对点消息通信demo

    2019独角兽企业重金招聘Python工程师标准>>> 1.下载ActiveMQ,安装并启动activeMQ, 2.登录控制台,http://localhost:8161/admin ...

  8. JMS学习九 ActiveMQ的消息持久化到Mysql数据库

    1.将连接Mysql数据库驱动包,放到ActiveMQ的lib目录下 2,修改ActiveMQ的conf目录下的active.xml文件,修改数据持久化的方式 2.1  修改原来的kshadb的持久化 ...

  9. 【ActiveMQ】消息生产者自动注入报错:Could not autowire. No beans of 'JmsMessagingTemplate' type found

    标签:public   style   hat   and   报错   require   core   ota   ati 使用ActiveMQ过程中,定义消息生产者: package com.s ...

最新文章

  1. Web API与JWT认证
  2. sql serve存储过程
  3. matlab中.P文件的介绍
  4. 关于Linux路由表的route命令(转)
  5. 获取init程序的调试信息和uevent的调试信息需要打开的两个宏
  6. 配置本地和共享yum源,定制属于自己的yum仓库
  7. python i开发工具_Python轻量级开发工具Genay使用
  8. 是程序员就应该知道的东西
  9. 库克退休前将再推出一个新品类?可能是AR眼镜
  10. G - 数据结构实验之链表五:单链表的拆分
  11. 宅在家里写数据库中事务(ACID)
  12. JAVA爬虫Nutch、WebCollector的正则约束
  13. Markdown语法014:浏览器兼容
  14. Uptime-Kuma 一个花哨的开源监控工具
  15. APP支付(微信、支付宝)
  16. 西密歇根大学计算机科学专业排名,西密歇根大学计算机工程硕士排名第86(2020年TFE Times排名)...
  17. Python中next()函数、iter()以及next(iter())函数的用法详解
  18. 投资不足半年,字节跳动退出李子柒签约公司“微念”
  19. 卷积神经网络(CNN)图像识别知识总结
  20. python函数map和split函数

热门文章

  1. java 字节 操作_实例解析Java byte数组操纵方式代码
  2. java 注释 连接,java – 如何使用JPA注释创建连接表?
  3. 解锁三星bl锁有几种方法_三星S6解锁教程_三星GALAXY S6怎么解锁Bootloader的方法
  4. 怎样增加混凝土粘聚性_如何改善中低强度等级混凝土粘聚性? 这篇文章一定要看...
  5. OpenPano:如何编写一个全景拼接器
  6. 如何系统性掌握深度学习模型设计和优化
  7. 有关缅甸语学习的一些网站
  8. VC文件扩展名解读大全
  9. 全球农业资源利用与粮食安全研讨会 国际农民丰收节贸易会
  10. 用顺序栈实现十进制向二进制转化