@[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方法中啓動的。