繫結(
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的基礎應用...