RabbitMQ Exchange型別詳解

2022-02-06 08:04:12 字數 2929 閱讀 3096

但在具體的使用中,我們還需知道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引數:

dictionary aheader = 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

;dictionary

mheader1 = 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 定...