RabbitMq交換機類型介紹

RabbitMq交換機類型介紹

在RabbitMq中,生產者的消息都是通過交換器來接收,然后再從交換器分發到不同的隊列,再由消費者從隊列獲取消息。這種模式也被成為“發布/訂閱”。

分發的過程中交換器類型會影響分發的邏輯。

  • 直連交換機:Direct exchange
  • 扇形交換機:Fanout exchange
  • 主題交換機:Topic exchange
  • 首部交換機:Headers exchange

1 DirectExchange(直連交換機)

? 直連交換機是一種帶路由功能的交換機,交換機會通過路由(Routing_key)和指定隊列進行綁定。在創建的時候會創建一個路由,和一個綁定關系,路由和綁定關系相互對應。

? 發送消息時會指定exchange和routing_key,所有通過該routing_key和exchange綁定的隊列都會收到同樣的消息。

在這里插入圖片描述

測試實例在https://blog.csdn.net/qq_43331014/article/details/132255631文章中作為例子詳細講解過了。

2 Topic exchange(主題交換機)

? 在RabbitMq中,生產者的消息都是通過交換機來接收,然后再從交換機分發到不同的隊列中去,在分發的過程中交換機類型會影響分發的邏輯,下面主要講解一下主題交換機。

? 主題交換機核心是可以以范圍的行為向隊列發送消息,它和直連交換機區別在于,直連交換機一個隊列通過一個binding_key和交換機的進行綁定,只能接受一中消息;主題交換機可以按照一定的匹配規則去匹配多個routing_key

那匹配規則是什么?

交換機和隊列的binding_key需要采用*.#.*.....的格式,每個單詞用.作為分隔符,其中:

  • *表示一個單詞(必須出現的)
  • ##(井號)用來表示任意數量單詞(零個或多個)

例如:假設有一條消息的routing_keytopic.china.shanghai,另一條為topic.china,那么binding_keytopic.#的隊列這兩條消息都會收到

通配符功能示例
\*匹配一個單詞topic.* 可以匹配到 topic.china 或者 topic.shanghai
#匹配零個或多個單詞topic.# 可以匹配到 topic.china或者 topic.china.beijing

通俗理解:

? 主題交換機的流程,相當于報紙訂閱。有一個總報社(相當于生產者)發出各種類型的報紙到各個分報社,分報社相當于不同的交換機,每種類型報紙相當于不同的routing_key,再往下有賣報點去分報社去報紙,但每個賣報點根據消費者的需求所需要的類型不一樣。比如一個分報社手里有兩種類型的報紙:新聞.經濟新聞.體育。這時三個賣報點來取報紙,賣家A只需要新聞經濟類,那他跟交換機的binding_key就是新聞.經濟;賣家B只需要新聞體育類,那他的binding_key就是新聞.體育;而賣家C這很多消費者都在他這買報紙,他既需要新聞經濟類又需要新聞體育類,他的binding_key相當于是新聞.#,新聞下面的都收。

? 而直連交換機是什么,相當于更小的分銷商,針對更精確的人群。他不能像上面那種情況把新聞下所有類都收了,只能一對一的關系,有人需要新聞.經濟就綁定上,只去收新聞.經濟報,不能多拿,再有人需要新聞.體育才能再收體育報。

下面通過代碼演示下主題交換機

  • 創建交換機、隊列、綁定關系

    @Configuration
    public class TopicRabbitConfig {@Beanpublic Queue firstQueue(){return new Queue("topic.shanghai",true,false,false);}@Beanpublic Queue secondQueue(){return new Queue("topic.beijing",true,false,false);}@Beanpublic Queue thirdQueue(){return new Queue("topic.china.beijing",true,false,false);}@Beanpublic TopicExchange topicExchange(){return new TopicExchange("topicExchange",true,false);}/*** 交換機和隊列綁定,并設置綁定key*/@BeanBinding firstBinding(){return BindingBuilder.bind(firstQueue()).to(topicExchange()).with("topic.shanghai");}@BeanBinding secondBinding(){//只要是消息攜帶的路由鍵是以topic.開頭,后面還更有一個單詞的都會分發到該隊列return BindingBuilder.bind(secondQueue()).to(topicExchange()).with("topic.*");}@BeanBinding thirdBinding(){//只要是消息攜帶的路由鍵是以topic.開頭,都會分發到該隊列return BindingBuilder.bind(thirdQueue()).to(topicExchange()).with("topic.#");}
    }
    

    可以看到已經創建成功
    在這里插入圖片描述
    在這里插入圖片描述

  • 分別給交換機按三個不同routing_key發送消息,對應的routing_key分別為:topic.shanghaitopic.haha.hehetopic.test

    @PostMapping("/sendMessageByTopic")
    public AjaxResult sendMessageByTopic(@RequestBody Map params) {String id = UUID.randomUUID().toString();String createTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));params.put("messageId",id);params.put("createTime",createTime);/*** 發給交換機,通過匹配隊列和交換機綁定關系值,判斷發送給哪個隊列*/rabbitTemplate.convertAndSend("topicExchange","topic.shanghai",params);rabbitTemplate.convertAndSend("topicExchange","topic.haha.hehe",params);rabbitTemplate.convertAndSend("topicExchange","topic.test",params);return AjaxResult.success("成功");
    }
    

    三個隊列分別對應的匹配規則及接受到消息的結果如圖:
    在這里插入圖片描述

    可以看到topic.shanghai隊列只能匹配一條,topic.china.beijing隊列因為binding_key是topic.#所以全部匹配,topic.beijing隊列因為binding_key是topic.*,所以匹配了topic后面只跟一個單詞的。

監聽就不細說了,跟交換機類型關系不大,主要根據隊列名稱去監聽,實例可以看https://blog.csdn.net/qq_43331014/article/details/132255631第六節

3 Fanout exchange(扇形交換機)

扇形交換機廣播消息,會將接到的消息發送到每一個與其綁定的隊列中去。

不需要管綁定的binding_key是什么

在這里插入圖片描述

在編寫發送消息代碼時,不需要填寫routing_key

/***廣播交換機* @return* @throws InterruptedException*/
@PostMapping("/sendMessageByFanout")
public AjaxResult sendMessageByFanout(@RequestBody Map params) {String id = UUID.randomUUID().toString();String createTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));params.put("messageId",id);params.put("createTime",createTime);/*** 扇形交換機,不需要指定路由,會廣播給每一個綁定的隊列*/rabbitTemplate.convertAndSend("fanoutExchange","",params);return AjaxResult.success("成功");
}

4 Headers exchange(首部交換機)

? 與routingKey無關,匹配機制是匹配消息頭中的屬性信息。在綁定消息隊列與交換機之前聲明一個map鍵值對,通過這個map對象實現消息隊列和交換機的綁定。當消息發送到RabbitMQ時會取到該消息的headers與Exchange綁定時指定的鍵值對進行匹配;如果完全匹配則消息會路由到該隊列,否則不會路由到該隊列。

匹配規則x-match有下列兩種類型:

x-match = all :表示所有的鍵值對都匹配才能接受到消息

x-match = any :表示只要有鍵值對匹配就能接受到消息

種交換器類型在性能上相對來說較差,在實際工作中很少會用到。
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/43045.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/43045.shtml
英文地址,請注明出處:http://en.pswp.cn/news/43045.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【計算機視覺|生成對抗】逐步增長的生成對抗網絡(GAN)以提升質量、穩定性和變化

本系列博文為深度學習/計算機視覺論文筆記,轉載請注明出處 標題:Progressive Growing of GANs for Improved Quality, Stability, and Variation 鏈接:[1710.10196] Progressive Growing of GANs for Improved Quality, Stability, and Vari…

神經網絡基礎-神經網絡補充概念-51-局部最優問題

概念 局部最優問題是在優化問題中常見的一個挑戰,特別是在高維、非凸、非線性問題中。局部最優問題指的是算法在優化過程中陷入了一個局部最小值點,而不是全局最小值點。這會導致優化算法在某個局部區域停止,而無法找到更好的解。 解決方案…

安防監控視頻云存儲平臺EasyNVR出現內核報錯的情況該如何解決?

安防視頻監控匯聚EasyNVR視頻集中存儲平臺,是基于RTSP/Onvif協議的安防視頻平臺,可支持將接入的視頻流進行全平臺、全終端分發,分發的視頻流包括RTSP、RTMP、HTTP-FLV、WS-FLV、HLS、WebRTC等格式。 近期有用戶聯系到我們,EasyNVR…

kafka集成篇

kafka的Java客戶端 生產者 1.引入依賴 <dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId><version>2.6.3</version></dependency>2.生產者發送消息的基本實現 /*** 消息的發送?*/ …

SAP 預留(Reservation)詳解

相信使用SAP的話&#xff0c;對SAP的SAP預留(Reservation)已經有所了解&#xff0c;而且經常使用作業的&#xff0c;并且在很多方案中都使用得到&#xff0c;下面我就簡單總結下我所了解的SAP預留(Reservation)&#xff0c;希望對一些需要幫助的人&#xff0c;有所指點。 首先…

分類預測 | MATLAB實現DRN深度殘差網絡多輸入分類預測

分類預測 | MATLAB實現DRN深度殘差網絡多輸入分類預測 目錄 分類預測 | MATLAB實現DRN深度殘差網絡多輸入分類預測預測效果基本介紹程序設計參考資料 預測效果 基本介紹 1.分類預測 | MATLAB實現DRN深度殘差網絡多輸入分類預測 2.代碼說明&#xff1a;MATLAB實現DRN深度殘差網絡…

LVS集群和nginx負載均衡

目錄 1、基于 CentOS 7 構建 LVS-DR 群集。 2、配置nginx負載均衡。 1、基于 CentOS 7 構建 LVS-DR 群集。 1.部署LVS負載調度器 1>安裝配置工具 [rootnode6 ~]# yum install -y ipvsadm 2>配置LVS虛擬IP&#xff08;VIP地址&#xff09; [rootnode6 ~]# ifconfig ens…

32.Netty源碼之服務端如何處理客戶端新建連接

highlight: arduino-light 服務端如何處理客戶端新建連接 Netty 服務端完全啟動后&#xff0c;就可以對外工作了。接下來 Netty 服務端是如何處理客戶端新建連接的呢&#xff1f; 主要分為四步&#xff1a; md Boss NioEventLoop 線程輪詢客戶端新連接 OP_ACCEPT 事件&#xff…

VB+SQL自動點歌系統設計與實現

摘 要 隨著社會的發展,人類的進步,21世紀人們的生活的水平有所提高,為了滿足人們對生活的需要,豐富業余生活,就需要有一些娛樂的設施來彌補這些空缺,所以開發了自動點歌系統。 論文詳細論述了系統總體設計思想、數據庫設計以及功能模塊設計等,給出了自動點歌系統一般流程…

算法與數據結構(七)--堆

一.堆 1.堆的定義 堆是計算機科學中一類特殊的數據結構的通常&#xff0c;堆通常可以被看做是一顆完全二叉樹的數組對象。 堆的特性 1.它是完全二叉樹&#xff0c;除了樹的最后一層結點不需要是滿的&#xff0c;其他的每一層從左到右都是滿的&#xff0c;如果最后一層結點不…

管理類聯考——邏輯——真題篇——按知識分類——匯總篇——二、論證邏輯——支持加強——第三節——分類3——類比題干支持

文章目錄 第三節 支持加強-分類3-類比題干支持真題(2017-28)-支持加強-正面支持-表達“確實如此”真題(2017-36)-支持加強-正面支持-表達“確實如此”真題(2017-39)-支持加強-正面支持-方法有效或方法可行,但多半不選擇方法無惡果真題(2017-50)-支持加強真題(2018-2…

linux 文件權限識別及其修改

一、文件權限認識 在 Linux 系統中&#xff0c;一切皆文件&#xff0c;目錄也是一種文件形式叫目錄文件&#xff0c;它們的屬性主要包含&#xff1a;索引節點(inode)&#xff0c;類型、權限屬性、鏈接數、所歸屬的用戶和用戶組、最近修改時間等內容。 如下為根目錄下目錄&…

華創云鼎面試:java后端開發

華創云鼎面試: 1、項目:項目業務介紹、項目人員組成 2、分布式鎖用過哪些 基于數據庫的鎖&#xff1a;可以使用關系型數據庫的事務和行級鎖來實現分布式鎖。通過在數據庫中創建一個標志位或特定的鎖表來表示資源的鎖定狀態&#xff0c;其他進程在訪問該資源之前需要先獲取該鎖…

尋路算法(Java 實例代碼源碼包下載)

目錄 尋路算法 Java 實例代碼 src/runoob/graph/Path.java 文件代碼&#xff1a; 尋路算法 圖的尋路算法也可以通過深度優先遍歷 dfs 實現&#xff0c;尋找圖 graph 從起始 s 點到其他點的路徑&#xff0c;在上一小節的實現類中添加全局變量 from數組記錄路徑&#xff0c;fr…

8月18日,每日信息差

1、中國空間站收獲階段性應用成果。?截至目前&#xff0c;空間站已安排在軌實施了110個空間科學研究與應用項目&#xff0c;涉及空間生命科學與人體研究、微重力物理和空間新技術領域&#xff0c;獲得原始實驗數據近100TB&#xff0c;下行了近300個實驗樣品&#xff0c;部分項…

改進YOLO系列:3.添加SOCA注意力機制

添加SOCA注意力機制 1. SOCA注意力機制論文2. SOCA注意力機制原理3. SOCA注意力機制的配置3.1common.py配置3.2yolo.py配置3.3yaml文件配置1. SOCA注意力機制論文 暫未找到 2. SOCA注意力機制原理 3. SOCA注意力機制的配置 3.1common.py配置 ./models/common.p…

Linux 網絡發包流程

哈嘍大家好&#xff0c;我是咸魚 之前咸魚在《Linux 網絡收包流程》一文中介紹了 Linux 是如何實現網絡接收數據包的 簡單回顧一下&#xff1a; 數據到達網卡之后&#xff0c;網卡通過 DMA 將數據放到內存分配好的一塊 ring buffer 中&#xff0c;然后觸發硬中斷CPU 收到硬中…

Lnton羚通關于Optimization在【PyTorch】中的基礎知識

OPTIMIZING MODEL PARAMETERS &#xff08;模型參數優化&#xff09; 現在我們有了模型和數據&#xff0c;是時候通過優化數據上的參數來訓練了&#xff0c;驗證和測試我們的模型。訓練一個模型是一個迭代的過程&#xff0c;在每次迭代中&#xff0c;模型會對輸出進行猜測&…

python3 0基礎學習----數據結構(基礎+練習)

python 0基礎學習筆記之數據結構 &#x1f4da; 幾種常見數據結構列表 &#xff08;List&#xff09;1. 定義2. 實例&#xff1a;3. 列表中常用方法.append(要添加內容) 向列表末尾添加數據.extend(列表) 將可迭代對象逐個添加到列表中.insert(索引&#xff0c;插入內容) 向指定…

8.17校招 內推 面經

綠泡泡&#xff1a; neituijunsir 交流裙&#xff0c;內推/實習/校招匯總表格 1、校招 | 騰訊2024校園招聘全面啟動(內推) 校招 | 騰訊2024校園招聘全面啟動(內推) 2、校招 | 大華股份2024屆全球校園招聘正式啟動(內推) 校招 | 大華股份2024屆全球校園招聘正式啟動(內推) …