軟體簡介

  • 著名應用 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 會收到所有關於 “兔子” 的訊息,以及所有關於 “任何顏色且懶惰動物” 的訊息


參考資料:

  1. AMQP 0-9-1 Model Explained
  2. RabbitMQ 簡介與 5 種設計模式
  3. RabbitMQ 基本介紹、安裝教學