ActiveMQ的消息重发策略和DLQ处理
2019独角兽企业重金招聘Python工程师标准>>>
ActiveMQ的消息重发策略和DLQ处理 博客分类: MQ
在以下三种情况中,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"属性来修改.
- <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>
http://sharong.iteye.com/blog/1987171
转载于:https://my.oschina.net/xiaominmin/blog/1597342
ActiveMQ的消息重发策略和DLQ处理相关推荐
- activeMQ - 消息重发策略和DLQ死信队列
2019独角兽企业重金招聘Python工程师标准>>> 1:死信队列简介 DLQ-死信队列(Dead Letter Queue)用来保存处理失败或者过期的消息. 出现以下情况时,消息 ...
- ActiveMQ的消息重发机制
本文以ActiveMQ最新的5.10版本为准. 大家知道,JMS规范中,Message消息头接口中有setJMSRedelivered(boolean redelivered)和getJMSRedel ...
- ActiveMQ消息重发
2019独角兽企业重金招聘Python工程师标准>>> 消息重发的问题: 1. 处理失败 指的是MessageListener的onMessage方法里抛出RuntimeExcept ...
- activemq - 浅析消息确认模式
2019独角兽企业重金招聘Python工程师标准>>> 前言 JMS的消息确认模式,定义了客户端(消息发送者或者消费者)与broker确认消息的方式,可以认为是客户端与Broker之 ...
- PHP中使用ActiveMQ实现消息队列
2019独角兽企业重金招聘Python工程师标准>>> PHP中使用ActiveMQ实现消息队列前面我们已经学了如何部署ActiveMQ, 我们知道通过ActiveMQ的一个管理后台 ...
- mqtt消息推送 java_MQTT+ActiveMQ实现消息推送(服务器端java实现)
上一篇文章已经介绍了mqtt+activemq实现消息推送移动端的实现,也介绍了利用自带的web console进行消息发布的方法.但是在具体的项目应用中,当我们将需要将该消息推送模块嵌入到一个后台管 ...
- ActiveMQ点对点消息通信demo
2019独角兽企业重金招聘Python工程师标准>>> 1.下载ActiveMQ,安装并启动activeMQ, 2.登录控制台,http://localhost:8161/admin ...
- JMS学习九 ActiveMQ的消息持久化到Mysql数据库
1.将连接Mysql数据库驱动包,放到ActiveMQ的lib目录下 2,修改ActiveMQ的conf目录下的active.xml文件,修改数据持久化的方式 2.1 修改原来的kshadb的持久化 ...
- 【ActiveMQ】消息生产者自动注入报错:Could not autowire. No beans of 'JmsMessagingTemplate' type found
标签:public style hat and 报错 require core ota ati 使用ActiveMQ过程中,定义消息生产者: package com.s ...
最新文章
- Web API与JWT认证
- sql serve存储过程
- matlab中.P文件的介绍
- 关于Linux路由表的route命令(转)
- 获取init程序的调试信息和uevent的调试信息需要打开的两个宏
- 配置本地和共享yum源,定制属于自己的yum仓库
- python i开发工具_Python轻量级开发工具Genay使用
- 是程序员就应该知道的东西
- 库克退休前将再推出一个新品类?可能是AR眼镜
- G - 数据结构实验之链表五:单链表的拆分
- 宅在家里写数据库中事务(ACID)
- JAVA爬虫Nutch、WebCollector的正则约束
- Markdown语法014:浏览器兼容
- Uptime-Kuma 一个花哨的开源监控工具
- APP支付(微信、支付宝)
- 西密歇根大学计算机科学专业排名,西密歇根大学计算机工程硕士排名第86(2020年TFE Times排名)...
- Python中next()函数、iter()以及next(iter())函数的用法详解
- 投资不足半年,字节跳动退出李子柒签约公司“微念”
- 卷积神经网络(CNN)图像识别知识总结
- python函数map和split函数
热门文章
- java 字节 操作_实例解析Java byte数组操纵方式代码
- java 注释 连接,java – 如何使用JPA注释创建连接表?
- 解锁三星bl锁有几种方法_三星S6解锁教程_三星GALAXY S6怎么解锁Bootloader的方法
- 怎样增加混凝土粘聚性_如何改善中低强度等级混凝土粘聚性? 这篇文章一定要看...
- OpenPano:如何编写一个全景拼接器
- 如何系统性掌握深度学习模型设计和优化
- 有关缅甸语学习的一些网站
- VC文件扩展名解读大全
- 全球农业资源利用与粮食安全研讨会 国际农民丰收节贸易会
- 用顺序栈实现十进制向二进制转化