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方法中启动的。
 
                    
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号