RabbitMQ簡介
Intro
消息隊列中間件是分布式系統中重要的組件,主要解決應用耦合,異步消息,流量削鋒等問題。實現高性能,高可用,可伸縮和最終一致性架構。是大型分布式系統不可缺少的中間件。
RabbitMQ——Rabbit Message Queue的簡寫,但不能僅僅理解其為消息隊列,消息代理更合適。RabbitMQ 是一個由 Erlang 語言開發的AMQP(高級消息隊列協議)的開源實現。
RabbitMQ作為一個消息代理,主要和消息打交道,負責接收并轉發消息。
RabbitMQ提供了可靠的消息機制、跟蹤機制和靈活的消息路由,支持消息集群和分布式部署。適用于排隊算法、秒殺活動、消息分發、異步處理、數據同步、處理耗時任務、CQRS等應用場景
MQ使用場景
-
異步處理
不用MQ時可能的處理流程:
common使用MQ處理:
mq
-
流量削峰
decrease top
-
應用解耦
cross_system_mq
-
日志處理
log_mq
Install on Windows
-
安裝 Erlang 環境
RabbitMQ 是 Erlang 語言寫的,首先我們需要安裝Erlang 環境
下載地址:
-
安裝 RabbitMQ Server
下載地址:
-
啟用Web管理插件
RabbitMQ 安裝后會自動在安裝并啟動服務,RabbitMQ 自帶一個Web管理界面,需要手動啟用
打開 RabbitMQ 安裝目錄,在
sbin
目錄下執行命令:-
cmd
rabbitmq-plugins.bat enable rabbitmq_management
-
powershell
.\rabbitmq-plugins.bat enable rabbitmq_management
在瀏覽器訪問 http://localhost:15672 ,登錄 Web 管理界面
默認用戶名/密碼:
guest/guest
-
Get Started
-
RabbitMQ 核心概念
- Publisher:生產者,消息的發送方。
- Connection:網絡連接。
- Channel:信道,多路復用連接中的一條獨立的雙向數據流通道。
- Exchange:交換器(路由器),負責消息的路由到相應隊列。
- Binding:隊列與交換器間的關聯綁定。消費者將關注的隊列綁定到指定交換器上,以便Exchange能準確分發消息到指定隊列。
- Queue:隊列,消息的緩沖存儲區。
- Virtual Host:虛擬主機,虛擬主機提供資源的邏輯分組和分離。包含連接,交換,隊列,綁定,用戶權限,策略等。
- Broker:消息隊列的服務器實體。
- Consumer:消費者,消息的接收方。
-
RabbitMQ 消息模型
-
RabbitMQ 消息結構
RabbitMQ structure -
無Exchange單Consumer
RabbitMQ single consumer -
無Exchange多Consumer
RabbitMQ single consumer -
Exchange多Consumer
RabbitMQ single consumer -
公平分發
RabbitMQ avarage distribution -
RPC
RabbitMQ RPC
-
-
RabbitMQ 常用ExchangeType介紹
-
direct(明確的路由規則:消費端綁定的隊列名稱必須和消息發布時指定的路由名稱一致)
direct exchangeType -
fanout(消息廣播,將消息分發到exchange上綁定的所有隊列上)
fanout的路由機制如下圖,即發送到
fanout
類型exchange
的消息都會分發到所有綁定該exchange
的隊列上去。fanout exchangeType -
topic(模式匹配的路由規則:支持通配符)
topic
是direct
的升級版,是一種模式匹配的路由機制。它支持使用兩種通配符來進行模式匹配:符號#
和符號*
。其中*
匹配一個單詞,#
則表示匹配0個或多個單詞,單詞之間用.
分割。如下圖所示。topic exchangeType -
x-delayed-message(需要插件支持,插件下載地址:rabbitmq_delayed_message_exchange)
支持
direct
和topic
模式,支持消息延遲發送
-