消息隊列能夠實現流量削峯、下降系統耦合度、提升系統性能等。運維
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接收消息
- 其餘運維監控功能