簡介:
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 在繫結交換機和佇列的時候 指定訊息傳遞的路徑;二.fanout exchange相較於topic-exchange ,direct-exchange有乙個缺點:routingkey 路由 只能完全匹配;
任何傳送到fanout exchange的訊息都會被**到與該exchange繫結(binding)的所有queue上。
可以理解為路由表的模式
這種模式不需要routekey
這種模式需要提前將exchange與queue進行繫結,乙個exchange可以繫結多個queue,乙個queue可以同多個exchange進行繫結。
如果接受到訊息的exchange沒有與任何queue繫結,則訊息會被拋棄。
一些說明:可以有多個消費者,但是只有乙個消費者可以消費成功;三.topic exchange扇形交換器,無腦的廣播訊息給所有與之繫結的佇列;
宣告乙個交換機,其中倆引數說明:
(1)durable:是否持久化,如果true,則當前rabbitmq重啟的時候,它依舊存在
(2)autodelete:當沒有生成者/消費者使用此交換機時,此交換機會被自動刪除。
宣告**:
扇形交換機的訊息傳遞是 只要繫結了這個交換機 就可以消費訊息,所以routingkey沒有用;// 宣告乙個fanout交換機
channel.exchangedeclare(exchange_name,builtinexchangetype.fanout, false, false, null);
// 傳送訊息
channel.basicpublish(exchange_name, "", null, message.getbytes("utf-8"));
任何傳送到topic exchange的訊息都會被**到所有關心routekey中指定話題的queue上
這種模式較為複雜,簡單來說,就是每個佇列都有其關心的主題,所有的訊息都帶有乙個「標題」(routekey),exchange會將訊息**到所有關注主題能與routekey模糊匹配的佇列。
這種模式需要routekey,也許要提前繫結exchange與queue。
在進行繫結時,要提供乙個該佇列關心的主題,如「#.log.#」表示該佇列關心所有涉及log的訊息(乙個routekey為」mq.log.error」的訊息會被**到該佇列)。
「#」表示0個或若干個關鍵字,「」表示乙個關鍵字。如「log.」能與「log.warn」匹配,無法與「log.warn.timeout」匹配;但是「log.#」能與上述兩者匹配。
一些說明:路由鍵中特殊匹配字元說明5.同樣,如果exchange沒有發現能夠與routekey匹配的queue,則會拋棄此訊息。(1)*(星號)可以代替乙個字。
(2)#(雜湊)可以代替零個或多個單詞。
路由鍵條件:
(1)必須由英文本元組成,使用「.」號隔開;
(2)路由鍵的長度 最長255位元組;
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四種,其中前三種較為常見,後面一種用的比較少。一般情況下交換器分發會先...