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

1.从源代码的角度来看,RocketMQ的正常消息的过程

时间:2023-03-08 20:32:30 网络应用技术

  RocketMQ-4.9.0分析有三种类型。有三种类型

  }

  如前所述,当客户端发送消息时,将构建Netty请求命令,因此服务器如何定义?当Broker()启动时,将调用初始化方法,并且许多处理器将在内部注册,并且会有一条消息发送消息。

  处理器收到生产者的发送请求后

  建立服务器消息对象,设置主题,排序,消息内容正文和标签等(标签设置为属性属性),然后调用对象的方法put messages

  继续调用对象方法放消息

  在保存消息之前,该方法将主要执行两件事

  向缓冲区发送消息以解释几个参数

  }

  主要做3件重要的事情

  commitlog在一个名为“主题Queuid”的地图中,值为“主题”。因此,该怎么做是根据密钥来偏移,并且第一次获得它必须为空,然后是0l。消息写在缓冲区中后,办公室会自动添加1,将在后面提到。,继续下降)

  如果经纪人重新启动,则将在开始时进行更新

  如果您不能在文件末尾编写它,请创建一个新的映射文件,然后将其重写为消息

  将写入缓冲区的内容很多,总共17个是消息的总大小。queueID,主题和消息物理偏移物理offyoft,oblemquequeue的offset queueOffset(queueOffset为2.3.1 maintenance消息索引索引值,queueOffset * 20byte可以将实际位置定位在CubsumeQueue中)

  编写缓冲区的内容

  当消息写入缓冲区时,值偏移++的值

  稍后分发索引单元的消息将使用此偏移。

  Wroteposition将记录绘图文件的写作

  提交刷子请求

  当Broker()启动时,将启动一个异步线程任务,该任务将在Commitlog中读取消息,然后创建一个索引单元

  核心代码

  您阅读了几条消息?

  如前所述,当消息写入缓冲区时,对象的属性将记录写作的位置,然后是[dectlogogfset,wrotepostion.get()]在提交词的读取消息中[start,end]]之后阅读消息,开始遍历消息,然后分发

  消息分发有两个部分,一个是针对构建的消费者索引的消费者,另一个是根据新闻构建的索引。

  消息消费者队列的目的主要是提高消息消耗的性能。由于RocketMQ基于主题订阅模式,因此消息消耗是为主题。根据提示文件文件中的主题检索检索消息非常低效。消费者可以根据使用的消费量找到要消耗的消息。它们是消费者的索引(逻辑消费者队列)作为消费者消息的索引,它保留了初始物理偏移量在提示件中的commitlog中的队列消息的抵消,消息大小和消息标签的障碍值。CONSUMEMEQUEUE文件可以看作是主题commitlog索引索引文件

  3.2.1.1分配过程

  }

  3.2.1.2当经纪人开始时,连续的消费将开始持续服务

  每1秒执行持久任务,然后在相应主题下的queueID下的文件中写下默认存储路径:$ home/store/store/oblemequeue/{topic}/{queueid}/{fileName}

  indexfile(索引文件)提供了一种通过键或时间间隔查询消息的方法

  }

  从代码中发现,索引拧紧仅当前索引文件已满,这并不难找到。

  3.2.2.2检查是否需要创建索引

  3.2.2.3保存索引

  当PUT索引单元时,有必要理解索引文件的组成

  PUT的核心逻辑:

  请参阅对索引和插槽之间关系的理解

  和插图索引写作过程

  他一直在积累消息分布和偏移。一条消息发送。

  本文主要取决于生产者如何从代码的角度发送消息,服务器代理如何接收消息并存储消息,耐用消息和消息分发(构造索引)。

  好的,只要在这里写!

  仅限于作者的水平,文本中有不可避免的事情。欢迎校正,不要喷洒,谢谢