RocketMQ-消息发送源码分析(三)消息重试及Broker故障延迟机制

本文深入分析RocketMQ消息发送时的队列选择策略,包括默认机制和Broker故障转移机制。在消息发送失败时,RocketMQ会进行重试,同步模式下最多重试3次。默认机制通过线程变量选择队列,而故障转移机制通过预测Broker不可用时长来避免向故障Broker发送消息,提高发送高可用性。
摘要由CSDN通过智能技术生成

问题点

上篇文章已经介绍了消息发送时,topic的路由信息是如何获取的,最终路由结果是一个TopicPublishInfo对象,其中messageQueueList就是本次消息发送的topic对应的消息队列,再看下TopicPublishInfo属性图加深印象
在这里插入图片描述

问题又来了,拿到了消息队列后,就进入到了具体消息队列选择、发送的流程,所以有如下问题

1、消息队列是如何选择的,即producer向哪个消息队列里发送消息?
2、消息发送失败了怎么办(网络原因,broker挂掉)?发送端如何实现的高可用?

具体消息发送的实现在org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl#sendKernelImpl中,下篇文章再做介绍,本文主要关注于消息发送时的队列选择、重试机制、及Broker故障延迟机制

消息重试

看下获取到了路由信息后的发送代码
在这里插入图片描述
可以看到timesTotal(发送次数)在同步模式下被设为1+this.defaultMQProducer.getRetryTimesWhenSendFailed()=3次,异步或者oneway模式为1次

即消息发送失败后ÿ

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值