RocketMQ故障容错策略
2020-09-16 16:45:06 8 举报
RocketMQ故障容错策略
作者其他创作
大纲/内容
调用容错策略中的updateFaultItem将此brokerName缓存进入faultItemTable中
对faultItem可用的Broker进行打乱排序,并选出一个延迟最低的broker
sendLatencyFaultEnable
mq所属的broker在faultItemTable中的broker是否可用
True
发送消息
说明是第一次发送消息,返回此brokerName的MessageQueue
lastBrokerName==Null?
此时会返回其他broker中的存有Topic主题的MessageQueue,若没有则只能返回此broker上的MessageQueue
在一次消息发送过程中,该方案能够规避上次发送失败的broker,重新对消息队列进行选择。但是如果是N次消息发送呢?N次发送都有可能会选择到故障broker的消息队列(选择消息队列取模运算)。
并计算对应的可用时间可用startTimestamp=发送耗损时间+notAvailableDuration通过判断获得对应回避等级(7个)
Success SendMessage
判断此broker是否有写队列
未开启容错策略
SendMessage
更新MessageQueue的信息,返回对应的MessageQueue
根据MessageQueue所属的Broker轮询获取MessageQueue
False
No
说明发送消息失败,正在进行重试阶段
Fault SendMessage
遍历容错策略中的broker 并根据可用startTimestamp获取对应的broker 并返回MessageQueue
将此broker移除故障容忍策略
返回原broker的MessageQueue
Yes
此时lastBrokerName代表的broker由于上次返回的MessageQueue未发送成功,认定此broker上的其余队列均会产生问题
如果发送出现Exceptionisolation=true(默认false)并退避至最大等级
true
是否开启容错策略
End
判断容错策略中faultItemTable.lastBrokerName==Null?
开启容错策略
说明是第一次发送消息
0 条评论
下一页