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

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

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

第三種模型(Publish/Subscribe 發(fā)布/訂閱)

扇型(funout)交換機(jī)

扇型交換機(jī)將消息路由給綁定到它身上的所有隊(duì)列,而不會(huì)理會(huì)綁定的路由鍵。如果 N 個(gè)隊(duì)列綁定到某個(gè)扇型交換機(jī)上,當(dāng)有消息發(fā)送給此扇型交換機(jī)時(shí),交換機(jī)會(huì)將消息的拷貝分別發(fā)送給這所有的 N 個(gè)隊(duì)列。扇型用來交換機(jī)處理消息的廣播路由。

因?yàn)樯刃徒粨Q機(jī)投遞信息的拷貝到所有綁定到它的隊(duì)列,所以它可以用來在群聊的時(shí)候,分發(fā)消息給參與群聊的用戶。

扇型交換機(jī)圖例:

【RabbitMQ(day3)】扇形交換機(jī)和主題交換機(jī)的應(yīng)用,RabbitMQ,rabbitmq,中間件,分布式

【RabbitMQ(day3)】扇形交換機(jī)和主題交換機(jī)的應(yīng)用,RabbitMQ,rabbitmq,中間件,分布式

Public/Subscribe 模型

在這種模式下,消息發(fā)送流程是這樣的:

  • 可以有多個(gè)消費(fèi)者;
  • 每個(gè)消費(fèi)者有自己的 queue(隊(duì)列)
  • 每個(gè)隊(duì)列都要綁定到 Exchange(交換機(jī))
  • 生產(chǎn)者發(fā)送的消息,只能發(fā)送到交換機(jī),交換機(jī)來決定要發(fā)給哪個(gè)隊(duì)列,生產(chǎn)者無法決定。
  • 交換機(jī)把所有的消息發(fā)送給綁定過的所有隊(duì)列。
  • 隊(duì)列的消費(fèi)者都能拿到消息。實(shí)現(xiàn)一條消息被多個(gè)消費(fèi)者消費(fèi)。
  1. 開發(fā)生產(chǎn)者
        // 將通道聲明指定的交換機(jī)
        // 參數(shù)1:交換機(jī)的名稱
        // 參數(shù)2:交換機(jī)的類型
        channel.exchangeDeclare("logs","fanout");

        // 發(fā)送消息
        channel.basicPublish("logs","",null,"fanout type message".getBytes());
  1. 開發(fā)消費(fèi)者
        // 通道聲明交換機(jī)
        channel.exchangeDeclare("logs","fanout");
        // 臨時(shí)隊(duì)列
        String queueName = channel.queueDeclare().getQueue();
        // 隊(duì)列綁定交換機(jī)
        channel.queueBind(queueName,"logs","");

實(shí)例代碼:

        Runnable myRunnable = () -> {
            try {
                Connection conn = RabbitMQUtils.getConnection();
                Channel channel = conn.createChannel();

                // 通道聲明交換機(jī)
                channel.exchangeDeclare("logs", "fanout");
                // 臨時(shí)隊(duì)列
                String queueName = channel.queueDeclare().getQueue();
                // 隊(duì)列綁定交換機(jī)
                channel.queueBind(queueName, "logs", "");

                // 消費(fèi)消息
                channel.basicConsume(queueName, true, new DefaultConsumer(channel) {
                    @Override
                    public void handleDelivery(String consumerTag,
                                               Envelope envelope,
                                               AMQP.BasicProperties properties, byte[] body) throws IOException {
                        System.out.println("消費(fèi)者" + consumerTag + ":" + new String(body));
                    }
                });
            } catch (IOException e) {
                e.printStackTrace();
            }
        };
        Thread t1 = new Thread(myRunnable);
        Thread t2 = new Thread(myRunnable);
        Thread t3 = new Thread(myRunnable);

        t1.start();
        t2.start();
        t3.start();

結(jié)果(有群發(fā)那味了):

【RabbitMQ(day3)】扇形交換機(jī)和主題交換機(jī)的應(yīng)用,RabbitMQ,rabbitmq,中間件,分布式

綁定

  • 綁定是交換機(jī)將消息路由給隊(duì)列所需遵循的規(guī)則。如果要制定交換機(jī)“E”將消息路由給隊(duì)列“Q”,那么“Q”就需要與“E”進(jìn)行綁定。綁定操作需要定義一個(gè)可選的路由鍵(routing key)屬性給某些類型的交換機(jī)(當(dāng)然像這第三種模型這樣的,路由鍵有沒有無所謂的,則不需聲明路由鍵,而前兩種模型下,是自動(dòng)綁定的,交換機(jī)則為默認(rèn)交換機(jī),路由鍵和隊(duì)列名一致的。)。路由鍵的意義在于從發(fā)送給交換機(jī)的眾多消息中選擇出某些消息,將其路由給綁定的隊(duì)列,然后消費(fèi)者再?gòu)年?duì)列中消費(fèi)消息。

第四、第五種模型(Routing、Topics)

第四種模型(Routing)

在第三種模型中,一條消息會(huì)被所有訂閱的隊(duì)列都消費(fèi)。但是,在某些場(chǎng)景下,希望不同的消息被不同的隊(duì)列消費(fèi)。這時(shí)候就需要用直連交換機(jī)構(gòu)建的路由routing模型了。

【RabbitMQ(day3)】扇形交換機(jī)和主題交換機(jī)的應(yīng)用,RabbitMQ,rabbitmq,中間件,分布式

圖解:

  • P:生產(chǎn)者,向Exchange發(fā)送消息,發(fā)送消息時(shí),會(huì)指定一個(gè)routing key。
  • X:Exchange(交換機(jī)),接收生產(chǎn)者的消息,然后把消息遞交給與routing key完全匹配的隊(duì)列。
  • C1:消費(fèi)者,其所在隊(duì)列指定了需要routing key 為error的消息。
  • C2:消費(fèi)者,其所在隊(duì)列指定了需要routing key 為 info、error、warning的消息。
  1. 開發(fā)生產(chǎn)者
		// 通過通道聲明交換機(jī)
        channel.exchangeDeclare("logs_routing", "direct");

        // 發(fā)送消息
        String routingKey = "info";
        channel.basicPublish("logs_routing", routingKey, null, ("這是direct模型發(fā)布的基于route key:" + routingKey).getBytes());
  1. 開發(fā)消費(fèi)者
        // 通道聲明交換機(jī)以及交換的類型
        channel.exchangeDeclare("logs_routing", "direct");
        // 創(chuàng)建一個(gè)臨時(shí)隊(duì)列
        String queueName = channel.queueDeclare().getQueue();
        // 基于route key 綁定隊(duì)列和交換機(jī)
        channel.queueBind(queueName, "logs_routing", "error");

主題交換機(jī)(Topic Exchange)

主題交換機(jī)通過對(duì)消息的路由鍵和隊(duì)列到交換機(jī)的綁定模式之間的匹配,將消息路由給一個(gè)或多個(gè)隊(duì)列(注意這是消息給一個(gè)或多個(gè)隊(duì)列,和直連交換機(jī)可不同,直連是路由鍵和隊(duì)列同名,一個(gè)消息對(duì)應(yīng)一個(gè)隊(duì)列這種才是直連)。主題交換機(jī)經(jīng)常用來實(shí)現(xiàn)各種分發(fā)/訂閱模式及其變種。主題交換機(jī)通常用來實(shí)現(xiàn)消息的多播路由(與第三種模型的廣播路由不同)。

主題交換機(jī)擁有非常廣泛的用戶案例。當(dāng)一個(gè)問題涉及到那些想要有針對(duì)性的選擇需要接收消息的多消費(fèi)/多應(yīng)用的時(shí)候,主題交換機(jī)都可以被列入考慮范圍。

第五種模型(Topics)

主題交換機(jī)和直連交換機(jī)相比,都是可以根據(jù) routingkey 把消息路由到不同的隊(duì)列。只不過主題交換機(jī)可以讓隊(duì)列在綁定 routingkey 的時(shí)候使用通配符。這種模型 routingkey 一般都是由一個(gè)或者多個(gè)單詞組成,多個(gè)單詞之間以.分割,例如:item.insert

【RabbitMQ(day3)】扇形交換機(jī)和主題交換機(jī)的應(yīng)用,RabbitMQ,rabbitmq,中間件,分布式

通配符
* (star) can substitute for exactly one word. 匹配一個(gè)單詞
# (hash) can substitute for zero or more words. 匹配一個(gè)或多個(gè)單詞

如:
audit.# 匹配audit.irs.corporate 或者 audit.irs 等
audit.* 只能匹配audit.irs

  1. 生產(chǎn)者
		 // 聲明交換機(jī)以及交換機(jī)類型
        channel.exchangeDeclare("topics", "topic");
        // 發(fā)布消息
        String routeKey = "user.delete";
        channel.basicPublish("topics", routeKey, null, ("這里是topic動(dòng)態(tài)路由模型,route key:" + routeKey).getBytes());
  1. 消費(fèi)者
		// 生命交換機(jī)以及交換機(jī)類型
        channel.exchangeDeclare("topics", "topic");
        // 創(chuàng)建一個(gè)臨時(shí)隊(duì)列
        String queueName = channel.queueDeclare().getQueue();
        // 綁定隊(duì)列和交換機(jī) 動(dòng)態(tài)通配符形式 route key
        channel.queueBind(queueName, "topics", "use.*");	

案例結(jié)果

【RabbitMQ(day3)】扇形交換機(jī)和主題交換機(jī)的應(yīng)用,RabbitMQ,rabbitmq,中間件,分布式文章來源地址http://www.zghlxwxcb.cn/news/detail-621813.html

到了這里,關(guān)于【RabbitMQ(day3)】扇形交換機(jī)和主題交換機(jī)的應(yīng)用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(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中交換機(jī)的應(yīng)用 ,原理 ,案例的實(shí)現(xiàn)

    RabbitMQ中交換機(jī)的應(yīng)用 ,原理 ,案例的實(shí)現(xiàn)

    ????????????????????????????????????歡迎來到我的CSDN主頁!???? ? ? ? ? ? ? ? ? ? ? ??我是平頂山大師,一個(gè)在CSDN分享筆記的博主。???? ? ? ??推薦給大家我的博客專欄《RabbitMQ中交換機(jī)的應(yīng)用及原理,案例的實(shí)現(xiàn)》。???? ? ? ? ? ? ? ? ? ? ?

    2024年01月24日
    瀏覽(22)
  • RabbitMQ中交換機(jī)的應(yīng)用及原理,案例的實(shí)現(xiàn)

    RabbitMQ中交換機(jī)的應(yīng)用及原理,案例的實(shí)現(xiàn)

    目錄 一、介紹 1. 概述 2. 作用及優(yōu)勢(shì) 3. 工作原理 二、交換機(jī)Exchange 1.?Direct 2. Topic 3.?Fanout 三、代碼案例 消費(fèi)者代碼?? 1. 直連direct? 生產(chǎn)者代碼 測(cè)試 2.?主題topic? 生產(chǎn)者代碼 測(cè)試 3.?扇形fanout? 生產(chǎn)者代碼 測(cè)試 每篇一獲 RabbitMQ中的交換機(jī)(exchange)是消息的分發(fā)中心,它

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

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

    目錄 一、前期項(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àng)目consumer(消費(fèi)者,接收消息)的代碼實(shí)現(xiàn)扇出(Fanout)交換機(jī)接收消息 2.1.1consumer子項(xiàng)目結(jié)構(gòu) 2.1.2FanoutConfig類的實(shí)現(xiàn)扇出(Fanout)交

    2024年02月05日
    瀏覽(95)
  • RabbitMQ 備份交換機(jī)和死信交換機(jī)

    RabbitMQ 備份交換機(jī)和死信交換機(jī)

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

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

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

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

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

    【RabbitMQ】RabbitMQ的交換機(jī)

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

    2024年03月12日
    瀏覽(30)
  • RabbitMQ交換機(jī)(1)

    RabbitMQ交換機(jī)(1)

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

    2024年01月17日
    瀏覽(23)
  • RabbitMQ-交換機(jī)類型

    RabbitMQ-交換機(jī)類型

    RabbitMQ的交換機(jī)類型總共有四種 1-直連交換機(jī)(Direct exchange) 消息發(fā)送到此交換機(jī)上時(shí),交換機(jī)會(huì)將此消息發(fā)送到RoutingKey和消息中RoutingKey完全匹配的的隊(duì)列(如果匹配了多個(gè)隊(duì)列,則每個(gè)隊(duì)列都會(huì)收到相同的消息)。 2-扇形交換機(jī)(Fanout exchange) 這個(gè)交換機(jī)機(jī),會(huì)將收到的

    2023年04月08日
    瀏覽(28)
  • RabbitMQ交換機(jī)類型

    RabbitMQ交換機(jī)類型

    先附加下官網(wǎng)文檔。RabbitMQ的交換機(jī)類型共有四種,是根據(jù)其路由過程的不同而劃分成的: 直連型交換機(jī)背后的路由算法很簡(jiǎn)單——消息會(huì)傳送給綁定鍵與消息的路由鍵完全匹配的那個(gè)隊(duì)列。 我們用直連交換機(jī)取代了只會(huì)無腦廣播的扇形交換機(jī),并且具備了選擇性接收消息的

    2024年02月06日
    瀏覽(19)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包