系列
producer介紹
producer在rocketMq扮演的角色是消息的發(fā)送過程,其實宏觀上來講其實就包括兩大塊,分別是消息的發(fā)送以及一堆定時任務。
producer在發(fā)送消息過程中涉及到發(fā)送隊列的選擇(topic、broker、queue),所以只要在整個發(fā)送過程中理清楚這幾者之間的關系,就能理解整個發(fā)送過程,當然其中包括 非嚴格順序消息、順序消息、事務消息。這里只講非順序消息、順序消息,不包括事務消息。
producer的發(fā)送過程

rocketMq發(fā)送時序圖

rocketMq發(fā)送消息活動圖

rocketMq發(fā)送消息過程
說明:
? ? 核心邏輯參見DefaultMQProducerImpl類
????rocketMq發(fā)送消息過程由以下組成:組裝消息&獲取topicPubInfo&選擇隊列&發(fā)送消息。
? ? 組裝消息:發(fā)送消息的組裝,包括設置topic&tag&延時&是否有序等等。
? ? 生成topicPublishInfo:定期或按需從namesrv同步該topic的broker信息
? ? 選擇隊列:從topicPubishInfo中按照輪詢(roundrobin)選取隊列,i++%(隊列長度),順序消息根據自定義的selector按照固定的key進行hash選擇同一個隊列
? ? 發(fā)送消息:同步/異常方式發(fā)現(xiàn)on個消息給broker
生成TopicPublishInfo過程

TopicPublishInfo生成邏輯

TopicPublishInfo生成代碼
說明:
? ? 參見MQClientInstance類
? ? 圖片備注中已經寫明了MessageQueue的生成過程
SelectOneMessageQueue過程

選擇MessageQueue邏輯

選擇MessageQueue邏輯
producer的定時任務

producer的定時任務
說明:
? ? 關鍵是前3個定時任務,后面兩個一般是consumer端會使用,這個類是公用的。
producer的初始化過程

producer初始化過程I

producer初始化過程II
說明:
????參見DefaultMQProducerImpl類,具體的功能在上圖中已備注。