前言
最近工作上使用了 RabbitMQ,在研究時發現滿多都講解的挺複雜,所以把 Zam 認為容易懂得方式記錄下來。
先瞭解 RabbitMQ 適不適合你再繼續
有沒有你想要的語言?
基本上支援超豐富,除非你用的是極冷門
接不接受額外架一台 RabbitMQ Server?
透過額外架一個 Server 讓 RabbitMQ 處理所有你自定義訊息
你的用途是什麼?
RabbitMQ 基本上是類似郵局的概念,只要確保你有信箱他就一定把信送到你家。
如果你有 1 ~ N 服務需要等待某件事情做完,並確保順序拿到該資料往下做事,那基本上你相當適合使用。官方比喻比較典型的是 logging system
RabbitMQ 的重要名詞與概念
主要有五大類:
Producer
負責丟訊息到 Queue 中
若有定義 Exchange,則丟給 Exchange 決定要給誰
Consumer
負責接收來自 Queue 的訊息
Queue
負責存放所需要的資料
跟資料結構的 Queue 一樣,有先進先出 (FIFO) 特性
每個 Queue 都會有他的名字當 id
Exchange
用來決定 Producer 給的資料要丟給哪一個 Queue
主要有這四種方式
direct: 直接丟給指定的 Queue
topic: 類似 regular expression,設定 binding 規則,丟給符合的 Queue
headers: 透過傳送資料的 header 來特別指定所要的 Queue
fanout: 一次丟給全部負責的 Queue
Binding
跟 Exchange 成對搭配,主要是告訴 Exchange 他負責哪些 Queue
利用 RabbitMQ 這些特性可以什麼事?
透過不同組合,你可以達到不同的需求。以下為五種例子
Task queues
不透過任何的 Exchange 直接送到指定的 Queue
Publish/Subscribe
透過 Exchange: fanout 特性,達到訂閱 Queue 的 Consumer 都可以收到訊息
Routing
透過 Exchange: direct 特性,達到 filter 到不同 Queue 的 routing 訊息
Topics
透過 Exchange: topic 特性,每個 Queue 都有屬於自己的分類
RPC
透過 AMQP 的協議所定義的 properties 來達成 RPC 的支援
Reference
Other Related Stories
如果此篇你喜歡或覺得有幫助
可以幫 Zam 快速連點個鼓掌(claps) 或者 follow 哦
萬分感謝!