路由发现: 缓存中的路由信息什么时候更新呢?
由 QueueData 转 topicPublishInfo 的 List<QueueMessage>:
选择消息队列:
sendLatencyFaultEnable=false, 默认不启动 Broker 故障延迟机制,
sendLatenFaultEnable=true, 启用 Broker 故障延迟机制
默认情况: TopicPublishInfo#selectOneMessageQueue:
lastBrokerName 是上一次选择的执行发送消息失败的 Broker.
考虑 broker 宕机的情况:
首先, NameServer 检测 Broker 是否可用是有延迟的, 最短一次心跳检测间隔 10s; 其次, NameServer 不会检测到 Broker 宕机后马上推送消息给消息生产者, 而是消息生产者
"每隔 30 秒更新一次路由信息", 所以生产者最快感知 Broker 最新的路由信息也需要 30s. 如果能引入一种机制, 在 Broker 宕机期间, 如果一次消息发送失败后, 可以将该 Broker 暂时排除在消息队列的
选择范围中.
故障延迟机制:
MQFaultStrategy#selectOneMessageQueue:
来源: http://www.bubuko.com/infodetail-3382614.html