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):廚師依序處理訂單
核心優勢
-
解耦:收銀員不需要等廚師,下完單就可以接待下一位客人
-
削峰填谷:午餐高峰時,訂單可以在隊列中等待處理,而不是讓系統崩潰
-
非同步處理:顧客下單後可以坐下等待,廚師以自己的步調處理
-
可靠性:如果某個廚師生病離開,訂單可以重新分配給其他廚師
-
可擴充性:忙時可以增加廚師(消費者),閒時可以減少
這種設計讓炸雞店(系統)能夠有效率地應對大量訂單(訊息),即使在高峰期也能保持穩定運作。