文章目录
问题点
上篇文章已经介绍了消息发送时,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次
即消息发送失败后ÿ