Upgrade to Pro — share decks privately, control downloads, hide ads and more …

A Quick Start Guide For RabbitMQ

Kyle Bai
November 06, 2018

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

More Decks by Kyle Bai

Other Decks in Technology

Transcript

  1. A Quick Start Guide For RabbitMQ RabbitMQ is lightweight and

    easy to deploy on premises and in the cloud
  2. 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/
  3. Agenda Today I would like to talk about • RabbitMQ

    介紹 • RabbitMQ 範例 • Hello World • Work Queues • Publish/Subscribe • Routing • Topics • Use Case
  4. What is RabbitMQ? RabbitMQ 是實現了進階訊息佇列協定(AMQP)的開源 訊息代理軟體(亦稱訊息導向中介層)。 • 以 Erlang 語言開發而成。

    • Client Library 支援多種程式語言。 • 支援 HA 與 Clustering。 • 支援 Multi-protocol(MQTT、STOMP等)。
  5. RabbitMQ 特性 • 可靠性(Reliability):RabbitMQ 使用一些機制來確保可靠性︐如持久化、Publisher Confirms。 • 靈活的路由(Flexible Routing):透過 Exchange來路由訊息要到哪個

    Queue。 • Web-based 管理介面(Management UI):RabbitMQ提供了一個易用的使用者介面︐使得可以監 控和管理訊息 Broker。 • 追蹤機制(Tracing System):如訊息異常時︐RabbitMQ 提供訊息追蹤機制︐來幫助使用者找出問 題點。 • 插件機制(Plugin System):RabbitMQ 提供了許多插件來擴展功能。
  6. AMQP 三層 • Module Layer︐位於協定最高層︐主要定義了一些供客戶端呼叫的指令︐客戶端可以 利用這些指令實現自己的業務邏輯︐例如:客戶端可以透過 queue.declare 聲明一個 Queue︐利用 Consume

    指令獲取一個 Queue 中的訊息。 • Session Layer︐主要負責將客戶端的指令發送給伺服器(Broker)︐在將 Broker 的應答 返回給客戶端︐主要為客戶端與 Broker 之間溝通提供可靠性、同步機制與錯誤處 理。 • Transport Layer︐主要傳輸二進制資料流︐提供訊框的處理‘頻道復用、錯誤檢測與 資料表示。
  7. Why use AMQP? 在分散式系統中︐子系統如果使用 Socket 來進行溝通的話︐會有很多問題要解決︐ 如以下︓ • 訊息發送者與接收者如何維持連線︐而有一方中斷時︐如何確保訊息不遺失︖ •

    如何降低發送者與接收者的耦合度︖ • 如何做到 Load Balance︐以平衡接收者的負擔︖ • 如何將訊息發送到相關的接收者︐如果接收者訂閱了不同訊息︐要如何被正確分發 呢︖
  8. 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.組態多、學習和維護成本⾼高
  9. RabbitMQ and Server Concepts • Producer: 發送訊息的來源、應用程式等。 • Queue: 儲存訊息的緩衝區。

    • Consumer: 接收訊息的應用程式等。 • Message: 透過 RabbitMQ 從 Producer 發送給 Consumer 的資訊。
  10. RabbitMQ and Server Concepts • Exchange: 訊息交換器︐依據使用的 Exchange type 來將訊息路由到

    Queue。 • Routing key: 是 Exchange 查看的密鑰︐被用於決定如何將訊息路由到 Queue 中︐ 可以理解成訊息的地址。 • Binding: Queue 與 Exchange 的鏈接。 • Binding key:Queue 鏈接 Exchange 時︐所指定的密鑰。
  11. RabbitMQ and Server Concepts • Channel: 是連線內的虛擬連線︐當從 Queue 發送或使用訊息時︐都會透過 Channel

    來完成。 • Connection: 應用程式跟 RabbitMQ broker 之間的 TCP 連線。 • Users: RabbitMQ 可以設定使用者與密碼來分配權限︐如讀取、寫入等等。 • Vhost, virtual host: 提供了一種方法來隔離使用相同 RabbitMQ 實例。 • Broker:用以表示 Message Queue 伺服器實體。
  12. Message flow in RabbitMQ 1. Producer 發送訊息到一個 Exchange。 2. Exchange

    接受到訊息︐並進行路由。 3. 建立 Exchange 到 Queues 的綁定。
  13. Message flow in RabbitMQ 1. Producer 發送訊息到一個 Exchange。 2. Exchange

    接受到訊息︐並進行路由。 3. 建立 Exchange 到 Queues 的綁定。 4. 這時訊息會被保留在 Queue 中︐直到有 Consumer 來處理。
  14. Message flow in RabbitMQ 1. Producer 發送訊息到一個 Exchange。 2. Exchange

    接受到訊息︐並進行路由。 3. 建立 Exchange 到 Queues 的綁定。 4. 這時訊息會被保留在 Queue 中︐直到有 Consumer 來處理。 5. Consumer 接收來至某個 Queue 的訊息。
  15. Topic Exchanges Topic: 透過匹配 Routing key (“a.b.c.d”)屬性來將訊息路由到 Queue 上。 •

    * 匹配一個單字。 • # 則為 0 或者多個單字(舉例 *.stock.# 可以匹配 usd.stock 與 eur.stock.db︐但 stock.nasdaq 無法)。
  16. 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
  17. Hello World(One-to-one) 這種模式會建立一個 Consumer 來監聽 Queue︐一旦有訊息時︐就會直接拿來使用︐ 並將訊息從 Queue 刪除。 •

    可應用於聊天室系統中。 • 這種方式可能會因為訊息沒被正確處理︐就從 Qeueu 中刪除而導致訊息遺失。
  18. Work Queues 該範例會有多個 Consumer(C1, C2) 同時監聽一個 Queue︐這時 C1 與 C2

    將會共同競 爭當前訊息 Queue 內容︐誰先拿到就由誰負責。同時防止接收端在處理訊息時掛掉︐ 因此只有在訊息處理完成後︐才會發送 Ack 訊息。 • 可應用在系統排程、Web 應用程式︐或者搶紅包系統等
  19. Routing(Direct) Producer 發送訊息到 Exchange︐並同時綁定一個 Routing Key︐這時 Exchange 會 根據 Routing

    Key 對下游綁定的 Queue 以 Key 作為判斷來路由訊息︐滿足 Routing Key 的 Queue 才會收到訊息。 • 可應用於專案或系統的錯誤回報