
RabbitMQ 是一套基於 AMQP(Advanced Message Queuing Protocol) 協定開發的開源應用,其核心的概念就是接收消息、暫存消息、最後將訊息傳遞到 Consumer。簡單來說,我們可以把它想像成是寄放信件的郵局,郵局會負責收取信件、妥善保管,然後再將信件派發給收件人。
其中「Consumer」這個詞彙可能會讓讀者感到疑惑,下面將會逐步說明 RabbitMQ 中常用的專有名詞與運作機制,幫助大家更清楚理解其實際應用。
RabbitMQ 存在著幾種機制,在了解這接機制之前,先來介紹一些名詞所表達的概念:
- Producer
- Exchange
- Queue
- Consumer
- Producer
Producer 負責建立訊息,並且傳送到 Queue 內,其來源可能是程式或任何產生訊息的應用。在大部分的設計上,訊息會先經過 Exchange,再由 Exchange 進行分發。
從 Producer 的角度來看,它的任務僅限於將訊息傳遞給 Queue 或 Exchange,後續任何的分發就與它無關。
- Exchange
在特定架構中,Exchange 會接收 Producer 發送的訊息,並根據訊息中的 Routing key 及 Exchange 類型 (如 direct、topic、fanout 等) 來決定將訊息路由到一個或多個 Queue。
*如果沒有符合條件的 Queue,即使訊息傳送給 Exchange,最終也不會被分發到 Queue
- Queue
又稱為 Message Queue,負責儲存來自 Producer 或 Exchange 的訊息。這些訊息遵循 FIFO(First In First Out, 先進先出) 的規則,由 Consumer 主動拉取並進行處理。即使沒有任何 Consumer 在線,訊息仍會被妥善保存,直到被取用為止。
*這邊要特別注意 Queue 不會主動發送任何訊息,而是等待 Consumer 來做處理
- Consumer
Consumer 會從訂閱的 Queue 中拉取訊息並進行處理。處理完成後,通常會發送回執訊息,通知 RabbitMQ 可以將該訊息從 Queue 中移除。這個過程代表 RabbitMQ 的最後階段,完成了訊息的接收、暫存直到最終處理。

資料來源 - https://jstobigdata.com/
在初步了解 RabbitMQ 後,會發現它是一種暫存訊息的應用,有實務經驗的讀者可能會覺得它與 Redis 相似,兩者也確實常被拿來比較,但在實際應用上它們存在著顯著差異。Redis 更偏向快取機制,其儲存於記憶體中,儲存空間較小,主要用於短期操作;相較之下,RabbitMQ 能夠儲存較大的訊息,並且可以存放更長時間,更適合需要持久化訊息的場景。
本篇提供 RabbitMQ 的基礎概念,下篇『新手實戰 RabbitMQ:RabbitMQ 安裝與 Server 建立』中會有更深入的介紹。