RabbitMQ Exchange型別詳解

2021-10-25 14:20:46 字數 2727 閱讀 1702

但在具體的使用中,我們還需知道exchange的型別,因為不同的型別對應不同的佇列和路由規則。

在rabbitmq中,exchange有4個型別:direct,topic,fanout,header。

此型別的exchange路由規則很簡單:

exchange在和queue進行binding時會設定routingkey

channel.queuebind(queue: "create_pdf_queue",

exchange: "pdf_events",

routingkey: "pdf_create",

arguments: null);

然後我們在將訊息傳送到exchange時會設定對應的routingkey

channel.basicpublish(exchange: "pdf_events",

routingkey: "pdf_create",

basicproperties: properties,

body: body);

在direct型別的exchange中,只有這兩個routingkey完全相同,exchange才會選擇對應的binging進行訊息路由。

具體的流程如下:

通過**可以會理解好一點:

var factory = new connectionfactory() ;

using (var connection = factory.createconnection())

using (var channel = connection.createmodel())

此型別exchange和上面的direct型別差不多,但direct型別要求routingkey完全相等,這裡的routingkey可以有萬用字元:'*','#'.

其中'*'表示匹配乙個單詞, '#'則表示匹配沒有或者多個單詞

如上圖第乙個binding:

第二個binding: 

第三個binding:

所以如果我們訊息的routingkey為agreements.eu.berlin那麼符合第一和第二個binding,但最後乙個不符合,具體的**如下:

var factory = new connectionfactory() ;

using (var connection = factory.createconnection())

using (var channel = connection.createmodel())

此exchange的路由規則很簡單直接將訊息路由到所有繫結的佇列中,無須對訊息的routingkey進行匹配操作。

此型別的exchange和以上三個都不一樣,其路由的規則是根據header來判斷,其中的header就是以下方法的arguments引數:

dictionaryaheader = new dictionary();

aheader.add("format", "pdf");

aheader.add("type", "report");

aheader.add("x-match", "all");

channel.queuebind(queue: "queue.a",

exchange: "agreements",

routingkey: string.empty,

arguments: aheader);

其中的x-match為特殊的header,可以為all則表示要匹配所有的header,如果為any則表示只要匹配其中的乙個header即可。

在發布訊息的時候就需要傳入header值:

var properties = channel.createbasicproperties();

properties.persistent = true;

dictionarymheader1 = new dictionary();

mheader1.add("format", "pdf");

mheader1.add("type", "report");

properties.headers = mheader1;

具體的規則可以看以下**:

var factory = new connectionfactory() ;

using (var connection = factory.createconnection())

using (var channel = connection.createmodel())

以上就是exchange 型別的總結,一般來說direct和topic用來具體的路由訊息,如果要用廣播的訊息一般用fanout的exchange。

header型別用的比較少,但還是知道一點好。

RabbitMQ Exchange型別詳解

但在具體的使用中,我們還需知道exchange的型別,因為不同的型別對應不同的佇列和路由規則。在rabbitmq中,exchange有4個型別 direct,topic,fanout,header。此型別的exchange路由規則很簡單 exchange在和queue進行binding時會設定rou...

rabbitmq Exchange四種模式

rabbitmq 是 amqp 高階訊息佇列協議 的標準實現 從 amqp 協議可以看出,queue exchange 和 binding 構成了 amqp 協議的核心 consumer 訊息消費者,即接受訊息的程式。rabbitmq常用的exchange type有fanout direct to...

c 值型別和引用型別詳析

1.主要內容 型別的基本概念 值型別深入 引用型別深入 值型別與引用型別的比較及應用 2.基本概念 c 中,變數是值還是引用僅取決於其資料型別。c 的基本資料型別都以平台無關的方式來定義,c 的預定義型別並沒有內置於語言中,而是內置於.net framework中。net使用通用型別系統 cts 定...