路由队列选择的角色是,在发送消息时,您可以指定它可以将其发送到代理队列,或者将其发送到代理队列。角色是选择适当的队列发送消息。
目前,客户队列选择分为三种方式:
接下来,我们将讨论这三种方式。
接下来,我们可以看到如何直接实现源代码:
DefaultMqproducerimpl#sendSelectimpl
分析:
selector.Select(toperpublishInfo.getMessagequeuelist(),msg,arg)queue selection;
实际上,以下三种类型:
当然,您还可以自定义扩展。您很简单吗?我们可以简要查看其中之一的源代码:
SelectMessagequeueByrandom
在不打开经纪人故障延迟机制(sendlecentFaultenable:false)的情况下,将采用默认旋转机制;
来这里,让我们直接去吃大餐。看到以下内容,您了解原始默认机制是如此简单。
以下方法是入口:
DefaultMqproderimpl#SelectOneMessagequeue
亮点:
mqfaultStrategy#SelectOneMessagequeue
评论:
主题publishinfo熟悉不熟悉的?
打开代理故障延迟机制(sendlecentFauletable:true)以选择队列发送。
如果您发送延迟未能打开[sendlecentFauletenable:true],则在发送时会花费时间和失败。SelectOnemessagequeue]
简单的过程图片如下:
描述:
评论:
furdItem包含当前阳离子沉积物的时间消耗,Brokername节点的名称以及在StartTimestamp Timestamp之后可用的经纪人。
可以从mqfaultstrategy中看到:发送延迟一个可用延迟?元数据映射
简单的摘要如下:
可以理解为:
1:选择队列
mqfaultStrategy#SelectOneMessagequeue
评论:
这主要是为了确定是否可用且不可用。Brokername的所有队列都是不可能的。继续找到下一个Brokername。如果您找不到它,请致电topicpublishinfo.selectonemessagequequeue选择要返回的队列。
2:更新经纪人的可用性
(取决于根据过渡延迟的可用延迟):updateFaultItem#updateFaultItem
评论:
这里的逻辑是相对简单且小的知识点:记住:隔离的特殊情况= true
3:更新经纪可用性延迟
LatenceFaultToleranceImpl#FARSITEMTABLE
评论:
这里的逻辑是更新FARDTITEM的启动式膜片
程序员的核心竞争力实际上是技术,因此仍然有必要继续从技术中学习,以关注“ IT峰值技术”公共帐户。除了技术交流外,还有许多建筑思想和实际情况。
作者是《 RocketMQ Technology的内部绘画》一书的作者,也是“ RocketMQ上海社区”的共同创始人。他曾在Pinduoduo和Debon以及其他公司工作。二级开发,运营和维护管理,与中间件相关技术的混合云和基本服务平台的建设。
原始:https://juejin.cn/post/709851116049583124