当前位置: 首页 > 网络应用技术

RocketMQ-生产者(5)路线队列选择

时间:2023-03-05 18:40:54 网络应用技术

  路由队列选择的角色是,在发送消息时,您可以指定它可以将其发送到代理队列,或者将其发送到代理队列。角色是选择适当的队列发送消息。

  目前,客户队列选择分为三种方式:

  接下来,我们将讨论这三种方式。

  

  接下来,我们可以看到如何直接实现源代码:

  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