highlight: arduino-light
1.5 死信队列
当一条消息初次消费失败,消息队列 RocketMQ 会自动进行消息重试;达到最大重试次数后,若消费依然失败,则表明消费者在正常情况下无法正确地消费该消息,此时,消息队列 RocketMQ 不会立刻将消息丢弃,而是将其发送到该消费者对应的特殊队列中。对应的源码如下:
java public class SendMessageProcessor extends AbstractSendMessageProcessor implements NettyRequestProcessor { public static final String RETRY_GROUP_TOPIC_PREFIX = "%RETRY%"; public static final String DLQ_GROUP_TOPIC_PREFIX = "%DLQ%"; private boolean handleRetryAndDLQ(SendMessageRequestHeader requestHeader, RemotingCommand response, RemotingCommand request, MessageExt msg, TopicConfig topicConfig) { // 获取topic进行判断逻辑 String newTopic = requestHeader.getTopic(); // 重试队列:%RETRY%+consumerGroup // 如果是重试队列才会进入判断 if (null != newTopic && newTopic.startsWith(MixAll.RETRY_GROUP_TOPIC_PREFIX)) { //获取消费者组 String groupName = newTopic.substring(MixAll.RETRY_GROUP_TOPIC_PREFIX.length()); SubscriptionGroupConfig subscriptionGroupConfig = this.brokerController.getSubscriptionG

RocketMQ在消息初次消费失败后会自动重试,超过最大重试次数则将消息放入死信队列。死信消息不会被正常消费,有效期3天,需及时处理。消费者可通过订阅死信队列进行特殊处理,或者设置自定义的重试策略。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



