圖解rabbitmq

消息隊列能夠實現流量削峯、下降系統耦合度、提升系統性能等。運維

RabbitMQ是一個實現了AMQP協議(Advanced Message Queue Protocol)的消息隊列。性能

AMQP簡介

Amqp是一個提供統一消息服務的應用層標準高級消息隊列協議,是應用層協議的一個開放標準,爲面向消息的中間件設計。基於此協議的客戶端與消息中間件可傳遞消息,並不受客戶端/中間件同產品,不一樣的開發語言等條件的限制。spa

 

rabbitmq 有哪些重要的組件?設計

 

  • ConnectionFactory(鏈接管理器):應用程序與Rabbit之間創建鏈接的管理器,程序代碼中使用。
  • Channel(信道):消息推送使用的通道。
  • Exchange(交換器):用於接受、分配消息。
  • Queue(隊列):用於存儲生產者的消息。
  • RoutingKey(路由鍵):用於把生成者的數據分配到交換器上。
  • BindingKey(綁定鍵):用於把交換器的消息綁定到隊列上。

RabbitMQ中的概念

  • producer: producer 是一個發送消息的應用
  • exchange:producer 並不會直接將消息發送到 queue 上,而是將消息發送給 exchange,由 exchange 按照必定規則轉發給指定queue
  • queue: queue 用來存儲 producer 發送的消息
  • consumer: consumer是接收並處理消息的應用

RabbitMQ運做原理

RabbitMQ消息傳遞(單個隊列):中間件

RabbitMQ消息傳遞(多個隊列)blog

多個Queue的場景中,消息會被Exchange按必定的路由規則分發到指定的Queue中去rabbitmq

  • 生產者指定Message的routing key,並指定Message發送到哪一個Exchange
  • Queue會經過binding key綁定到指定的Exchange
  • Exchange根據對比Message的routing key和Queue的binding key,而後按必定的分發路由規則,決定Message發送到哪一個Queue

每一類Exchange都有本身的分發路由規則:隊列

Fanout Exchange:忽略key對比,發送Message到Exchange下游綁定的全部Queue路由

Direct Exchange:比較Message的routing key和Queue的binding key,徹底匹配時,Message纔會發送到該Queue開發

 

Topic Exchange:比較Message的routing key和Queue的binding key,按規則匹配成功時,Message纔會發送到該Queue

  • routing key命名規則:用"."分割的字母或數字
  • 匹配規則
    • *:匹配單個字母或數字
    • #:匹配0~多個字母或數字
    • 好比:*.stock.#與usd.stock、eur.stock.db匹配;但與stock.nasdaq不匹配

 

默認Exchange:比較Message的routing key和Queue的名字,徹底匹配時,Message纔會發送到該Queue

 

RabbitMQ控制檯

RabbitMQ控制檯能夠:

  • 建立Queue
  • 建立Exchange
  • 經過binding key綁定Queue到Exchage
  • 發送消息到Exchange
  • 從Queue接收消息
  • 其餘運維監控功能
相關文章
相關標籤/搜索