ps怎么排版规划设计网站,在线图片编辑器图怪兽,网站制作电话多少钱,百度投诉电话24小时前言
在RocketMQ中#xff0c;死信消息#xff08;Dead-Letter Message#xff09;是指那些在正常情况下无法被消费者消费的消息。这些消息会被存储在死信队列#xff08;Dead-Letter Queue#xff0c;简称DLQ#xff09;中。
死信消息的特性包括#xff1a;
不会再被…前言
在RocketMQ中死信消息Dead-Letter Message是指那些在正常情况下无法被消费者消费的消息。这些消息会被存储在死信队列Dead-Letter Queue简称DLQ中。
死信消息的特性包括
不会再被消费者正常消费一旦消息被标记为死信消息它们将不会被正常的消费者消费。有效期与正常消息相同均为3天死信消息的有效期与正常消息相同均为3天。这意味着在死信消息产生后的3天内如果消费者没有处理该消息它将被自动删除。死信队列特性一个死信队列对应一个Group ID而不是对应单个消费者实例。如果一个Group ID未产生死信消息RocketMQ不会为其创建相应的死信队列。一个死信队列包含对应Group ID产生的所有死信消息不论该消息属于哪个Topic。
使用死信队列可以帮助消费者在处理消息失败时将失败的消息重新发送到指定的队列以便进行进一步的处理或分析。
死信消息
死信消息就是指如果消息最终无法被正常消费那么这条消息就会成为死信消息
RocketMQ中消息会变成死信消息有两种情况
第一种就是消息重试次数已经达到了最大重试次数
最大重试次数取决于并发消费还是顺序消费 顺序消费默认最大重试次数就是 Integer.MAX_VALUE基本上就是无限次重试所以默认情况下顺序消费的消息几乎不可能成为死信消息 并发消费的话那么最大重试次数默认就是16次
当然可以通过如下的方法来设置最大重试次数 DefaultMQPushConsumer#setMaxReconsumeTimes 除了上面的情况之外当在并发消费模式下你可以在消息消费失败之后手动指定直接让消息变成死信消息
在并发消费消息的模式下处理消息的方法有这么一个参数 ConsumeConcurrentlyContext 这个类中有这么一个属性 这个参数值有三种情况注释也有写 小于0那么直接会把消息放到死信队列成为死信消息。注释写的是-1其实只要小于0就可以成为死信消息不一定非得是-1 0默认就是0这个代表消息重试消费并且重试的时间间隔也就是延迟级别由服务端决定也即是前面重试消息提到的 delayLevel 3 已经重试次数 大于0此时就表示客户端指定消息重试的时间间隔是几就代表延迟级别为几比如设置成1那么延迟级别就为1
所以在并发消费模式下可以通过设置这个参数值为-1直接让处理失败的消息成为死信消息
当消息成为死信消息之后消息并不会丢失
RocketMQ会将死信消息保存在死信Topic底下Topic格式为 %DLQ% 消费者组名称 跟重试Topic的格式有点像只是将%RETRY%换成了%DLQ%
如果你想知道有哪些死信消息只需要订阅这个Topic即可获得
总结
所以总的来说两种情况会让消息成为死信消息 消息重试次数超过最大次数跟消息的处理方式有关默认情况下顺序处理最大次数是几乎是无限次也就是几乎不可能成为死信消息并发处理的情况下最大重试次数默认就是16次。最大重试次数是可以设置的。 在并发处理的情况下通过ConsumeConcurrentlyContext将delayLevelWhenNextConsume属性设置成-1让消息直接变成死信消息
当消息成为死信消息的时候会被存到%DLQ% 消费者组名称这个Topic下
用户可以通过这个Topic获取到死信消息手动干预处理这些消息
联系方式
关于文章中大家有任何疑问可以通过关注公众号《编程乐学》进行留言同时公众号还有更多有趣的项目以及关于学习编程的笔记资料大家可以看看欢迎大家进行留言。