Rocketmq 源码分析(一)消息发送

196 阅读1分钟

@[TOC]Rocketmq 源码分析(一)消息发送 # 整体架构 在这里插入图片描述 nameserver : 存放 broker (服务代理) broker : 服务代理 可以看到nameserver只是负责管理broker 的,提供broker的查找以及存储。而broker是服务代理,处理消息的接口以及转发,使用netty 作为消息的处理。 ## 消息发送 在这里插入图片描述 从例子中可以看到 需要先设置下nameserver ,我们看下send方法, 在这里插入图片描述 这个类DefaultMQProducerImpl 负责处理消息的发送 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 看到这里我们往下面看。 在这里插入图片描述 在这里插入图片描述 可以看到它的请求命令就是RequestCode.SEND_MESSAGE, 看到这里大概提下,在broker启动初始化的时候对每一种命令注入对应的处理器。 在这里插入图片描述 在这里插入图片描述 可以看到它的处理器就是SendMessageProcessor。 看到这里可能有点蒙,rocketmq发动消息到哪里去了?如果写过netty 的同学都知道,这时一般都serverhandler接口消息进行处理,也就是还是回到borker中看到 nettyserver hander怎么处理的。 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 看到这里我们进入下,可以明确的知道调用上面我们提到的SendMessageProcessor 在这里插入图片描述 在这里插入图片描述 看到putmessage相信所有的小伙伴都知道了,在这里写入消息到文件中, 在这里插入图片描述 在这里插入图片描述 有些同学会问这是把数据写到bytebuffer并没有写入到文件中去,我们继续看下CommitLog的构造方法, 在这里插入图片描述 这个定时任务的run方法 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 看到这里通过filechannel把bytebuffer写入到文件中去了。, 那定时何时调用的呢, 在这里插入图片描述 又是start方法。,这时估计我们都猜到了,在broker的start方法中启动的。