RocketMQ-Retry

RocketMQ的Retry队列用于处理消费失败的消息,每个消费组都有独立的Retry队列。生产逻辑中,Concurrently模式下消费失败会发送至Retry队列,Orderly模式则在本地尝试重试。消费逻辑中,消息先被写入SCHEDULE_XXXX队列,延迟一定时间后发送到Retry队列供消费者重试。目前Broadcasting模式下直接丢弃消息,存在优化空间。
摘要由CSDN通过智能技术生成

Retry队列是什么

当消息消费失败时,消费者会将消息发往retry队列,等待重试

Retry队列的命名方式为:%RETRY%GROUP_NAME,也就是说每个消费组都会有自己独立的Retry队列

生产逻辑

RequestCode:CONSUMER_SEND_MSG_BACK

脉络图如下:

在这里插入图片描述

Client端

Concurrently模式

在以下几种情况下会向Retry队列发送该条消息

  1. 当消息消费失败返回RECONSUME_LATER,并且是Clustering模式时
  2. 清理本地超时消息(已拉取缓存在内存中的消息)
public void processConsumeResult(
    final ConsumeConcurrentlyStatus status,
    final ConsumeConcurrentlyContext context,
    final ConsumeRequest consumeRequest
) {
   
    switch (this.defaultMQPushConsumer.getMessageModel()) {
   
        case BROADCASTING:
            for (int i = ackIndex + 1; i < consumeRequest.getMsgs().size(); i++) {
   
                MessageExt msg = consumeRequest.getMsgs().get(i);
                log.warn("BROADCASTING, the message consume failed, drop it, {}", msg.toString());
            }
            break;
        case CLUSTERING:
            List<MessageExt> msgBackFailed = new ArrayList<MessageExt>(consumeRequest.getMsgs().size());
            
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值