Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
A Quick Start Guide For RabbitMQ
Search
Kyle Bai
November 06, 2018
Technology
0
86
A Quick Start Guide For RabbitMQ
RabbitMQ is lightweight and easy to deploy on premises and in the cloud.
Kyle Bai
November 06, 2018
Tweet
Share
More Decks by Kyle Bai
See All by Kyle Bai
讓 Jenkins 老爺爺掌舵帶領開發者航向美好新世界
kairen
1
200
AWS Startup 2020 - AMIS
kairen
0
65
學習 Kubernetes 不是為了成為 YAML Engineer
kairen
0
300
How to make your container:Kubernetes is a bit more secure
kairen
0
170
Vishwakarma: Terraform modules for deploying EKS and Self-hosting Kubernetes(AWS))
kairen
0
84
Vishwakarma: Terraform modules for deploying EKS and Self-hosting Kubernetes
kairen
0
87
Chatbot as a Service on Container(Kubernetes)
kairen
0
900
IT IRONMAN 2020
kairen
0
74
Advanced Kubernetes For UMC
kairen
0
150
Other Decks in Technology
See All in Technology
なぜSaaSがMCPサーバーをサービス提供するのか?
sansantech
PRO
8
2.4k
落ちる 落ちるよ サーバーは落ちる
suehiromasatoshi
0
140
自作JSエンジンに推しプロポーザルを実装したい!
sajikix
1
150
allow_retry と Arel.sql / allow_retry and Arel.sql
euglena1215
1
150
エラーとアクセシビリティ
schktjm
0
980
Oracle Cloud Infrastructure:2025年8月度サービス・アップデート
oracle4engineer
PRO
0
200
開発者を支える Internal Developer Portal のイマとコレカラ / To-day and To-morrow of Internal Developer Portals: Supporting Developers
aoto
PRO
1
340
大「個人開発サービス」時代に僕たちはどう生きるか
sotarok
19
9k
Language Update: Java
skrb
2
260
AWSで始める実践Dagster入門
kitagawaz
0
260
Grafana MCPサーバーによるAIエージェント経由でのGrafanaダッシュボード動的生成
hamadakoji
1
1.3k
Kiroと学ぶコンテキストエンジニアリング
oikon48
6
8.9k
Featured
See All Featured
Building Better People: How to give real-time feedback that sticks.
wjessup
368
19k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.1k
Bash Introduction
62gerente
615
210k
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.5k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.8k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
61k
Agile that works and the tools we love
rasmusluckow
330
21k
Visualization
eitanlees
148
16k
Producing Creativity
orderedlist
PRO
347
40k
Optimizing for Happiness
mojombo
379
70k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
Transcript
A Quick Start Guide For RabbitMQ RabbitMQ is lightweight and
easy to deploy on premises and in the cloud
About Me 白凱仁(Kyle Bai) • Interested in emerging technologies. •
COSCUP, Kubernetes Day and OpenStack Day Speaker. • OpenStack and Kubernetes Projects Contributor(100+ PR). • Certified Kubernetes Administrator. @kairen(
[email protected]
) https://kairen.github.io/
Agenda Today I would like to talk about • RabbitMQ
介紹 • RabbitMQ 範例 • Hello World • Work Queues • Publish/Subscribe • Routing • Topics • Use Case
RabbitMQ 介紹
What is RabbitMQ? RabbitMQ 是實現了進階訊息佇列協定(AMQP)的開源 訊息代理軟體(亦稱訊息導向中介層)。 • 以 Erlang 語言開發而成。
• Client Library 支援多種程式語言。 • 支援 HA 與 Clustering。 • 支援 Multi-protocol(MQTT、STOMP等)。
RabbitMQ 特性 • 可靠性(Reliability):RabbitMQ 使用一些機制來確保可靠性︐如持久化、Publisher Confirms。 • 靈活的路由(Flexible Routing):透過 Exchange來路由訊息要到哪個
Queue。 • Web-based 管理介面(Management UI):RabbitMQ提供了一個易用的使用者介面︐使得可以監 控和管理訊息 Broker。 • 追蹤機制(Tracing System):如訊息異常時︐RabbitMQ 提供訊息追蹤機制︐來幫助使用者找出問 題點。 • 插件機制(Plugin System):RabbitMQ 提供了許多插件來擴展功能。
AMQP AMQP(Advanced Message Queue)是應用層協定的一個開放標準。它支援符合要求的 客戶端應用(Application)和訊息中介軟體代理(Messaging middleware broker)之間進 行通訊︐而其主要特徵是面向訊息、佇列、路由(包括點對點和釋出/訂閱)、可靠性 與安全性等等。 •
完全開放 • 廣泛適用於企業 • 有 RabbitMQ、ActiveMQ 與 StormMQ 等實作專案
AMQP 三層 • Module Layer︐位於協定最高層︐主要定義了一些供客戶端呼叫的指令︐客戶端可以 利用這些指令實現自己的業務邏輯︐例如:客戶端可以透過 queue.declare 聲明一個 Queue︐利用 Consume
指令獲取一個 Queue 中的訊息。 • Session Layer︐主要負責將客戶端的指令發送給伺服器(Broker)︐在將 Broker 的應答 返回給客戶端︐主要為客戶端與 Broker 之間溝通提供可靠性、同步機制與錯誤處 理。 • Transport Layer︐主要傳輸二進制資料流︐提供訊框的處理‘頻道復用、錯誤檢測與 資料表示。
Why use AMQP? 在分散式系統中︐子系統如果使用 Socket 來進行溝通的話︐會有很多問題要解決︐ 如以下︓ • 訊息發送者與接收者如何維持連線︐而有一方中斷時︐如何確保訊息不遺失︖ •
如何降低發送者與接收者的耦合度︖ • 如何做到 Load Balance︐以平衡接收者的負擔︖ • 如何將訊息發送到相關的接收者︐如果接收者訂閱了不同訊息︐要如何被正確分發 呢︖
Message System Compare 產品 優點 缺點 OpenFire(XMPP) 1.成熟穩定 2.適合做 IM
伺服器 1.訊息可靠性無保障 2.叢集模式不完善 3.集 議模式不完善 4.協定不輕量量 ActiveMQ(JMS) 1.成熟穩定 2.與Java契合度⾼高 1.路路由策略略不靈活 2.叢集模式不穩定 RabbitMQ(AMQP) 1.成熟穩定 2.路路由策略略靈活 3.訊息傳輸 可靠性佳 4.叢集⽅方案成熟 1.組態多、學習和維護成本⾼高
RabbitMQ Message Model
RabbitMQ and Server Concepts • Producer: 發送訊息的來源、應用程式等。 • Queue: 儲存訊息的緩衝區。
• Consumer: 接收訊息的應用程式等。 • Message: 透過 RabbitMQ 從 Producer 發送給 Consumer 的資訊。
RabbitMQ and Server Concepts • Exchange: 訊息交換器︐依據使用的 Exchange type 來將訊息路由到
Queue。 • Routing key: 是 Exchange 查看的密鑰︐被用於決定如何將訊息路由到 Queue 中︐ 可以理解成訊息的地址。 • Binding: Queue 與 Exchange 的鏈接。 • Binding key:Queue 鏈接 Exchange 時︐所指定的密鑰。
RabbitMQ and Server Concepts • Channel: 是連線內的虛擬連線︐當從 Queue 發送或使用訊息時︐都會透過 Channel
來完成。 • Connection: 應用程式跟 RabbitMQ broker 之間的 TCP 連線。 • Users: RabbitMQ 可以設定使用者與密碼來分配權限︐如讀取、寫入等等。 • Vhost, virtual host: 提供了一種方法來隔離使用相同 RabbitMQ 實例。 • Broker:用以表示 Message Queue 伺服器實體。
Message flow in RabbitMQ 1. Producer 發送訊息到一個 Exchange。
Message flow in RabbitMQ 1. Producer 發送訊息到一個 Exchange。 2. Exchange
接受到訊息︐並進行路由。
Message flow in RabbitMQ 1. Producer 發送訊息到一個 Exchange。 2. Exchange
接受到訊息︐並進行路由。 3. 建立 Exchange 到 Queues 的綁定。
Message flow in RabbitMQ 1. Producer 發送訊息到一個 Exchange。 2. Exchange
接受到訊息︐並進行路由。 3. 建立 Exchange 到 Queues 的綁定。 4. 這時訊息會被保留在 Queue 中︐直到有 Consumer 來處理。
Message flow in RabbitMQ 1. Producer 發送訊息到一個 Exchange。 2. Exchange
接受到訊息︐並進行路由。 3. 建立 Exchange 到 Queues 的綁定。 4. 這時訊息會被保留在 Queue 中︐直到有 Consumer 來處理。 5. Consumer 接收來至某個 Queue 的訊息。
Types Of Exchanges
Direct Exchanges 訊息中的 Routing key 跟 Binding Key 一致時︐Exchange 會直接將訊息發到對應
Queue 中。
Fanout Exchanges 每個發到 Fanout 類型的 Exchange 的訊息都會被分到所有綁定的 Queue 上。適合做 Load
Balancer。
Topic Exchanges Topic: 透過匹配 Routing key (“a.b.c.d”)屬性來將訊息路由到 Queue 上。 •
* 匹配一個單字。 • # 則為 0 或者多個單字(舉例 *.stock.# 可以匹配 usd.stock 與 eur.stock.db︐但 stock.nasdaq 無法)。
RabbitMQ 範例
Quick Start for Docker $ docker run -d -p 5671:5671
-p 5672:5672 \ -p 4369:4369 -p 25672:25672 \ -p 15671:15671 -p 15672:15672 \ --name rabbitmq \ rabbitmq:3-management $ docker ps
Get client library • Java: https://www.rabbitmq.com/java-client.html • Go: go get
github.com/streadway/amqp
Hello World(One-to-one) 這種模式會建立一個 Consumer 來監聽 Queue︐一旦有訊息時︐就會直接拿來使用︐ 並將訊息從 Queue 刪除。 •
可應用於聊天室系統中。 • 這種方式可能會因為訊息沒被正確處理︐就從 Qeueu 中刪除而導致訊息遺失。
Hello World
Hello World
Work Queues 該範例會有多個 Consumer(C1, C2) 同時監聽一個 Queue︐這時 C1 與 C2
將會共同競 爭當前訊息 Queue 內容︐誰先拿到就由誰負責。同時防止接收端在處理訊息時掛掉︐ 因此只有在訊息處理完成後︐才會發送 Ack 訊息。 • 可應用在系統排程、Web 應用程式︐或者搶紅包系統等
Publish/Subscribe(Fanout) 該範例會有一個 Exchange 依據發送訂閱的模式設定︐來將訊息路由到所有綁定的 Queue 中︐再由後端相關 Consumer 來拿取訊息。 • 可以應用於群組訊息發送(通知)、廣告與郵件群發等
Routing(Direct) Producer 發送訊息到 Exchange︐並同時綁定一個 Routing Key︐這時 Exchange 會 根據 Routing
Key 對下游綁定的 Queue 以 Key 作為判斷來路由訊息︐滿足 Routing Key 的 Queue 才會收到訊息。 • 可應用於專案或系統的錯誤回報
Topics 該範例類似 Routing 的功能︐同樣會讓 Exchange 來路由不同 Key 內容到綁定的 Queue 中︐但會以
*(單字) 跟 #(0或多個單字) 來匹配多個 Topic 名稱(a.b.c)。
Use cases
OpenStack OpenStack 採用 RabbitMQ 來管理元件之間都操作︐比如說開啟一個虛擬機、區塊 儲存等等。
騰訊雲-CMQ CMQ 是基於 RabbitMQ 二次開發的 產品。而該案例使用在第三方支付 系統上︐透過 Message Queue 來確
保支付訊息的傳遞可靠性與安全性。
Microservice Event Bus