RabbitMQ的幾種交換器 區別和特點

2021-09-26 03:03:19 字數 2397 閱讀 9472

簡介:

rabbitmq中,所有生產者提交的訊息都由exchange來接受,然後exchange按照特定的策略**到queue進行儲存

rabbitmq提供了四種exchange:fanout,direct,topic,header

header模式在實際使用中較少,本文只對前三種模式進行比較,除了其匹配規則是匹配header中的引數外,其餘的和direct很相似,但是效能相差甚遠。

一.direct exchange

任何傳送到direct exchange的訊息都會被**到routekey中指定的queue。

一般情況可以使用rabbitmq自帶的exchange:」」(該exchange的名字為空字串,下文稱其為default exchange)。

這種模式下不需要將exchange進行任何繫結(binding)操作

訊息傳遞時需要乙個「routekey」,可以簡單的理解為要傳送到的佇列名字。

如果vhost中不存在routekey中指定的佇列名,則該訊息會被拋棄。

一些說明:實現 指定型別的訊息只能被部分佇列消費, 我們可以通過direct的routingkey 在繫結交換機和佇列的時候 指定訊息傳遞的路徑;

相較於topic-exchange ,direct-exchange有乙個缺點:routingkey 路由 只能完全匹配;

二.fanout exchange

任何傳送到fanout exchange的訊息都會被**到與該exchange繫結(binding)的所有queue上。

可以理解為路由表的模式

這種模式不需要routekey

這種模式需要提前將exchange與queue進行繫結,乙個exchange可以繫結多個queue,乙個queue可以同多個exchange進行繫結。

如果接受到訊息的exchange沒有與任何queue繫結,則訊息會被拋棄。

一些說明:可以有多個消費者,但是只有乙個消費者可以消費成功;

扇形交換器,無腦的廣播訊息給所有與之繫結的佇列;

宣告乙個交換機,其中倆引數說明:

(1)durable:是否持久化,如果true,則當前rabbitmq重啟的時候,它依舊存在

(2)autodelete:當沒有生成者/消費者使用此交換機時,此交換機會被自動刪除。

宣告**:

// 宣告乙個fanout交換機

channel.exchangedeclare(exchange_name,builtinexchangetype.fanout, false, false, null);

// 傳送訊息

channel.basicpublish(exchange_name, "", null, message.getbytes("utf-8"));

扇形交換機的訊息傳遞是 只要繫結了這個交換機 就可以消費訊息,所以routingkey沒有用;

三.topic exchange

任何傳送到topic exchange的訊息都會被**到所有關心routekey中指定話題的queue上

這種模式較為複雜,簡單來說,就是每個佇列都有其關心的主題,所有的訊息都帶有乙個「標題」(routekey),exchange會將訊息**到所有關注主題能與routekey模糊匹配的佇列。

這種模式需要routekey,也許要提前繫結exchange與queue。

在進行繫結時,要提供乙個該佇列關心的主題,如「#.log.#」表示該佇列關心所有涉及log的訊息(乙個routekey為」mq.log.error」的訊息會被**到該佇列)。

「#」表示0個或若干個關鍵字,「」表示乙個關鍵字。如「log.」能與「log.warn」匹配,無法與「log.warn.timeout」匹配;但是「log.#」能與上述兩者匹配。

一些說明:路由鍵中特殊匹配字元說明

(1)*(星號)可以代替乙個字。

(2)#(雜湊)可以代替零個或多個單詞。

路由鍵條件:

(1)必須由英文本元組成,使用「.」號隔開;

(2)路由鍵的長度 最長255位元組;

5.同樣,如果exchange沒有發現能夠與routekey匹配的queue,則會拋棄此訊息。

RabbitMq交換器和佇列

注 生產者和消費者都可以宣告乙個交換器。如果嘗試宣告乙個已經存在的交換器或者佇列,只要宣告的引數完全匹配現存的交換器或佇列,rabbitmq就可以宣告都不做,並成功返回。如果宣告的引數不匹配則會丟擲異常。exchangedeclare exchange 交換器 type 交換器的型別,常見的如fan...

RabbitMQ之Direct交換器模式開發

dirtct交換器,即發布與訂閱模式,匹配規則為完全匹配。配置檔案 2 spring.rabbitmq.host 192.168.50.30 3 spring.rabbitmq.port 5672 4 spring.rabbitmq.username rabbit 5 spring.rabbitmq...

訊息佇列Rabbitmq的交換器型別

在rabbitmq中,生產者的訊息都是通過交換器來接收,然後再從交換器分發到不同的佇列中去,在分發的過程中交換器型別會影響分發的邏輯。rabitmq中的交換器有4種型別,分別為fanout direct topic headers四種,其中前三種較為常見,後面一種用的比較少。一般情況下交換器分發會先...