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方法中启动的。