但在具體的使用中,我們還需知道exchange的型別,因為不同的型別對應不同的佇列和路由規則。
在rabbitmq中,exchange有4個型別:direct,topic,fanout,header。
此型別的exchange路由規則很簡單:
exchange在和queue進行binding時會設定routingkey
channel.queuebind(queue: "create_pdf_queue",然後我們在將訊息傳送到exchange時會設定對應的routingkey:exchange: "pdf_events",
routingkey: "pdf_create",
arguments: null);
channel.basicpublish(exchange: "pdf_events",在direct型別的exchange中,只有這兩個routingkey完全相同,exchange才會選擇對應的binging進行訊息路由。routingkey: "pdf_create",
basicproperties: properties,
body: body);
具體的流程如下:
通過**可以會理解好一點:
var factory = new connectionfactory() ;此型別exchange和上面的direct型別差不多,但direct型別要求routingkey完全相等,這裡的routingkey可以有萬用字元:'*','#'.using (var connection = factory.createconnection())
using (var channel = connection.createmodel())
其中'*'表示匹配乙個單詞, '#'則表示匹配沒有或者多個單詞
如上圖第乙個binding:
第二個binding:
第三個binding:
所以如果我們訊息的routingkey為agreements.eu.berlin那麼符合第一和第二個binding,但最後乙個不符合,具體的**如下:
var factory = new connectionfactory() ;此exchange的路由規則很簡單直接將訊息路由到所有繫結的佇列中,無須對訊息的routingkey進行匹配操作。using (var connection = factory.createconnection())
using (var channel = connection.createmodel())
此型別的exchange和以上三個都不一樣,其路由的規則是根據header來判斷,其中的header就是以下方法的arguments引數:
dictionaryaheader = new dictionary();其中的x-match為特殊的header,可以為all則表示要匹配所有的header,如果為any則表示只要匹配其中的乙個header即可。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);
在發布訊息的時候就需要傳入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() ;以上就是exchange 型別的總結,一般來說direct和topic用來具體的路由訊息,如果要用廣播的訊息一般用fanout的exchange。using (var connection = factory.createconnection())
using (var channel = connection.createmodel())
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 定...