RocketMQ死信队列

RocketMQ 消息怎么进入到 死信队列?

RocketMQ中消息进入死信队列的过程如下:

  • 当一条消息初次消费失败,RocketMQ会自动进行消息重试。达到最大重试次数后(默认是16次),如果消费依然失败,这表明消费者在正常情况下无法正确地消费该消息。此时,RocketMQ不会立刻将消息丢弃,而是将其发送到该消费者对应的特殊队列中。RocketMQ将这种在正常情况下无法被消费的消息称为死信消息(Dead-Letter Message),将存储这些死信消息的特殊队列称为死信队列(Dead-Letter Queue,简称DLQ)。
  • 每个消费组在RocketMQ中都会有一个对应的死信队列,其Topic名称为“%DLQ%”加上消费组的名称。死信队列中的消息需要人工干预处理。在RocketMQ中,可以通过控制台对死信队列的权限进行更改,使其可读可写,然后对消息进行重发,或者订阅对应的Topic,使得消费者实例再次进行消费。

另外,如果消息延时级别小于0,消息也会立即被放入死信队列。

RocketMQ 消息进入到死信队列还能被消费吗?

能被消费

死信队列(Dead-Letter Queue)是存储死信消息(Dead-Letter Message)的特殊队列,这些消息在正常情况下无法被消费者正常消费。在RocketMQ中,当消息重试超过一定次数后(默认是16次),消息会被放入死信队列。虽然死信消息不再被正常的消费者消费,但它们仍然可以被订阅和消费。

死信队列具有一些特性:

  1. 一个死信队列对应一个Group ID,而不是对应单个消费者实例。
  2. 如果一个Group ID未产生死信消息,RocketMQ不会为其创建相应的死信队列。
  3. 一个死信队列包含对应Group ID产生的所有死信消息,不论该消息属于哪个Topic。

需要注意的是,死信消息的有效期与正常消息相同,默认为3天,3天后会被自动删除。因此,需要在死信消息产生后的3天内及时处理这些消息,以避免消息丢失。

总的来说,虽然消息进入了死信队列,但仍然可以通过特定的方式进行消费和处理。

死信消息会被RocketMQ 保存吗?

会保存

这些在正常情况下无法被消费者消费的消息被称为死信消息(Dead-Letter Message),并且会被存储在特殊的队列中,这个队列被称为死信队列(Dead-Letter Queue,简称DLQ)。此外,RocketMQ还支持将这些死信消息保存至指定的Topic,这样方便后续进行业务恢复或回溯。

当消息消费异常并且进行消费重试时,如果达到最大重试次数后,该消息就会转为死信状态。这时,RocketMQ会将其保存至指定的Topic。

ps:以下是我整理的java面试资料,感兴趣的可以看看。最后,创作不易,觉得写得不错的可以点点关注!

链接:https://www.yuque.com/u39298356/uu4hxh?# 《Java面试宝典》 

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值