RocketMQ(二)——TopicPublicInfo

Producer發送消息是如何得知發到哪個broker的 ? 

每個應用在收發消息之前,一般會調用一次producer.start()/consumer.start(),幕後的工作就是:創建需要的實例對象,如MQClientInstance;設置定時任務,如從Nameserver中定時更新本地的Topic route info,發送心跳信息到所有的broker,動態調整線程池的大小,等等;把當前producer加入到指定的組中。客戶端會緩存路由信息TopicPublishInfo, 同時定期從NameServer取Topic路由信息,每個Broker與NameServer集羣中的所有節點建立長連接,定時註冊Topic信息到所有的NameServer。Producer在發送消息的時候會去查詢本地的topicPublishInfoTable(一個HashMap),如果沒有命中的話就會與NameServer溝通得到路由信息,RequestCode=GET_ROUTEINTO_BY_TOPIC 如果nameserver中也木有查詢到,那麼將會發送一個default的topic進行路由查詢。,如圖所示:


Producer發送消息的具體過程,以同步模式爲例。 
得到了通信地址,發送過程就顯而易見了。可以看到在選擇消息隊列進行發送時採用隨機方式,同時和上一次發送的broker保持不同,防止熱點


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