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
75
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
160
AWS Startup 2020 - AMIS
kairen
0
40
學習 Kubernetes 不是為了成為 YAML Engineer
kairen
0
250
How to make your container:Kubernetes is a bit more secure
kairen
0
140
Vishwakarma: Terraform modules for deploying EKS and Self-hosting Kubernetes(AWS))
kairen
0
67
Vishwakarma: Terraform modules for deploying EKS and Self-hosting Kubernetes
kairen
0
54
Chatbot as a Service on Container(Kubernetes)
kairen
0
820
IT IRONMAN 2020
kairen
0
54
Advanced Kubernetes For UMC
kairen
0
110
Other Decks in Technology
See All in Technology
Platform Engineering for Software Developers and Architects
syntasso
1
520
SRE×AIOpsを始めよう!GuardDutyによるお手軽脅威検出
amixedcolor
0
130
【Pycon mini 東海 2024】Google Colaboratoryで試すVLM
kazuhitotakahashi
2
520
適材適所の技術選定 〜GraphQL・REST API・tRPC〜 / Optimal Technology Selection
kakehashi
1
610
Flutterによる 効率的なAndroid・iOS・Webアプリケーション開発の事例
recruitengineers
PRO
0
100
DynamoDB でスロットリングが発生したとき_大盛りver/when_throttling_occurs_in_dynamodb_long
emiki
1
310
IBC 2024 動画技術関連レポート / IBC 2024 Report
cyberagentdevelopers
PRO
0
110
リンクアンドモチベーション ソフトウェアエンジニア向け紹介資料 / Introduction to Link and Motivation for Software Engineers
lmi
4
300k
Amplify Gen2 Deep Dive / バックエンドの型をいかにしてフロントエンドへ伝えるか #TSKaigi #TSKaigiKansai #AWSAmplifyJP
tacck
PRO
0
380
ExaDB-D dbaascli で出来ること
oracle4engineer
PRO
0
3.8k
EventHub Startup CTO of the year 2024 ピッチ資料
eventhub
0
120
サイバーセキュリティと認知バイアス:対策の隙を埋める心理学的アプローチ
shumei_ito
0
390
Featured
See All Featured
Faster Mobile Websites
deanohume
305
30k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
42
9.2k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.1k
The Invisible Side of Design
smashingmag
298
50k
How To Stay Up To Date on Web Technology
chriscoyier
788
250k
Practical Orchestrator
shlominoach
186
10k
Building Flexible Design Systems
yeseniaperezcruz
327
38k
Bash Introduction
62gerente
608
210k
4 Signs Your Business is Dying
shpigford
180
21k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
16
2.1k
The Language of Interfaces
destraynor
154
24k
Mobile First: as difficult as doing things right
swwweet
222
8.9k
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