RabbitMQ 介紹
軟體簡介
- 著名應用 message Queue (message brokers) 的開源軟體
- 支持 AMQP 0-9-1 等多種訊息傳遞協定
- 支援多種語言及插件工具
- 圖形化介面管理及監控訊息狀態
- 其他類似軟體 EX: Kafka、AWS SQS…
AMQP 基本架構及名詞解釋
AMQP 0-9-1: AMQP (Advanced Message Queuing Protocol)是一種訊息傳遞的協定,具有各個角色實踐訊息傳遞的中間代理。
由 Producer 發佈訊息到 exchange,可以想像成郵局或郵箱。然後依照綁定的規則將訊息發到 Queue(Broker) 。然後 consumer 依照期間監聽(訂閱)的 Queue 將其中訊息取出。
Producer
: 發送訊息的程式Queue
:儲存訊息等待接收的緩衝區域,具有 FIFO 特性(先進先出)Consumer
:訊息接收的程式Exchange
:決定將訊息推送至指定位置- Direct:直接丟給指定的 Queue
- Topic:設定 binding 規則,丟給符合的 Queue
- Fanout:一次丟給全部負責的 Queue
5 種 RabbitMQ 設計模式
1. Simple
最基本的模式,只有一個 Producer 負責送 message 給 Queue、只有一個 Consumer 去 Q ueue 裡將 message 接收
2. Worker
這模式像是多個工人會共同去完成工作
同時有多個 Consumer 會去收 Queue 裡的 message,可以增加 message 消化的速率。常用的一種模式,通常是用在大量非同步的作業上,只要連接同一個 Queue,就可以在多台機器上 Consumer 平行處理。
3. Publish/Subscibe
可以想像成訂閱頻道或是服務一樣,有新的發表或是訊息就會廣播給訂閱者。
所以需在 Producer、Queue、Consumer 之間多一個 Exchange,Producer 會先把 message 丟給 Exchange (Type = Fanout),Fanout 模式的 Exchange 去決定要把這個 message 丟給綁定(訂閱)的 Queue 上
4. Routing
想成貼上標籤(Routing key)並依照標籤指定類型來傳送
當 Producer 把 message 丟給 Exchange(Type = Direct) 時,同時要在這個 message 上面帶上一個 routing key,而 Exchange 就會根據這個 routing key,將 message 丟到指定的 Queue 上
就像下圖的例子,Q1 只會收到關於 orange 相關 routing key 的 message、Q2 則是 black 及 green 的 message
5. Topics
也是標上特定標籤,可以想成能區分更仔細的多重標籤。
類似 Routing 模式,同樣有 Exchange (Type = Topic),也透過 routing key 來分流訊息,差別在 topic 的特性能夠模糊綁定非固定的 routing key。 設定模糊 routing key 的格式需以 .(dot) 分隔的字串,*(star) 只能代替一個單詞、#(bash) 可以代替零個或多個單詞。
根據下圖的狀況,訊息將使用由三個標籤組成的 routing key 發送,第一個標籤是 “速度”,第二個標籤是 “顏色”,第三個標籤是 “動物”:<速度>.<顏色>.<動物>。
Q1 以 .orange. 綁定,與 Q2 以 ..rabbit 和 lazy.# 綁定,也就是:
- Q1 會收到所有關於 “橘色動物” 的訊息
- Q2 會收到所有關於 “兔子” 的訊息,以及所有關於 “任何顏色且懶惰動物” 的訊息
參考資料: