儘量少囉嗦。
1.部署組成
由圖可知,rocketMq的運轉至少需要4個組成部分:Producer(生產者),NameService(路由中心),Broker(消息服務費)和Consumer(消費者)。
下面依次總結。
2.Producer
2.1 消息發送方式
同步:producer發送消息後,等待broker返回發送結果。
異步:producer發送消息時,指定回調函數,發送消息後直接返回。後面實際發送結果,由broker通知回調函數,producer在另一個線程種異步處理。
單向:producer發送消息後,不關心發送結果直接返回。
2.2 消息發送
對於DefaultMQProducer消息發送者,默認發送消息超時時間是3s(sendMsgTimeout),發送失敗重試次數是2次(retryTimesWhenSendFailed/retryTimesWhenSendAsyncFailed),消息最大長度是4M(maxMessageSize)。
消息發送失敗時,重試有broker隔離機制。即將該broker的所有messageQueue都隔離,默認30s。也就是說30s內不向這些messageQueue發送消息。
sendLatencyFaultEnable=true啓用。
2.3 批量發送
支持同一個topic的多條消息打包發送,但發送消息總長度不得超過maxMessageSize。
3.NameServer
Broker啓動時會向所有NameServer註冊,Producer在發送消息之前會從NameServer拿到Broker地址列表,然後根據負載均衡算法得出其中一臺Broker併發送消息。因此,每臺NameServer和每臺Broker都是長鏈接。
Broker每隔30s向所有的NameServer發送心跳,NameServer接到後會更新lastUpdateTimeStamp,然後NameServer每隔10s掃描brokerLiveTable裏的各Broker的lastUpdateTimeStamp,發現少於120s沒有心跳的,則移除該Broker並關閉Socket連接。