天天看點

rocketMq-producer介紹

producer介紹

producer在rocketMq扮演的角色是消息的發送過程,其實宏觀上來講其實就包括兩大塊,分别是消息的發送以及一堆定時任務。

producer在發送消息過程中涉及到發送隊列的選擇(topic、broker、queue),是以隻要在整個發送過程中理清楚這幾者之間的關系,就能了解整個發送過程,當然其中包括 非嚴格順序消息、順序消息、事務消息。這裡隻講非順序消息、順序消息,不包括事務消息。

producer的發送過程

rocketMq-producer介紹

rocketMq發送時序圖

rocketMq-producer介紹

rocketMq發送消息活動圖

rocketMq-producer介紹

rocketMq發送消息過程

說明:

    核心邏輯參見DefaultMQProducerImpl類

    rocketMq發送消息過程由以下組成:組裝消息&擷取topicPubInfo&選擇隊列&發送消息。

    組裝消息:

發送消息的組裝,包括設定topic&tag&延時&是否有序等等。

生成topicPublishInfo:

定期或按需從namesrv同步該topic的broker資訊

選擇隊列:

從topicPubishInfo中按照輪詢(roundrobin)選取隊列,i++%(隊列長度),順序消息根據自定義的selector按照固定的key進行hash選擇同一個隊列

發送消息:

同步/異常方式發現on個消息給broker

生成TopicPublishInfo過程

rocketMq-producer介紹

TopicPublishInfo生成邏輯

rocketMq-producer介紹

TopicPublishInfo生成代碼

    參見MQClientInstance類

    圖檔備注中已經寫明了MessageQueue的生成過程

SelectOneMessageQueue過程

rocketMq-producer介紹

選擇MessageQueue邏輯

rocketMq-producer介紹

producer的定時任務

rocketMq-producer介紹

    關鍵是前3個定時任務,後面兩個一般是consumer端會使用,這個類是公用的。

producer的初始化過程

rocketMq-producer介紹

producer初始化過程I

rocketMq-producer介紹

producer初始化過程II

    參見DefaultMQProducerImpl類,具體的功能在上圖中已備注。