天天看點

RocketMQ(二):producer用戶端實踐

MQ解耦了生産者和消費者,前提是有一個穩定強大的消息服務,我們隻管與之通信即可。

是以,和MqServer通信是什麼樣的?難否?

0. 發送端demo

隻需要設定下 nameServer, 就可以實作發送mq消息了。簡單易用,是好産品的必備特征。

具體實作過程,且讓我們深入一點了解。

1:消息發送主流程

網絡請求通信細節,視情況檢視。

2. 更新發送路由資訊

從nameserver擷取原始資訊,然後緩存到本地。可以保證拿到準确資料的同時,保證了高性能。

3. 選擇一個隊列,用戶端負載均衡

基本就是一個輪詢政策了。

4. 查找 broker

在一組 broker 主從中,隻選擇主節點進行發送消息。

  總結一下發送過程:

    1. 資料檢驗,topic格式,消息體大小等;

    2. 查找queueId, 使用一定的負載均衡測試;

    3. 查找 broker, 發送消息;

    4. 等待響應或者重試;

    5. 所有topic,route資訊都可以namesrv擷取;

5. producer 的啟動環境準備

以上的過程式,是進行發發送消息的過程,最終都是基于 netty 建立的通道進行傳送的,那麼這些通道都是什麼時候準備好的呢?其實是 producer.start();

MQClientManager 是個重要的類,它包含了用戶端和nameserver,broker連接配接的建立,維護線程的建立等等。

啟動時主要完成的任務有:準備好網絡連接配接的環境基于netty, 建立生産者消費者線程池,開啟各背景任務異步線程。然後可以準備發送消息。

以上,這可能是水軍。自己領悟才是硬道理。

繼續閱讀