Rocketmq 源碼分析(一)消息發送

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章