所有的訊息都是通過 Exchange 交換機來投遞給 Queue 佇列的,如果有 RoutingKey,通過路由key來進行篩選,通過 bindings 和 Queue 進行繫結。Broker 就相當於是一個節點,例如在本機安裝了一個 RabbitMQ 服務,那麼本機就是一個 Broker,Virture Host 虛擬機器節點就相當於目錄,主要使用者隔離和區分,可以在 頁面中的 Virtual Hosts 中進行新增。
核心概念
Server:又稱 Broker,接受客戶端的連線,實現 AMQP 實體服務,安裝 rabbitmq-server
Connection:連線,應用程式與Broker的網路連線 TCP/IP 三次握手和四次揮手
Channel:網路通道,幾乎所有的操作都在Channel中進行,Channel是進行訊息讀寫的通道,客戶端可以建立對各個Channel,每個Channel代表一個會話
Message:訊息,服務與應用程式之間傳送的資料,由Properties和body組成,properteis可以是對訊息進行修飾,比如訊息的優先順序,延遲等高階特性,Body則是訊息體的內容
Virtual Host:虛擬地址,使用者邏輯隔離,最上層的訊息路由,一個虛擬機器可以有若干個Ecchange和Queue,同一個虛擬主機裡面不能有相同名字的Exchange
Exchange:交換機,接收訊息,根據路由鍵傳送訊息到繫結到的佇列(不具備訊息儲存能力)
Bindings:Exchange和Queue直接的虛擬連線,binding中可以保護多個routing key
Routing key:是一個路由規則,虛擬機器可以用它來去定如何路由一個特定的訊息
Queue:佇列,也成為Message Queue,訊息佇列,儲存訊息並將它們轉發給消費者
RabbitMQ 整體架構
RabbitMQ 執行流程
RabbitMQ 支援訊息的模式
- 1、簡單模式
- 2、工作模式 Work
分發機制
所有的訊息都是通過 Exchange 傳送到佇列的
- 3、釋出訂閱模式
Fanout——釋出與訂閱模式,是一種廣播機制,它是沒有路由key的模式
首先建立一個 fanout 型別的交換機,命名為 fanout-exchange
接著宣告幾個佇列
預設佇列繫結的都是預設的交換機,手動繫結 fanout-exchange 交換機
當然也可以直接在交換機中進行繫結
可以看到 queue2 已經繫結上了
為了演示效果,這個再建立一個繫結預設交換機的佇列 queue3,接著在 fanout-exchange 交換機中釋出訊息
可以看到只有繫結了 fanout-exchange 交換機的佇列收到了訊息
- 4、路由模式
有 routing-key 的匹配模式
建立 direct 型別的路由
繫結佇列,指定路由 key
下面模擬傳送訊息
可以看到只有佇列一多了一條訊息
- 5、主體 Topic 模式
模糊的 routing-key 的匹配模式
建立 topic 型別的交換機
繫結佇列
說明:#
表示0個或多個或多級,*
表示1個或者多個,但是隻有一級
測試:傳送如下訊息,可以看到只有 queue1 收到了訊息
傳送如下訊息,只有 queue1 和 queue3可以收到,queue2 前面符合,但是後面不符合,*
只能有一級
- 6、引數模式
引數匹配模式
建立一個 headers 型別的交換機
繫結 queue1,新增引數為 x=1
測試:給引數匹配是 x=1 的佇列傳送訊息,只有 queue1 收到了訊息
本作品採用《CC 協議》,轉載必須註明作者和本文連結