producer介紹
producer在rocketMq扮演的角色是消息的發送過程,其實宏觀上來講其實就包括兩大塊,分别是消息的發送以及一堆定時任務。
producer在發送消息過程中涉及到發送隊列的選擇(topic、broker、queue),是以隻要在整個發送過程中理清楚這幾者之間的關系,就能了解整個發送過程,當然其中包括 非嚴格順序消息、順序消息、事務消息。這裡隻講非順序消息、順序消息,不包括事務消息。
producer的發送過程
rocketMq發送時序圖
rocketMq發送消息活動圖
rocketMq發送消息過程
說明:核心邏輯參見DefaultMQProducerImpl類
rocketMq發送消息過程由以下組成:組裝消息&擷取topicPubInfo&選擇隊列&發送消息。
組裝消息:發送消息的組裝,包括設定topic&tag&延時&是否有序等等。
生成topicPublishInfo:定期或按需從namesrv同步該topic的broker資訊
選擇隊列:從topicPubishInfo中按照輪詢(roundrobin)選取隊列,i++%(隊列長度),順序消息根據自定義的selector按照固定的key進行hash選擇同一個隊列
發送消息:同步/異常方式發現on個消息給broker
生成TopicPublishInfo過程
TopicPublishInfo生成邏輯
TopicPublishInfo生成代碼
參見MQClientInstance類
圖檔備注中已經寫明了MessageQueue的生成過程
SelectOneMessageQueue過程
選擇MessageQueue邏輯
producer的定時任務
關鍵是前3個定時任務,後面兩個一般是consumer端會使用,這個類是公用的。
producer的初始化過程
producer初始化過程I
producer初始化過程II
參見DefaultMQProducerImpl類,具體的功能在上圖中已備注。