【RabbitMQ】五分鐘輕鬆了解 RabbitMQ 運作

Zam Huang
Aug 27, 2019

--

前言

最近工作上使用了 RabbitMQ,在研究時發現滿多都講解的挺複雜,所以把 Zam 認為容易懂得方式記錄下來。

先瞭解 RabbitMQ 適不適合你再繼續

有沒有你想要的語言?

基本上支援超豐富,除非你用的是極冷門

支援的語言 library 列表

接不接受額外架一台 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

RabbitMQ Tutorials

Other Related Stories

如果此篇你喜歡或覺得有幫助

可以幫 Zam 快速連點個鼓掌(claps) 或者 follow 哦

萬分感謝!

--

--

Zam Huang
Zam Huang

Written by Zam Huang

一個記錄著自己人生過程的工程師。A Software Engineer at Ruckus Network in Taiwan。 IG, Linkedin:@zam_huang, stack overflow: user:2613194

No responses yet