国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

RabbitMq交換機類型介紹

這篇具有很好參考價值的文章主要介紹了RabbitMq交換機類型介紹。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

RabbitMq交換機類型介紹

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

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

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

1 DirectExchange(直連交換機)

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

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

RabbitMq交換機類型介紹,RabbitMq,java-rabbitmq,rabbitmq,java,中間件

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

2 Topic exchange(主題交換機)

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

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

那匹配規(guī)則是什么?

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

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

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

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

通俗理解:

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

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

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

  • 創(chuàng)建交換機、隊列、綁定關系

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

    可以看到已經(jīng)創(chuàng)建成功
    RabbitMq交換機類型介紹,RabbitMq,java-rabbitmq,rabbitmq,java,中間件
    RabbitMq交換機類型介紹,RabbitMq,java-rabbitmq,rabbitmq,java,中間件

  • 分別給交換機按三個不同routing_key發(fā)送消息,對應的routing_key分別為:topic.shanghai、topic.haha.hehe、topic.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);
        /**
         * 發(fā)給交換機,通過匹配隊列和交換機綁定關系值,判斷發(fā)送給哪個隊列
         */
        rabbitTemplate.convertAndSend("topicExchange","topic.shanghai",params);
        rabbitTemplate.convertAndSend("topicExchange","topic.haha.hehe",params);
        rabbitTemplate.convertAndSend("topicExchange","topic.test",params);
        return AjaxResult.success("成功");
    }
    

    三個隊列分別對應的匹配規(guī)則及接受到消息的結(jié)果如圖:
    RabbitMq交換機類型介紹,RabbitMq,java-rabbitmq,rabbitmq,java,中間件

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

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

3 Fanout exchange(扇形交換機)

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

不需要管綁定的binding_key是什么

RabbitMq交換機類型介紹,RabbitMq,java-rabbitmq,rabbitmq,java,中間件

在編寫發(fā)送消息代碼時,不需要填寫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對象實現(xiàn)消息隊列和交換機的綁定。當消息發(fā)送到RabbitMQ時會取到該消息的headers與Exchange綁定時指定的鍵值對進行匹配;如果完全匹配則消息會路由到該隊列,否則不會路由到該隊列。

匹配規(guī)則x-match有下列兩種類型:

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

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

種交換器類型在性能上相對來說較差,在實際工作中很少會用到。
RabbitMq交換機類型介紹,RabbitMq,java-rabbitmq,rabbitmq,java,中間件文章來源地址http://www.zghlxwxcb.cn/news/detail-658986.html

到了這里,關于RabbitMq交換機類型介紹的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • SpringBoot整合RabbitMQ,三種交換機類型示例

    SpringBoot整合RabbitMQ,三種交換機類型示例

    在application.properties或application.yml中配置RabbitMQ服務器的連接參數(shù): 4.1、DirectExchange(直連交換機) 消費者 生產(chǎn)者 測試 一個交換機對多個隊列的特點: 一個隊列對多個消費者特點: 4.2、FanoutExchange(扇形/廣播交換機) 消費者 生產(chǎn)者 4.3、TopicExchange(主題交換機) 消費者 生

    2024年04月12日
    瀏覽(20)
  • 【圖解RabbitMQ-6】說說交換機在RabbitMQ中的四種類型以及使用場景

    【圖解RabbitMQ-6】說說交換機在RabbitMQ中的四種類型以及使用場景

    ?????作者名稱:DaenCode ??作者簡介:CSDN實力新星,后端開發(fā)兩年經(jīng)驗,曾擔任甲方技術(shù)代表,業(yè)余獨自創(chuàng)辦智源恩創(chuàng)網(wǎng)絡科技工作室。會點點Java相關技術(shù)棧、帆軟報表、低代碼平臺快速開發(fā)。技術(shù)尚淺,閉關學習中······ ??人生感悟:嘗盡人生百味,方知世間冷暖。

    2024年02月07日
    瀏覽(31)
  • rabbitmq基礎-java-3、Fanout交換機

    rabbitmq基礎-java-3、Fanout交換機

    Fanout,英文翻譯是扇出。 1) ?可以有多個隊列 2) ?每個隊列都要綁定到Exchange(交換機) 3) ?生產(chǎn)者發(fā)送的消息,只能發(fā)送到交換機 4) ?交換機把消息發(fā)送給綁定過的所有隊列 5) ?訂閱隊列的消費者都能拿到消息 交換機的作用是什么? 接收publisher發(fā)送的消息 將消息按

    2024年01月25日
    瀏覽(23)
  • rabbitmq基礎-java-4、Direct交換機

    rabbitmq基礎-java-4、Direct交換機

    ????????在Fanout模式中,一條消息,會被所有訂閱的隊列都消費。但是,在某些場景下,我們希望不同的消息被不同的隊列消費。這時就要用到Direct類型的Exchange。 ? 在Direct模型下: 隊列與交換機的綁定,不能是任意綁定了,而是要指定一個 RoutingKey (路由key) 消息的發(fā)

    2024年01月25日
    瀏覽(22)
  • rabbitmq基礎-java-5、Topic交換機

    rabbitmq基礎-java-5、Topic交換機

    Topic 類型的 Exchange 與 Direct 相比,都是可以根據(jù) RoutingKey 把消息路由到不同的隊列。 只不過 Topic 類型 Exchange 可以讓隊列在綁定 BindingKey 的時候使用通配符! BindingKey 一般都是有一個或多個單詞組成,多個單詞之間以 . 分割,例如: item.insert 通配符規(guī)則: # :匹配一個或多個

    2024年01月25日
    瀏覽(22)
  • RabbitMQ 備份交換機和死信交換機

    RabbitMQ 備份交換機和死信交換機

    ??為處理生產(chǎn)者將消息推送到交換機中,交換機按照消息中的路由鍵及自身策略無法將消息投遞到指定隊列中造成消息丟失的問題,可以使用備份交換機。 ??為處理在消息隊列中到達TTL的過期消息,可采用死信交換機進行消息轉(zhuǎn)存??梢酝ㄟ^死信交換機的方式實現(xiàn)延遲隊

    2024年02月14日
    瀏覽(22)
  • RabbitMQ之Exchange(交換機)屬性及備用交換機解讀

    RabbitMQ之Exchange(交換機)屬性及備用交換機解讀

    目錄 基本介紹 主要結(jié)論 備用交換機 ?springboot代碼實戰(zhàn)(備用交換機) 實戰(zhàn)架構(gòu) 工程概述 RabbitConfigDeal?配置類:創(chuàng)建隊列及交換機并進行綁定? MessageService業(yè)務類:發(fā)送消息及接收消息 主啟動類RabbitMq01Application:實現(xiàn)ApplicationRunner接口 在 RabbitMQ 中,交換機主要用來將生產(chǎn)

    2024年02月02日
    瀏覽(17)
  • 【RabbitMQ】RabbitMQ的交換機

    【RabbitMQ】RabbitMQ的交換機

    在上文中, 都沒有交換機,生產(chǎn)者直接發(fā)送消息到隊列。 而一旦引入交換機,消息發(fā)送的模式會有很大變化:可以看到,在訂閱模型中,多了一個exchange角色,而且過程略有變化: Publisher:生產(chǎn)者,不再發(fā)送消息到隊列中,而是發(fā)給交換機 Exchange:交換機,一方面,接收生

    2024年03月12日
    瀏覽(30)
  • 【RabbitMQ(day3)】扇形交換機和主題交換機的應用

    【RabbitMQ(day3)】扇形交換機和主題交換機的應用

    扇型交換機將消息路由給綁定到它身上的所有隊列,而不會理會綁定的路由鍵。如果 N 個隊列綁定到某個扇型交換機上,當有消息發(fā)送給此扇型交換機時,交換機會將消息的拷貝分別發(fā)送給這所有的 N 個隊列。扇型用來交換機處理消息的廣播路由。 因為扇型交換機投遞信息的

    2024年02月14日
    瀏覽(43)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包