receivetopicone 匹配規則1
//宣告交換器和佇列
channel.exchangedeclare(exchange_name, "topic");
string queuename = channel.queuedeclare().getqueue();
//路由關鍵字規則
string routingkeys = new
string;
//繫結路由關鍵字
for (string bindingkey : routingkeys)
receivetopictwo 匹配規則2
//宣告交換器和佇列
channel.exchangedeclare(exchange_name, "topic");
string queuename = channel.queuedeclare().getqueue();
//路由關鍵字規則
string routingkeys = new
string;
//繫結路由關鍵字
for (string bindingkey : routingkeys)
topicsend 傳送
channel.exchangedeclare(exchange_name, "topic");
//待傳送資訊
string routingkeys = new
string;
for (string bindingkey : routingkeys)
用三個關鍵字來繫結,q1繫結關鍵字是【.orange.】,q2繫結關鍵字是【..rabbit】和【lazy.#】,然後分析會發生什麼:
q1會收到所有orange這種顏色相關的訊息
q2會收到所有rabbit這個動物相關的訊息和所有速度lazy的動物的訊息
分析:生產者傳送「quick.orange.rabbit」的訊息,兩個佇列都會收到
生產者傳送「lazy.orange.elephant」,兩佇列也都會收到。
生產者傳送」quick.orange.fox」,那麼只有q1會收到。
生產者傳送」lazy.brown.fox」,那麼只會有q2能收到。
生產者傳送」quick.brown.fox」,那麼這條訊息會被丟棄,誰也收不到。
生產者傳送」quick.orange.male.rabbit」,這個訊息也會被丟棄,誰也收不到。
生產者傳送」lazy.orange.male.rabbit」,這個訊息會被q2的【lazy.#】規則匹配上,傳送到q2佇列中。
注意交換器在匹配模式下:
如果消費者端的路由關鍵字只使用【#】來匹配訊息,在匹配【topic】模式下,它會變成乙個分發【fanout】模式,接收所有訊息。
如果消費者端的路由關鍵字中沒有【#】或者【*】,它就變成直連【direct】模式來工作。
RabbitMQ學習筆記(五) Topic
direct exchange幫助我們解決了分類發布與訂閱訊息的問題,但是direct exchange的問題是,它所使用的routingkey是乙個簡單字串,這決定了它只能按照乙個條件進行分類。比如rabbitmq學習筆記 四 routing中的列子,我們是按照新聞的型別分類的,分為game,sp...
rabbitmq學習筆記一
首先我們先看rabbitmq原理圖 exchange交換器 接受訊息和路由訊息,然後將訊息傳送給訊息佇列。對於每乙個虛擬主機內部,交換器有獨一無二的名字 應用程式在其許可權範圍之內可以自由建立 共享 使用和銷毀交換例項。持久交換器可以使持久的 臨時的 或者自動刪除的。持久直到顯式刪除時消失 臨時交換...
RabbitMQ學習筆記1
博主從事網路程式設計3年了,但是說來慚愧的是,工作中沒有使用過訊息佇列。所以呢,打算從今天開始系統學習一些訊息佇列相關的知識,部落格也就作為筆記了。記錄一下自己的一些理解過程,有不對之處希望各位指出。生產者 消費者與訊息佇列 首先呢,訊息佇列不生產資料,他只是乙個資訊的搬運工具。資料由生產者提供,經...