RabbitMQ入門教程 路由(Routing)

2022-02-26 14:03:04 字數 2935 閱讀 4418

繫結( 

bindings

)之前的文章中我們已經建立過bindings,**如下:

channel.queuebind(queue: queuename, exchange: exchange_name, routingkey: routing_key, arguments: null);

繫結(bindings)是指交換機(exchange)與佇列(queue)之間的關係。可以簡單的理解為:佇列(queue)對所繫結的交換機(exchange)上的訊息感興趣,交換機(exchange)要把它接收到的訊息推送到佇列(queue)中。

繫結的時候需要帶上乙個額外的引數routingkey,為避免與

basicpublish中的路由鍵(routing key)引數混淆,我們稱之為繫結鍵(binding key),以下是如何建立乙個繫結。

channel.queuebind(queue: queue, exchange: exchange_name, routingkey: "error", arguments: null);

注意:直連交換機(direct exchange)

在之前的發布訂閱中我們已經講到直連交換機,我們了解到直連交換機的工作方式為——交換機(exchange)會對繫結鍵(binding key)與 路由鍵(routing key)進行精確匹配,然後將訊息傳送到能夠匹配成功的佇列中。

下圖能夠很好的描述整個場景:

在這個場景中,可以看出直連交換機x和佇列(q1與q2)進行了繫結。q1佇列使用orange為繫結鍵(binding key),q2有兩個繫結,分別以black和green作為繫結鍵(binding key)。

這樣以來,當路由鍵為orange的訊息傳送到交換機,就會被路由到佇列q1,路由鍵為black和green的下拍戲就會被路由到q2,其它的訊息將會被丟棄。

多重繫結(multiple bindings)

多重繫結即使用乙個繫結鍵(binding key)繫結到多個佇列,這是完全合法的,而且每個佇列都能得到完全相同的資訊。

示例接下來我們就使用direct exchange完善之前的日誌功能

1.日誌級別為error的日誌儲存的到txt檔案中

2.日誌級別為log的日誌輸出到控制台面板

3.輸出所有的日誌到控制台面板

生產者 

routingproducer.cs

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.threading.tasks;

using rabbitmq.client;

using system.threading;

namespace rabbitmqproducer

;public static void send()

;using (iconnection connection = factory.createconnection())

——日誌等級:

";//

傳送訊息至之前建立的交換機,並設定路由鍵為

日誌級別

channel.basicpublish(exchange: exchange_name, routingkey: level, basicproperties: null, body: encoding.utf8.getbytes(message));

console.writeline(message);

}console.writeline(" press [enter] to exit.");

console.readline();}}

}private static string getlevels()}}

消費者 

routingconsumer.cs

using

rabbitmq.client;

using

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

using

system.threading.tasks;

using

rabbitmq.client.events;

using

system.io;

namespace

rabbitmqconsumer

;using

(var

connection = factory.createconnection())

eventingbasicconsumer

consumer =

neweventingbasicconsumer(channel);

consumer.received += (sender, e) =>

");};

channel.basicconsume(queuename, noack:

true, consumer: consumer);

console.writeline(" press [enter] to exit.");

console.readline();}}

}public

static

void

error()

;using

(iconnection

connection = factory.createconnection())

};channel.basicconsume(queue: queuename, noack:

true, consumer: consumer);}}}}}

RabbitMQ入門教程

摘要 使用rabbitmq的訊息佇列,可以有效提高系統的峰值處理能力。rabbitmq是訊息 message broker 它支援多種非同步訊息處理方式,最常見的有 rabbitmq還支援routing topics 以及remote procedure calls rpc 等方式。對於不同的訊息處...

RabbitMQ入門教程 二 簡介和基本概念

rabbitmq是乙個開源的amqp實現,伺服器端用erlang語言編寫,支援多種客戶端。用於在分布式系統中儲存 訊息,在易用性 擴充套件性 高可用性等方面表現不俗,訊息佇列是一種應用系統之間的通訊方法,是通過讀寫出入佇列的訊息來通訊 rpc則是通過直接呼叫彼此來通訊的 amqp advanced ...

CSS入門教程

css是 cascading style sheets 的簡稱,中文翻譯為 串接樣式表 也有人翻譯為 樣式表 css用以作為網頁的排版和風格設計,在web標準建站中,對css的熟悉和使用是相當重要的乙個內容。css的作用是彌補html的不足,讓網頁的設計更為靈活。這個文章只是為您介紹css的基礎應用...