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
79
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
170
AWS Startup 2020 - AMIS
kairen
0
49
學習 Kubernetes 不是為了成為 YAML Engineer
kairen
0
260
How to make your container:Kubernetes is a bit more secure
kairen
0
150
Vishwakarma: Terraform modules for deploying EKS and Self-hosting Kubernetes(AWS))
kairen
0
73
Vishwakarma: Terraform modules for deploying EKS and Self-hosting Kubernetes
kairen
0
63
Chatbot as a Service on Container(Kubernetes)
kairen
0
840
IT IRONMAN 2020
kairen
0
56
Advanced Kubernetes For UMC
kairen
0
120
Other Decks in Technology
See All in Technology
設計を積み重ねてシステムを刷新する
sansantech
PRO
0
160
Oracle Database Technology Night #87-1 : Exadata Database Service on Exascale Infrastructure(ExaDB-XS)サービス詳細
oracle4engineer
PRO
1
170
入門 PEAK Threat Hunting @SECCON
odorusatoshi
0
150
OPENLOGI Company Profile for engineer
hr01
1
20k
Exadata Database Service on Cloud@Customer セキュリティ、ネットワーク、および管理について
oracle4engineer
PRO
2
1.5k
クラウドサービス事業者におけるOSS
tagomoris
4
1k
コンテナサプライチェーンセキュリティ
kyohmizu
1
140
エンジニアが加速させるプロダクトディスカバリー 〜最速で価値ある機能を見つける方法〜 / product discovery accelerated by engineers
rince
4
560
生成AI×財務経理:PoCで挑むSlack AI Bot開発と現場巻き込みのリアル
pohdccoe
1
610
データベースの負荷を紐解く/untangle-the-database-load
emiki
2
490
サイト信頼性エンジニアリングとAmazon Web Services / SRE and AWS
ymotongpoo
7
1.4k
Raycast Favorites × Script Command で実現するお手軽情報チェック
smasato
1
140
Featured
See All Featured
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Rebuilding a faster, lazier Slack
samanthasiow
80
8.9k
StorybookのUI Testing Handbookを読んだ
zakiyama
28
5.5k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Optimizing for Happiness
mojombo
376
70k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
129
19k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
Embracing the Ebb and Flow
colly
84
4.6k
A better future with KSS
kneath
238
17k
GraphQLとの向き合い方2022年版
quramy
44
14k
Scaling GitHub
holman
459
140k
YesSQL, Process and Tooling at Scale
rocio
172
14k
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