RabbitMq學習筆記(五) Topic

2021-07-27 22:54:05 字數 1518 閱讀 5015

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年了,但是說來慚愧的是,工作中沒有使用過訊息佇列。所以呢,打算從今天開始系統學習一些訊息佇列相關的知識,部落格也就作為筆記了。記錄一下自己的一些理解過程,有不對之處希望各位指出。生產者 消費者與訊息佇列 首先呢,訊息佇列不生產資料,他只是乙個資訊的搬運工具。資料由生產者提供,經...