【Message Queue - RabbitMQ】消費者分發制度

更新於 發佈於 閱讀時間約 2 分鐘

假設我們每個Queue都只對應一個消費者,那麼就不會有分配問題,但如果今天我們有多個消費者的時候,這時候要怎麼分發?如何做到公平?

一、輪流分發

預設採輪流分發,假設有三個消費者同時消費,則如下圖,訊息平均分配給各個消費者處理。

這種分發方式並未考慮到Consumer的處理能力,假設Consumer1處理較慢,那麼被分配到訊息後勢必會堆積很多訊息在記憶體,如此一來會比較沒有效率一點,當有新的Consumer加入時那些堆積的訊息因為已經被分發到Consumer1了,所以新的Consumer也無法幫忙處理。

raw-image

二、公平分發(依照處理能力)

上述的狀況下,只要Queue有訊息就立即往Consumer丟,此時如果能夠限制每個Consumer能夠處理的數量,那麼訊息就比較容易被依照處理能力分配,而RabbitMQ正好提供了這種Qos的配置,讓Consumer來告訴Server端自己一次能處理的量。

channel.basicQos($prefetchCount, $prefetchSize, $global)

  • $prefetchCount: 代表消費者一次能處理的量,在還沒回傳ack訊號前不會派發新的訊息。
  • $prefetchSize: 代表消費者一次能處理的訊息大小。
  • $global: true代表套用到整個connection, false則僅限於該channel,通常都配置為false。
raw-image

延伸閱讀:

Message Queue之基本概念

RabbitMQ — 如何保證消息可靠性?

留言
avatar-img
留言分享你的想法!
avatar-img
阿Han的沙龍
135會員
301內容數
哈囉,我是阿Han,是一位 👩‍💻 軟體研發工程師,喜歡閱讀、學習、撰寫文章及教學,擅長以圖代文,化繁為簡,除了幫助自己釐清思路之外,也希望藉由圖解的方式幫助大家共同學習,甚至手把手帶您設計出高品質的軟體產品。
阿Han的沙龍的其他內容
2024/09/04
相信對於這一篇感興趣的朋友們都已經玩過kafka的Schema Registry了吧! 沒玩過得朋友也沒關係, 歡迎至「【🔒Message Queue - Kafka】傳輸訊息的標準格式制定者 Schema Registry」了解一下這是什麼玩意兒, 好了, 廢話不多說, 讓我們直接切入主題吧
Thumbnail
2024/09/04
相信對於這一篇感興趣的朋友們都已經玩過kafka的Schema Registry了吧! 沒玩過得朋友也沒關係, 歡迎至「【🔒Message Queue - Kafka】傳輸訊息的標準格式制定者 Schema Registry」了解一下這是什麼玩意兒, 好了, 廢話不多說, 讓我們直接切入主題吧
Thumbnail
2023/06/25
為什麼要用Docker安裝? Docker是一個容器化平台, 就類似於我們早期虛擬機的VMWare、Virtual Box…等, 虛擬機平台一般, 只是面向的是伺服端, 供企業快速、簡單、輕量的佈署開發完成的程式軟體, 並將相關的環境依賴皆封裝成一包所謂的映像檔(image), 透過這樣的方式減少因
Thumbnail
2023/06/25
為什麼要用Docker安裝? Docker是一個容器化平台, 就類似於我們早期虛擬機的VMWare、Virtual Box…等, 虛擬機平台一般, 只是面向的是伺服端, 供企業快速、簡單、輕量的佈署開發完成的程式軟體, 並將相關的環境依賴皆封裝成一包所謂的映像檔(image), 透過這樣的方式減少因
Thumbnail
2023/06/16
對於軟體世界中Message Queue有興趣的朋友可以先閱讀這一篇「【資訊軟體知識】井然有序的處理機制 - Message Queue」建立基礎知識之後,再來看看這一篇會更容易進入情境唷! 這次就進入我們一般常見的MQ軟體「RabbitMQ」, 我們先以圖示來了解RabbitMQ的模型架構, 之後
Thumbnail
2023/06/16
對於軟體世界中Message Queue有興趣的朋友可以先閱讀這一篇「【資訊軟體知識】井然有序的處理機制 - Message Queue」建立基礎知識之後,再來看看這一篇會更容易進入情境唷! 這次就進入我們一般常見的MQ軟體「RabbitMQ」, 我們先以圖示來了解RabbitMQ的模型架構, 之後
Thumbnail
看更多