跳转至

RabbitMQ

  • Producer(發送訊息) ➝ 「我有一份新訂單!」

  • Queue(佇列) ➝ 「收到,我會幫你存起來,按順序處理!」

  • Consumer(接收並處理) ➝ 「收到訂單,開始執行!」

這樣,RabbitMQ 幫助系統 按順序處理請求,不會因為同時來太多請求而崩潰!

RabbitMQ 是 多執行緒 + 異步

  • 多執行緒:多個消費者(workers)可以同時處理訊息

  • 異步:生產者(Producer)發送訊息後,不會等訊息處理完,而是讓 RabbitMQ 負責分配,處理好再通知消費者

RabbitMQ 為什麼用多執行緒?

RabbitMQ 就像炸雞店的訂單管理系統

  • 生產者(Producer):像是店員在收單

  • 隊列(Queue):像是訂單列表

  • 消費者(Consumer):像是炸雞師傅在處理訂單

  • RabbitMQ 允許多個消費者(多執行緒) 同時處理訂單,加快處理速度

RabbitMQ 訊息佇列以炸雞店為例

RabbitMQ 是一個開源的訊息佇列系統,可以透過炸雞店的運作來理解它的核心概念:

炸雞店場景

想像一下繁忙的炸雞店:

點餐櫃檯(生產者 Producer)

  • 顧客點餐,服務生收訂單

  • 訂單寫在小票上並提交給廚房

  • 在 RabbitMQ 中,這是"生產者"發送訊息的過程

訂單佇列板(交換器 Exchange + 佇列 Queue)

  • 訂單小票掛在廚房的訂單板上

  • 廚師按順序處理這些訂單

  • 在 RabbitMQ 中,這相當於訊息被傳送到交換機,然後路由到對應佇列

廚房工作人員(消費者 Consumer)

  • 炸雞師傅從訂單板取下訂單並製作

  • 油炸師負責炸製,包裝員負責包裝

  • 在 RabbitMQ 中,這些是"消費者",從佇列中取得並處理訊息

RabbitMQ 關鍵概念對應

  • 生產者(Producer):收銀員接收訂單並提交

  • 交換器(Exchange):訂單分發系統,決定訂單去向

  • 直接交換機(Direct):訂單直接給特定廚師(例如炸雞訂單給炸雞師傅)

  • 主題交換器(Topic):根據訂單類型分配(例如所有炸雞相關給一組廚師,薯條相關給另一組)

  • 扇出交換器(Fanout):訂單複製給所有廚師(例如特殊促銷訂單)

  • 隊列(Queue):每個廚師面前的訂單隊列

  • 消費者(Consumer):廚師依序處理訂單

核心優勢

  • 解耦:收銀員不需要等廚師,下完單就可以接待下一位客人

  • 削峰填谷:午餐高峰時,訂單可以在隊列中等待處理,而不是讓系統崩潰

  • 非同步處理:顧客下單後可以坐下等待,廚師以自己的步調處理

  • 可靠性:如果某個廚師生病離開,訂單可以重新分配給其他廚師

  • 可擴充性:忙時可以增加廚師(消費者),閒時可以減少

這種設計讓炸雞店(系統)能夠有效率地應對大量訂單(訊息),即使在高峰期也能保持穩定運作。