RocketMQ源码分析----Broker处理发送请求

本文深入分析RocketMQ中Producer发送消息的过程,从 SendMessageProcessor的processRequest开始,讲解包括响应对象创建、消息属性设置、MapedFile获取、判断文件满、计算物理偏移、消息ID生成等关键步骤。此外,还探讨了消息存储、重试逻辑以及CommitLog的存储机制,详述了如何通过MapedFile在commitlog文件中存储消息。
摘要由CSDN通过智能技术生成

Producer发送消息后,会由SendMessageProcessor类的processRequest方法进行处理,其中会调用sendMesaage方法

主要步骤

1.创建响应对象Response,用来返回给Producer消息的处理结果

2.设置消息相关信息:请求id,消息体,请求队列,topic

3.将信息封装到MessageExtBrokerInner对象中

4.消息topicproperties等一些属性的判断

5.MapedFileQueue中获取MapedFile(代表一个commitlog文件)

6.判断MapedFile对应的文件是否已经满了,满了就创建一个新的文件并返回MapedFile

7.计算物理offset=fileFromOffset + byteBuffer.position()

8.创建消息id,获取queueOffsetpropertiesDatatopicData等消息需要保存的信息

9.判断消息的长度是否溢出

10.判断MapedFile对应的commitlog文件剩下的空间是否足够,若不够则将commitlog剩余的空间填充并返回END_OF_FILE状态,如果是该状态将会创建一个新的commitlog文件然后重复上面的操作

11.将消息的相关信息通过ByteBuffer写入内存并返回如下消息:

a)消息发送状态

b)物理offset

c)消息长度

d)消息id

e)消息创建时间

f)queueOffset

g)rt

12更新wrotePostionstoreTimestamp(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值