RabbitMQ 元件和架構

HuDu發表於2021-05-21

RabbitMQ 元件和架構

所有的訊息都是通過 Exchange 交換機來投遞給 Queue 佇列的,如果有 RoutingKey,通過路由key來進行篩選,通過 bindings 和 Queue 進行繫結。Broker 就相當於是一個節點,例如在本機安裝了一個 RabbitMQ 服務,那麼本機就是一個 Broker,Virture Host 虛擬機器節點就相當於目錄,主要使用者隔離和區分,可以在 頁面中的 Virtual Hosts 中進行新增。

RabbitMQ 元件和架構

核心概念

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 執行流程

RabbitMQ 元件和架構

RabbitMQ 支援訊息的模式

  • 1、簡單模式

RabbitMQ 元件和架構

RabbitMQ 元件和架構

RabbitMQ 元件和架構

  • 2、工作模式 Work
分發機制

RabbitMQ 元件和架構

所有的訊息都是通過 Exchange 傳送到佇列的

  • 3、釋出訂閱模式
Fanout——釋出與訂閱模式,是一種廣播機制,它是沒有路由key的模式

RabbitMQ 元件和架構

首先建立一個 fanout 型別的交換機,命名為 fanout-exchange
RabbitMQ 元件和架構

接著宣告幾個佇列

RabbitMQ 元件和架構
預設佇列繫結的都是預設的交換機,手動繫結 fanout-exchange 交換機

RabbitMQ 元件和架構

RabbitMQ 元件和架構

當然也可以直接在交換機中進行繫結

RabbitMQ 元件和架構

可以看到 queue2 已經繫結上了

RabbitMQ 元件和架構

為了演示效果,這個再建立一個繫結預設交換機的佇列 queue3,接著在 fanout-exchange 交換機中釋出訊息

RabbitMQ 元件和架構

可以看到只有繫結了 fanout-exchange 交換機的佇列收到了訊息
RabbitMQ 元件和架構

  • 4、路由模式
有 routing-key 的匹配模式

RabbitMQ 元件和架構

建立 direct 型別的路由

RabbitMQ 元件和架構

繫結佇列,指定路由 key

RabbitMQ 元件和架構

RabbitMQ 元件和架構

下面模擬傳送訊息

RabbitMQ 元件和架構

可以看到只有佇列一多了一條訊息

RabbitMQ 元件和架構

  • 5、主體 Topic 模式
模糊的 routing-key 的匹配模式

RabbitMQ 元件和架構

建立 topic 型別的交換機

RabbitMQ 元件和架構

繫結佇列

RabbitMQ 元件和架構

RabbitMQ 元件和架構

說明:#表示0個或多個或多級,*表示1個或者多個,但是隻有一級

測試:傳送如下訊息,可以看到只有 queue1 收到了訊息

RabbitMQ 元件和架構

傳送如下訊息,只有 queue1 和 queue3可以收到,queue2 前面符合,但是後面不符合,*只能有一級

RabbitMQ 元件和架構

  • 6、引數模式
引數匹配模式

建立一個 headers 型別的交換機

RabbitMQ 元件和架構

繫結 queue1,新增引數為 x=1

RabbitMQ 元件和架構

測試:給引數匹配是 x=1 的佇列傳送訊息,只有 queue1 收到了訊息

RabbitMQ 元件和架構

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章