问:发消息的时候选择queue的算法有哪些?
答:分为两种,一种是直接发消息,不能选择queue,这种的queue选择算法如下:
-
在不开启容错的情况下,轮询队列进行发送,如果失败了,重试的时候过滤失败的Broker
-
如果开启了容错策略,会通过RocketMQ的预测机制来预测一个Broker是否可用
-
如果上次失败的Broker可用那么还是会选择该Broker的队列
-
如果上述情况失败,则随机选择一个进行发送
-
在发送消息的时候会记录一下调用的时间与是否报错,根据该时间去预测broker的可用时间
另外一种是发消息的时候可以选择算法甚至还可以实现接口自定义算法:
-
SelectMessageQueueByRandom
:随机 -
SelectMessageQueueByHash
:hash -
SelectMessageQueueByMachineRoom
-
实现接口自定义