AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

SpringBoot整合RabbitMQ四種交換機類型詳解

來源: 責編: 時間:2023-08-14 22:01:41 340觀看
導讀環境:Spring Boot2.3.10 + RabbitMQ 3.8.12 + Erlang 23.2.51.1 RabbitMQ介紹RabbitMQ是實現了高級消息隊列協議(AMQP)的開源消息代理軟件(亦稱面向消息的中間件)。RabbitMQ服務器是用Erlang語言編寫的。所有主要的編程語

環境:Spring Boot2.3.10 + RabbitMQ 3.8.12 + Erlang 23.2.5alN28資訊網——每日最新資訊28at.com

1.1 RabbitMQ介紹

RabbitMQ是實現了高級消息隊列協議(AMQP)的開源消息代理軟件(亦稱面向消息的中間件)。RabbitMQ服務器是用Erlang語言編寫的。所有主要的編程語言均有與代理接口通訊的客戶端庫。alN28資訊網——每日最新資訊28at.com

1.2 RabbitMQ核心概念

Server:又稱Broker, 接受客戶端的連接,實現AMQP實體服務,這里指RabbitMQ 服務器alN28資訊網——每日最新資訊28at.com

Connection:連接,應用程序與Broker的網絡連接。alN28資訊網——每日最新資訊28at.com

Channel:通信通道,幾乎所有的操作都在 Channel 中進行,Channel是進行消息讀寫的通道。客戶端可建立多個Channel:,每個Channel代表一個會話任務。(一個Socket連接可以創建多個Channel)alN28資訊網——每日最新資訊28at.com

Virtual Host:虛擬主機,用于邏輯隔離,是最上層的消息路由。一個 Virtual Host 里面可以有若干個 Exchange(交換機)和 Queue(隊列)。alN28資訊網——每日最新資訊28at.com

Binding:Exchange 和 Queue 之間的虛擬綁定關系。alN28資訊網——每日最新資訊28at.com

Routing key:一 個路由規則,虛擬機可用它來確定如何路由一個特定消息,即交換機綁定到 Queue 的鍵。支持模式匹配,* 和#,*用來匹配一個單詞,#用來匹配多個單詞(可以是0個)這里的通配符只有在exchange的類型為topic才有效。alN28資訊網——每日最新資訊28at.com

Queue:也稱為Message Queue,消息隊列,保存消息并將它們轉發給消費者。(接收端通過監聽Queue來接受消息)。alN28資訊網——每日最新資訊28at.com

Message:消息,服務器和應用程序之間傳送的數據,由 Properties 和 Body 組成。Properties 可以對消息進行修飾,比如消息的優先級、延遲,過期時間,消息大小等高級特性;,Body 則就 是消息體內容。alN28資訊網——每日最新資訊28at.com

Exchange類型:如下四種類型:fanout,headers,direct,topic。alN28資訊網——每日最新資訊28at.com

圖片圖片alN28資訊網——每日最新資訊28at.com

alN28資訊網——每日最新資訊28at.com

1.3 Exchange交換機類型

  • fanout

發布/訂閱,消費發送到該種類型的交換機后會將消息發送到所有與之綁定的Queue中,不管你有沒有設置routing key。alN28資訊網——每日最新資訊28at.com

  • headers

該類型用得極少,主要就是根據設置的header來進行匹配。如下紅框中你所設置的arguments:alN28資訊網——每日最新資訊28at.com

圖片圖片alN28資訊網——每日最新資訊28at.com

alN28資訊網——每日最新資訊28at.com

  • direct

在exchange與queue進行綁定時需要設置routing key,只有發送消息的端設置的routing key與這里綁定的routingkey完全相同才會將消息發到隊列中。alN28資訊網——每日最新資訊28at.com

  • topic
exchange與queue綁定時設置的routing key支持通配符*和#,*用來匹配一個單詞,#用來匹配多個單詞(可以是0個)。

1.4 使用案例

準備環境:alN28資訊網——每日最新資訊28at.com

依賴alN28資訊網——每日最新資訊28at.com

<dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-amqp</artifactId></dependency><dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-web</artifactId></dependency>

配置文件alN28資訊網——每日最新資訊28at.com

spring:  rabbitmq:    host: localhost    port: 5672    username: admin    password: 123456    virtual-host: /    publisherConfirmType: correlated    publisherReturns: true    listener:      simple:        concurrency: 5        maxConcurrency: 10        prefetch: 5        acknowledgeMode: MANUAL        retry:          enabled: true          initialInterval: 3000          maxAttempts: 3        defaultRequeueRejected: false

1、fanout類型交換機alN28資訊網——每日最新資訊28at.com

  • 通過RabbitMQ控制臺新建fanout類型交換機:fanout-exchange

圖片圖片alN28資訊網——每日最新資訊28at.com

alN28資訊網——每日最新資訊28at.com

  • 新建隊列:fanout-queue1,fanout-queue2,fanout-queue3

圖片圖片alN28資訊網——每日最新資訊28at.com

alN28資訊網——每日最新資訊28at.com

按照上面的方式分別建立3個隊列。alN28資訊網——每日最新資訊28at.com

  • 將fanout-exchange與3個隊列(fanout-queue*)進行綁定

圖片圖片alN28資訊網——每日最新資訊28at.com

將3個隊列分別于fanout-exchange進行綁定,這里在綁定時分別設定了不同的路由key,就是為了驗證fanout類型的交換機是否與routing key有關系。alN28資訊網——每日最新資訊28at.com

  • 測試

發送接口:alN28資訊網——每日最新資訊28at.com

@RestController@RequestMapping("/messages")public class MessageController {  @Resource  private MessageSend ms ;  @GetMapping("/sendFanout")  public Object send(String msg) {    ms.send(msg) ;    return "success" ;}}@Resourceprivate RabbitTemplate rabbitTemplate ;public void send(String msg) {  logger.info("準備發送消息:{}", msg);  rabbitTemplate.convertAndSend("fanout-exchange", "rk.1.2", msg) ;}

這里故意設置了路由key 就是為了看fanout類型的交換機是否與routing key 有關系。alN28資訊網——每日最新資訊28at.com

圖片圖片alN28資訊網——每日最新資訊28at.com

3個隊列都收到了消息,說明fanout類型的交換機與綁定queue時routing key是沒有關系的,只要綁定了該類型的交換機都會收到消息。alN28資訊網——每日最新資訊28at.com

2、headers類型交換機alN28資訊網——每日最新資訊28at.com

  • 通過RabbitMQ控制臺新建headers類型交換機:headers-exchange

圖片圖片alN28資訊網——每日最新資訊28at.com

  • 新建隊列:headers-queue1,headers-queue2

圖片圖片alN28資訊網——每日最新資訊28at.com

  • 將headers-exchange與2個隊列(headers-queue*)進行綁定

圖片圖片alN28資訊網——每日最新資訊28at.com

  • 測試

發送接口alN28資訊網——每日最新資訊28at.com

@GetMapping("/sendHeaders")public Object sendHeaders(String msg) {  ms.sendHeaders(msg) ;  return "success" ;}public void sendHeaders(String msg) {  logger.info("準備發送消息:{}", msg);  Message message = MessageBuilder.withBody(msg.getBytes()).setHeader("a", "b").setHeader("pack", "xg").build() ;  rabbitTemplate.send("headers-exchange", "rk.1.2", message) ;}

注意:這里設置了Header信息與headers-exchange和headers-queue1綁定時設置的參數完全相同。alN28資訊網——每日最新資訊28at.com

圖片圖片alN28資訊網——每日最新資訊28at.com

headers-queue2就沒有收到消息。如果在進行綁定時沒有設置x-match參數默認是完全要匹配綁定時設定的參數,也就是x-match:all。如下,如果不配置x-match也就相當于:alN28資訊網——每日最新資訊28at.com

圖片圖片alN28資訊網——每日最新資訊28at.com

x-match 還有一個取值就是any,只要有任意的一個匹配上那就成功。alN28資訊網——每日最新資訊28at.com

修改headers-queue1,headers-queue2綁定的參數,如下:alN28資訊網——每日最新資訊28at.com

圖片圖片alN28資訊網——每日最新資訊28at.com

兩個參數中都加入了x-match:any 只要有任意一個參數匹配即可。alN28資訊網——每日最新資訊28at.com

再次發送消息:alN28資訊網——每日最新資訊28at.com

圖片圖片alN28資訊網——每日最新資訊28at.com

兩個隊列都收到了消息。alN28資訊網——每日最新資訊28at.com

3、direct類型交換機alN28資訊網——每日最新資訊28at.com

  • 通過RabbitMQ控制臺新建direct類型交換機:direct-exchange

圖片圖片alN28資訊網——每日最新資訊28at.com

  • 新建隊列:direct-queue1,direct-queue2

圖片圖片alN28資訊網——每日最新資訊28at.com

  • 將direct-exchange與2個隊列(direct-queue*)進行綁定

圖片圖片alN28資訊網——每日最新資訊28at.com

  • 測試

發送接口:alN28資訊網——每日最新資訊28at.com

@GetMapping("/sendDirect")public Object sendDirect(String msg) {  ms.sendDirect(msg) ;  return "success" ;}public void sendDirect(String msg) {  logger.info("準備發送消息:{}", msg);  rabbitTemplate.convertAndSend("direct-exchange", "de.m", msg) ;}

圖片alN28資訊網——每日最新資訊28at.com

2個隊列都收到了消息。alN28資訊網——每日最新資訊28at.com

4、topic類型交換機alN28資訊網——每日最新資訊28at.com

  • 通過RabbitMQ控制臺新建topic類型交換機:topic-exchange

圖片圖片alN28資訊網——每日最新資訊28at.com

  • 新建隊列:topic-queue1,topic-queue2

圖片圖片alN28資訊網——每日最新資訊28at.com

  • 將topic-exchange與2個隊列(topic-queue*)進行綁定

圖片圖片alN28資訊網——每日最新資訊28at.com

*: 只能匹配一個單詞;#:能匹配多個單詞(也可以是0個)。alN28資訊網——每日最新資訊28at.com

  • 測試

發送接口:alN28資訊網——每日最新資訊28at.com

@GetMapping("/sendTopic")public Object sendTopic(String msg) {  ms.sendTopic(msg) ;  return "success" ;}public void sendTopic(String msg) {  logger.info("準備發送消息:{}", msg);  rabbitTemplate.convertAndSend("topic-exchange", "te.1.ok", msg) ;}

圖片圖片alN28資訊網——每日最新資訊28at.com

兩個隊列都收到了消息。alN28資訊網——每日最新資訊28at.com

修改發送消息的routing keyalN28資訊網——每日最新資訊28at.com

rabbitTemplate.convertAndSend("topic-exchange", "te.2.ok", msg) ;

圖片圖片alN28資訊網——每日最新資訊28at.com

只有topic-queue2收到了消息,因為綁定時設置的routing-key 是:alN28資訊網——每日最新資訊28at.com

圖片圖片alN28資訊網——每日最新資訊28at.com

能夠匹配多個單詞。alN28資訊網——每日最新資訊28at.com

以上就介紹完了rabbitmq的四種交換機類型。alN28資訊網——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-5752-0.htmlSpringBoot整合RabbitMQ四種交換機類型詳解

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 谷歌全棧多平臺應用開發神器Project IDX來了!PaLM 2加持,代碼效率翻倍

下一篇: 前端請求大比拼:Fetch、Axios、Ajax、XHR

標簽:
  • 熱門焦點
  • 一加Ace2 Pro真機揭曉 鈦空灰配色質感拉滿

    終于,在經過了幾波預熱之后,一加Ace2 Pro的外觀真機圖在網上出現了。還是博主數碼閑聊站曝光的,這次的外觀設計還是延續了一加11的方案,只是細節上有了調整,例如新加入了鈦空灰
  • 5月iOS設備性能榜:M1 M2依舊是榜單前五

    和上個月一樣,沒有新品發布的iOS設備性能榜的上榜設備并沒有什么更替,僅僅只有跑分變化而產生的排名變動,剛剛開始的蘋果WWDC2023,推出的產品也依舊是新款Mac Pro、新款Mac Stu
  • 六大權益!華為8月服務日開啟:手機免費貼膜、維修免人工費

    8月5日消息,一年一度的華為開發者大會2023(Together)日前在松山湖拉開帷幕,與此同時,華為8月服務日也式開啟,到店可享六大專屬權益。華為用戶可在華為商城Ap
  • 讓我們一起聊聊文件的操作

    文件【1】文件是什么?文件是保存數據的地方,是數據源的一種,比如大家經常使用的word文檔、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存數據,它既可以保
  • Temu起訴SHEIN,跨境電商戰事升級

    來源 | 伯虎財經(bohuFN)作者 | 陳平安日前據外媒報道,拼多多旗下跨境電商平臺Temu正對競爭對手SHEIN提起新訴訟,訴狀稱Shein&ldquo;利用市場支配力量強迫服裝廠商與之簽訂獨家
  • 騰訊VS網易,最卷游戲暑期檔,誰能笑到最后?

    作者:無銹缽來源:財經無忌7月16日晚,上海1862時尚藝術中心。伴隨著幻象的精準命中,碩大的熒幕之上,比分被定格在了14:12,被寄予厚望的EDG戰隊以絕對的優勢戰勝了BLG戰隊,拿下了總決
  • 花7萬退貨退款無門:誰在縱容淘寶珠寶商家造假?

    來源:極點商業作者:楊銘在淘寶購買珠寶玉石后,因為保證金不夠賠付,店鋪關閉,退貨退款難、維權無門的比比皆是。&ldquo;提供相關產品鑒定證書,支持全國復檢,可以30天無理由退換貨。&
  • 超閉合精工鉸鏈 徹底消滅縫隙 三星Galaxy Z Flip5與Galaxy Z Fold5發布

    2023年7月26日,三星電子正式發布了Galaxy Z Flip5與Galaxy Z Fold5。三星新一代折疊屏手機采用超閉合精工鉸鏈,讓折疊后的縫隙不再可見。同時,配合處
  • Windows 11發布,微軟一改往常對老機型開放的態度

    距離 Windows 11 發布已經過去一周,在過去一周里,很多數碼愛好者圍繞其對 Android 應用的支持、對老機型的升級問題展開了激烈討論。與以往不同的是,在這次大
Top