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

消息隊(duì)列RabbitMQ.02.交換機(jī)的講解與使用

這篇具有很好參考價(jià)值的文章主要介紹了消息隊(duì)列RabbitMQ.02.交換機(jī)的講解與使用。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

RabbitMQ中交換機(jī)的基本概念與作用解析

交換機(jī)的作用:

交換機(jī)的類(lèi)型:

直連交換機(jī)(Direct Exchange):?將消息路由到與消息中的路由鍵(Routing Key)完全匹配的隊(duì)列。

主題交換機(jī)(Topic Exchange):?使用通配符匹配路由鍵,允許更靈活的消息路由。

扇形交換機(jī)(Fanout Exchange):?將消息廣播到與交換機(jī)綁定的所有隊(duì)列,無(wú)視消息的路由鍵。

頭部交換機(jī)(Headers Exchange):?使用消息頭信息進(jìn)行匹配,而不是路由鍵。

死信交換機(jī)(Dead Letter Exchange)是在消息隊(duì)列系統(tǒng)中一種用于處理死信(Dead Letter Messages)的機(jī)制。死信通常是指由于某些原因而無(wú)法被成功處理的消息,這些原因可能包括消息過(guò)期、消息被拒絕、隊(duì)列滿等。

?個(gè)人總結(jié):


消息隊(duì)列RabbitMQ.02.交換機(jī)的講解與使用,rabbitmq,java-rabbitmq

RabbitMQ中交換機(jī)的基本概念與作用解析


交換機(jī)的作用:

  • 消息分發(fā):?交換機(jī)接收發(fā)布者發(fā)送的消息,并負(fù)責(zé)將消息路由到一個(gè)或多個(gè)隊(duì)列。
  • 路由規(guī)則定義:?通過(guò)交換機(jī)可以定義消息的路由規(guī)則,以確保消息被正確地發(fā)送到目標(biāo)隊(duì)列。

交換機(jī)的類(lèi)型:

  • 直連交換機(jī)(Direct Exchange):?將消息路由到與消息中的路由鍵(Routing Key)完全匹配的隊(duì)列。

直連交換機(jī)只能通過(guò)queue發(fā)送一個(gè)請(qǐng)求,如果需要發(fā)送多個(gè)請(qǐng)求那么就要進(jìn)行多個(gè)配置

//--------直連交換機(jī)
    @Bean
    public Queue queue1() {
        return new Queue("queue1");
    }

    @Bean
    public Queue queue2() {
        return new Queue("queue2");
    }

    @Bean
    public DirectExchange directExchange(){
        return new DirectExchange("exchange1");
    }

    @Bean
    public Binding binding01(){
        return BindingBuilder
                .bind(queue1())
                .to(directExchange())
                .with("aa");
    }
    @Bean
    public Binding binding02(){
        return BindingBuilder
                .bind(queue2())
                .to(directExchange())
                .with("bb");
    }

?消費(fèi)者接受信息

@Component
@SuppressWarnings("all")
@Slf4j
@RabbitListener(queues = "queue1")
public class ReceiverQ1 {

    @RabbitHandler
    public void process(String msg) {
        log.warn("q1接收到:" + msg);
    }
}

測(cè)試

@RestController
public class TestController {

    @Autowired
    private AmqpTemplate template;
    @Autowired
    private ObjectMapper objectMapper;

   
    @RequestMapping("/send3")
    public String send3(){
        template.convertAndSend("directExchange","aa","hello");
        return "??";
    }


}

?


  • 主題交換機(jī)(Topic Exchange):?使用通配符匹配路由鍵,允許更靈活的消息路由。
  1. 通配符的含義:

    • 星號(hào)(*):?匹配一個(gè)單詞,可以出現(xiàn)在路由鍵的任意位置。例如,"animal.*"匹配"animal.rabbit"和"animal.cat"等。
    • 井號(hào)(#):?匹配零個(gè)或多個(gè)單詞,只能出現(xiàn)在路由鍵的末尾。例如,"animal.#"匹配"animal.rabbit"、"animal.cat"和"animal.mammal.large"等。

主題交換機(jī)可以通過(guò)配置多個(gè)路由鍵來(lái)實(shí)現(xiàn)不同的鍵進(jìn)入不同的消費(fèi)者,如:交換機(jī)a,交換機(jī)b,

現(xiàn)在有一個(gè)包含a和b的鍵那么兩個(gè)都能進(jìn)入不同的消費(fèi)者功能更加強(qiáng)大,并且可以配置通配符,根據(jù)通配符 * #? 來(lái)實(shí)現(xiàn)進(jìn)入不同的消費(fèi)者

//--------------主題交換機(jī)
    // *.*.aa -> Q1
    // *.*.bb -> Q2
    // mq.# -> Q1,Q2
    // 一個(gè)隊(duì)列可以用多個(gè)綁定鍵

    @Bean
    public TopicExchange topicExchange(){
        return  new TopicExchange("topicExchange");
    }

    @Bean
    public Binding binding03(){
        return BindingBuilder
                .bind(queue1())
                .to(topicExchange())
                .with("*.*.aa");
    }

    @Bean
    public Binding binding04(){
        return BindingBuilder
                .bind(queue2())
                .to(topicExchange())
                .with("*.*.bb");
    }

    @Bean
    public Binding binding05(){
        return BindingBuilder
                .bind(queue1())
                .to(topicExchange())
                .with("mq.#");
    }

    @Bean
    public Binding binding06(){
        return BindingBuilder
                .bind(queue2())
                .to(topicExchange())
                .with("mq.#");
    }

測(cè)試


@RestController
public class TestController {

    @Autowired
    private AmqpTemplate template;
    @Autowired
    private ObjectMapper objectMapper;

   
     @RequestMapping("/send4")
    public String send4(String rex){
        template.convertAndSend("topicExchange",rex,"hello");
        return "??";
    }



}

?


  • 扇形交換機(jī)(Fanout Exchange):?將消息廣播到與交換機(jī)綁定的所有隊(duì)列,無(wú)視消息的路由鍵。

扇形交換機(jī)可以統(tǒng)一發(fā)送請(qǐng)求,列入可以運(yùn)用到,商城活動(dòng)時(shí)統(tǒng)一給用戶(hù)發(fā)送商城活動(dòng)信息

//--------------扇形交換機(jī)
    // 廣播,群發(fā)
    //它上面的隊(duì)列不需要binding key

    @Bean
    public FanoutExchange fanoutExchange(){
        return new FanoutExchange("fanoutExchange");
    }
    @Bean
    public Binding binding07(){
        return BindingBuilder
                .bind(queue1())
                .to(fanoutExchange());
    }
    @Bean
    public Binding binding08(){
        return BindingBuilder
                .bind(queue2())
                .to(fanoutExchange());
    }

測(cè)試代碼

 @RequestMapping("/send5")
    public String send5(){
        template.convertAndSend("fanoutExchange","","hello");
        return "??";
    }

?上述效果圖:

消息隊(duì)列RabbitMQ.02.交換機(jī)的講解與使用,rabbitmq,java-rabbitmq


?

  • 頭部交換機(jī)(Headers Exchange):?使用消息頭信息進(jìn)行匹配,而不是路由鍵。

頭部交換機(jī)(Headers Exchange)是RabbitMQ中的一種交換機(jī)類(lèi)型,與其他類(lèi)型的交換機(jī)(直連交換機(jī)、主題交換機(jī)、扇出交換機(jī))不同,頭部交換機(jī)使用消息的頭信息(Headers)而不是路由鍵來(lái)進(jìn)行消息的路由。頭部交換機(jī)提供更靈活的路由方式,允許根據(jù)消息頭的鍵值對(duì)進(jìn)行匹配。

?以下是頭部交換機(jī)的一些關(guān)鍵特性和使用方式:

  1. 消息頭信息:

    • 鍵值對(duì):?消息頭是由一系列鍵值對(duì)組成的,用于描述消息的屬性。
    • 自定義屬性:?消息頭可以包含自定義的屬性,根據(jù)應(yīng)用程序的需要定義不同的屬性信息。
  2. 匹配規(guī)則:

    • 匹配方式:?消息通過(guò)匹配消息頭的鍵值對(duì)來(lái)確定路由目標(biāo)。
    • 多條件匹配:?可以定義多個(gè)鍵值對(duì),消息需要滿足所有條件才能被正確路由。
  3. 綁定關(guān)系:

    • 綁定頭信息:?在綁定隊(duì)列到頭部交換機(jī)時(shí),可以指定一個(gè)或多個(gè)鍵值對(duì)作為匹配條件。
    • 匹配算法:?消息頭需要匹配綁定隊(duì)列時(shí)指定的鍵值對(duì)條件,才能被路由到相應(yīng)的隊(duì)列。
  4. 使用場(chǎng)景:

    • 復(fù)雜路由邏輯:?當(dāng)消息的路由邏輯需要根據(jù)多個(gè)條件進(jìn)行判斷時(shí),頭部交換機(jī)提供了更靈活的解決方案。
    • 自定義屬性:?當(dāng)消息攜帶有多個(gè)自定義屬性,需要根據(jù)這些屬性進(jìn)行復(fù)雜匹配時(shí),頭部交換機(jī)是一個(gè)合適的選擇。
  5. 示例:

    • 如果有一個(gè)消息頭包含"content-type"為"application/json",并且"priority"為"high",一個(gè)隊(duì)列可以通過(guò)綁定這兩個(gè)條件到頭部交換機(jī)來(lái)接收符合這兩個(gè)條件的消息。
    • 另一個(gè)隊(duì)列可以通過(guò)綁定"content-type"為"application/xml"的條件來(lái)接收不同類(lèi)型的消息。

頭部交換機(jī)適用于需要根據(jù)消息的多個(gè)屬性進(jìn)行復(fù)雜匹配的場(chǎng)景,提供了更高度定制化的消息路由能力。


  • 死信交換機(jī)(Dead Letter Exchange)是在消息隊(duì)列系統(tǒng)中一種用于處理死信(Dead Letter Messages)的機(jī)制。死信通常是指由于某些原因而無(wú)法被成功處理的消息,這些原因可能包括消息過(guò)期、消息被拒絕、隊(duì)列滿等。

以下是關(guān)于死信交換機(jī)的基本概念和作用:

  1. 死信的產(chǎn)生原因:

    • 消息過(guò)期:?消息在隊(duì)列中等待的時(shí)間超過(guò)了指定的過(guò)期時(shí)間。
    • 消息被拒絕:?消費(fèi)者拒絕消費(fèi)消息,并且消息被標(biāo)記為不可重新投遞。
    • 隊(duì)列滿:?隊(duì)列達(dá)到最大容量,無(wú)法再接收新的消息。
  2. 死信交換機(jī)的作用:

    • 死信路由:?當(dāng)消息被標(biāo)記為死信時(shí),它會(huì)被發(fā)送到死信交換機(jī)。
    • 重新處理或記錄:?可以通過(guò)死信交換機(jī)重新將消息發(fā)送到其他隊(duì)列,進(jìn)行額外處理,或者記錄日志以分析死信的原因。
  3. 死信交換機(jī)的配置:

    • 綁定關(guān)系:?死信交換機(jī)與原始交換機(jī)或隊(duì)列建立綁定關(guān)系。
    • 死信隊(duì)列:?定義一個(gè)死信隊(duì)列,接收由死信交換機(jī)路由的死信。
    • 死信交換機(jī)類(lèi)型:?死信交換機(jī)可以是不同類(lèi)型的交換機(jī),根據(jù)具體需求選擇合適的類(lèi)型。
  4. 應(yīng)用場(chǎng)景:

    • 錯(cuò)誤處理:?處理由于消息格式錯(cuò)誤等原因?qū)е碌乃佬拧?/li>
    • 重試機(jī)制:?將死信重新發(fā)送到其他隊(duì)列進(jìn)行重試。
    • 日志記錄:?記錄死信信息以便進(jìn)行故障排除和分析。

使用死信交換機(jī)可以提高消息系統(tǒng)的健壯性和可靠性,確保無(wú)法正常處理的消息得到妥善處理,避免消息的丟失或無(wú)法追蹤。配置死信交換機(jī)需要根據(jù)具體消息隊(duì)列系統(tǒng)的實(shí)現(xiàn)進(jìn)行設(shè)置,例如在RabbitMQ中,可以通過(guò)設(shè)置交換機(jī)和隊(duì)列的參數(shù)來(lái)實(shí)現(xiàn)死信機(jī)制。

消息隊(duì)列RabbitMQ.02.交換機(jī)的講解與使用,rabbitmq,java-rabbitmq?


?個(gè)人總結(jié):

1.直連交換機(jī)只能通過(guò)queue發(fā)送一個(gè)請(qǐng)求,如果需要發(fā)送多個(gè)請(qǐng)求那么就要進(jìn)行多個(gè)配置;

2.主題交換機(jī)可以通過(guò)配置多個(gè)路由鍵來(lái)實(shí)現(xiàn)不同的鍵進(jìn)入不同的消費(fèi)者,如:交換機(jī)a,交換機(jī)b,現(xiàn)在有一個(gè)包含a和b的鍵那么兩個(gè)都能進(jìn)入不同的消費(fèi)者功能更加強(qiáng)大,并且可以配置通配符,根據(jù)通配符 * #? 來(lái)實(shí)現(xiàn)進(jìn)入不同的消費(fèi)者;

3. * 星號(hào)代表匹配一個(gè)單詞,# 井號(hào)代表匹配一個(gè)或多個(gè)單詞;

4.扇形交換機(jī)可以統(tǒng)一發(fā)送請(qǐng)求,列入可以運(yùn)用到,商城活動(dòng)時(shí)統(tǒng)一給用戶(hù)發(fā)送商城活動(dòng)信息;文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-821218.html

到了這里,關(guān)于消息隊(duì)列RabbitMQ.02.交換機(jī)的講解與使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • RabbitMQ學(xué)習(xí)筆記(消息發(fā)布確認(rèn),死信隊(duì)列,集群,交換機(jī),持久化,生產(chǎn)者、消費(fèi)者)

    RabbitMQ學(xué)習(xí)筆記(消息發(fā)布確認(rèn),死信隊(duì)列,集群,交換機(jī),持久化,生產(chǎn)者、消費(fèi)者)

    MQ(message queue):本質(zhì)上是個(gè)隊(duì)列,遵循FIFO原則,隊(duì)列中存放的是message,是一種跨進(jìn)程的通信機(jī)制,用于上下游傳遞消息。MQ提供“邏輯解耦+物理解耦”的消息通信服務(wù)。使用了MQ之后消息發(fā)送上游只需要依賴(lài)MQ,不需要依賴(lài)其它服務(wù)。 功能1:流量消峰 功能2:應(yīng)用解耦 功

    2024年02月07日
    瀏覽(118)
  • RabbitMQ隊(duì)列及交換機(jī)的使用

    RabbitMQ隊(duì)列及交換機(jī)的使用

    目錄 一、簡(jiǎn)單模型 1、首先控制臺(tái)創(chuàng)建一個(gè)隊(duì)列 2、父工程導(dǎo)入依賴(lài)? 3、生產(chǎn)者配置文件 ?4、寫(xiě)測(cè)試類(lèi) 5、消費(fèi)者配置文件 6、消費(fèi)者接收消息 二、WorkQueues模型 1、在控制臺(tái)創(chuàng)建一個(gè)新的隊(duì)列 2、生產(chǎn)者生產(chǎn)消息 3、創(chuàng)建兩個(gè)消費(fèi)者接收消息 4、能者多勞充分利用每一個(gè)消費(fèi)者

    2024年02月04日
    瀏覽(22)
  • 【學(xué)習(xí)日記2023.6.19】 之 RabbitMQ服務(wù)異步通信_(tái)消息可靠性_死信交換機(jī)_惰性隊(duì)列_MQ集群

    【學(xué)習(xí)日記2023.6.19】 之 RabbitMQ服務(wù)異步通信_(tái)消息可靠性_死信交換機(jī)_惰性隊(duì)列_MQ集群

    消息隊(duì)列在使用過(guò)程中,面臨著很多實(shí)際問(wèn)題需要思考: 消息從發(fā)送,到消費(fèi)者接收,會(huì)經(jīng)歷多個(gè)過(guò)程: 其中的每一步都可能導(dǎo)致消息丟失,常見(jiàn)的丟失原因包括: 發(fā)送時(shí)丟失: 生產(chǎn)者發(fā)送的消息未送達(dá)exchange 消息到達(dá)exchange后未到達(dá)queue MQ宕機(jī),queue將消息丟失 consumer接收

    2024年02月11日
    瀏覽(99)
  • 消息隊(duì)列-RabbitMQ:Exchanges、綁定 bindings以及3大常用交換機(jī)(Fanout exchange、Direct exchange、Topics exchange)

    消息隊(duì)列-RabbitMQ:Exchanges、綁定 bindings以及3大常用交換機(jī)(Fanout exchange、Direct exchange、Topics exchange)

    RabbitMQ 消息傳遞模型的核心思想是: 生產(chǎn)者生產(chǎn)的消息從不會(huì)直接發(fā)送到隊(duì)列 。實(shí)際上, 通常生產(chǎn)者甚至都不知道這些消息傳遞傳遞到了哪些隊(duì)列中 。 相反, 生產(chǎn)者只能將消息發(fā)送到交換機(jī) (exchange) , 交換機(jī)工作 的內(nèi)容非常簡(jiǎn)單, 一方面它接收來(lái)自生產(chǎn)者的消息 , 另一

    2024年04月08日
    瀏覽(21)
  • 利用消息中間件RabbitMQ創(chuàng)建隊(duì)列以及扇出(Fanout)、訂閱(Direct)、主題(Topic)交換機(jī)來(lái)完成消息的發(fā)送和監(jiān)聽(tīng)接收(完整版)

    利用消息中間件RabbitMQ創(chuàng)建隊(duì)列以及扇出(Fanout)、訂閱(Direct)、主題(Topic)交換機(jī)來(lái)完成消息的發(fā)送和監(jiān)聽(tīng)接收(完整版)

    目錄 一、前期項(xiàng)目環(huán)境準(zhǔn)備 1.1父項(xiàng)目以及子項(xiàng)目 1.2配置pom.xml 1.3配置application.yml 二、扇出(Fanout)?交換機(jī)實(shí)現(xiàn)消息的發(fā)送和接收 2.1編寫(xiě)子項(xiàng)目consumer(消費(fèi)者,接收消息)的代碼實(shí)現(xiàn)扇出(Fanout)交換機(jī)接收消息 2.1.1consumer子項(xiàng)目結(jié)構(gòu) 2.1.2FanoutConfig類(lèi)的實(shí)現(xiàn)扇出(Fanout)交

    2024年02月05日
    瀏覽(96)
  • 02、RabbitMQ交換機(jī)

    02、RabbitMQ交換機(jī)

    目錄 1.、Exchange(交換機(jī))的作用 ?2、Exchange(交換機(jī))的類(lèi)型 2.1.直連交換機(jī):Direct Exchange 2.2.主題交換機(jī):Topic Exchange 2.3.扇形交換機(jī):Fanout Exchange 2.4.首部交換機(jī):Headers exchange 2.5.默認(rèn)交換機(jī) 2.6.Dead Letter Exchange(死信交換機(jī)) 3、交換機(jī)的屬性 4、綜合案例:交換機(jī)的使用 給子模

    2024年02月04日
    瀏覽(44)
  • RabbitMQ交換機(jī)與隊(duì)列

    RabbitMQ交換機(jī)與隊(duì)列

    RabbitMQ 消息傳遞模型的核心思想是: 生產(chǎn)者生產(chǎn)的消息從不會(huì)直接發(fā)送到隊(duì)列 。實(shí)際上,通常生產(chǎn)者甚至都不知道這些消息傳遞傳遞到了哪些隊(duì)列中。 相反, 生產(chǎn)者只能將消息發(fā)送到交換機(jī)(exchange) ,交換機(jī)工作的內(nèi)容非常簡(jiǎn)單, 一方面它接收來(lái)自生產(chǎn)者的消息,另一方面

    2024年01月24日
    瀏覽(24)
  • RabbitMq創(chuàng)建交換機(jī)和隊(duì)列

    RabbitMq創(chuàng)建交換機(jī)和隊(duì)列

    1. 網(wǎng)頁(yè)登錄 IP:1572 ? 2. 輸入登錄賬號(hào)密碼 admin admin 3. 點(diǎn)擊Exchanges 添加交換機(jī)Platform_AlarmEngineInterface 和Rg_Platform_AlarmEngineInterface ,Type選擇topic 4. 添加隊(duì)列 VIDEO_Alarm_platform 、 watch_ftp、 RG_VIDEO_Alarm_platform 、 RG_VIDEO_Alarm_platform_jiance 5. 綁定交換機(jī)和隊(duì)列 (1) 點(diǎn)擊Exchanges界面,選擇其

    2024年02月16日
    瀏覽(15)
  • RabbitMQ-死信交換機(jī)和死信隊(duì)列

    RabbitMQ-死信交換機(jī)和死信隊(duì)列

    DLX: Dead-Letter-Exchange 死信交換器,死信郵箱 當(dāng)消息成為Dead message后,可以被重新發(fā)送到另一個(gè)交換機(jī),這個(gè)交換機(jī)就是DLX。 如下圖所示: 其實(shí)死信隊(duì)列就是一個(gè)普通的交換機(jī),有些隊(duì)列的消息成為死信后,(比如過(guò)期了或者隊(duì)列滿了)這些死信一般情況下是會(huì)被 RabbitMQ 清理

    2024年02月08日
    瀏覽(27)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包