1. 程式人生 > >RocketMQ的訊息傳送方式

RocketMQ的訊息傳送方式

同步傳送

簡單來說,同步傳送就是指 producer 傳送訊息後,會在接收到 broker 響應後才繼續發下一條訊息的通訊方式。

由於這種同步傳送的方式確保了訊息的可靠性,同時也能及時得到訊息傳送的結果,故而適合一些傳送比較重要的訊息場景,比如說重要的通知郵件、營銷簡訊等等。在實際應用中,這種同步傳送的方式還是用得比較多的。

非同步傳送

接著就是非同步傳送,非同步傳送是指 producer 發出一條訊息後,不需要等待 broker 響應,就接著傳送下一條訊息的通訊方式。需要注意的是,不等待 broker 響應,並不意味著 broker 不響應,而是通過回撥介面來接收 broker 的響應。所以要記住一點,非同步傳送同樣可以對訊息的響應結果進行處理。

由於非同步傳送不需要等待 broker 的響應,故在一些比較注重 RT(響應時間)的場景就會比較適用。比如,在一些視訊上傳的場景,我們知道視訊上傳之後需要進行轉碼,如果使用同步傳送的方式來通知啟動轉碼服務,那麼就需要等待轉碼完成才能發回轉碼結果的響應,由於轉碼時間往往較長,很容易造成響應超時。此時,如果使用的是非同步傳送通知轉碼服務,那麼就可以等轉碼完成後,再通過回撥介面來接收轉碼結果的響應了。

單向傳送

單向傳送,見名知意,就是一種單方向通訊方式,也就是說 producer 只負責傳送訊息,不等待 broker 發回響應結果,而且也沒有回撥函式觸發,這也就意味著 producer 只發送請求不等待響應結果。

由於單向傳送只是簡單地傳送訊息,不需要等待響應,也沒有回撥介面觸發,故傳送訊息所耗費的時間非常短,同時也意味著訊息不可靠。所以這種單向傳送比較適用於那些耗時要求非常短,但對可靠性要求並不高的場景,比如說日誌收集。

總結

下面通過一張表格,簡單總結一下同步傳送、非同步傳送和單向傳送的特點。

傳送方式 傳送TPS 傳送結果響應 可靠性
同步傳送 不丟失
非同步傳送 不丟失
單向傳送 沒有 可能丟失

可以看到,從傳送 TPS 來看,由於單向傳送不需要等待響應也沒有回撥介面觸發,傳送速度非常快,一般都是微秒級的,在訊息體大小一樣的情況下,其傳送 TPS 最大。而同步傳送,需要等待響應結果的返回,受網路狀況的影響較大,故傳送 TPS 就比較小。非同步傳送不等待響應結果,傳送訊息時幾乎不受網路的影響,故相比同步傳送來說,其傳送 TPS 要大得多。

關於可靠性,大家需要牢記前面提過的,非同步傳送並不意味著訊息不可靠,非同步傳送也是會接收到響應結果,也能對響應結果進行處理。即使傳送失敗,也可以通過一些補償手段進行訊息重發。和同步傳送比起來,非同步傳送的傳送 TPS 更大,更適合那些呼叫鏈路較長的一些場景。在實際使用中,同步傳送和非同步傳送都是較為常用的兩種方式,大家要視具體業務場景進行合理地選擇。