亚洲av成人精品日韩一区,97久久久精品综合88久久,玩弄japan白嫩少妇hd,亚洲av片不卡无码久久,玩弄人妻少妇500系列

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

RabbitMQ中的路由模型(direct)

科技綠洲 ? 來源:了不起 ? 作者:了不起 ? 2023-09-25 11:32 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

路由模型

RabbitMQ 提供了五種不同的通信模型,上一篇文章中,簡單的介紹了一下RabbitMQ的發(fā)布訂閱模型模型。這篇文章來學(xué)習(xí)一下RabbitMQ中的路由模型(direct)。

路由模型(direct):路由模式相當(dāng)于是分布訂閱模式的升級(jí)版,多了一個(gè) 路由key來約束隊(duì)列與交換機(jī)的綁定。

在路由模型中,生產(chǎn)者將消息發(fā)送到交換機(jī),交換機(jī)根據(jù)消息的路由鍵將消息轉(zhuǎn)發(fā)到對(duì)應(yīng)的隊(duì)列中。每個(gè)隊(duì)列可以綁定多個(gè)路由鍵,每個(gè)路由鍵可以綁定到多個(gè)隊(duì)列中。消費(fèi)者從隊(duì)列中接收消息并處理。當(dāng)一個(gè)路由鍵被多個(gè)隊(duì)列綁定時(shí),交換機(jī)會(huì)將消息發(fā)送到所有綁定的隊(duì)列中。當(dāng)一個(gè)隊(duì)列綁定多個(gè)路由鍵時(shí),該隊(duì)列將能夠接收到所有路由鍵對(duì)應(yīng)的消息。

適用場景

路由模型適用于需要點(diǎn)對(duì)點(diǎn)通信的場景,例如:

  1. 系統(tǒng)監(jiān)控告警通知;
  2. 任務(wù)分發(fā);
  3. 用戶私信系統(tǒng);
  4. 訂單確認(rèn)通知等。

演示

  1. 生產(chǎn)者

    // 生產(chǎn)者
    public class Producer {
        private static final String EXCHANGE_NAME = "exchange_direct_1";
        // 定義路由的key,key值是可以隨意定義的
        private static final String EXCHANGE_ROUTING_KEY1 = "direct_km1";
        private static final String EXCHANGE_ROUTING_KEY2 = "direct_km2";
    
        public static void main(String[] args) throws IOException, TimeoutException {
            Connection connection = ConnectionUtils.getConnection();
            Channel channel = connection.createChannel();
            channel.exchangeDeclare(EXCHANGE_NAME, "direct");
            for (int i = 0; i < 100; i++) {
                if (i % 2 == 0) {
                    channel.basicPublish(EXCHANGE_NAME, EXCHANGE_ROUTING_KEY1, null, ("路由模型發(fā)送的第 " + i + " 條信息").getBytes());
                } else {
                    channel.basicPublish(EXCHANGE_NAME, EXCHANGE_ROUTING_KEY2, null, ("路由模型發(fā)送的第 " + i + " 條信息").getBytes());
                }
            }
            channel.close();
            connection.close();
        }
    }
    
  2. 消費(fèi)者

    // 消費(fèi)者1
    public class Consumer {
        private static final String QUEUE_NAME = "queue_direct_1";
        private static final String EXCHANGE_NAME = "exchange_direct_1";
        private static final String EXCHANGE_ROUTING_KEY1 = "direct_km1";
    
        public static void main(String[] args) throws IOException, TimeoutException {
            Connection connection = ConnectionUtils.getConnection();
            Channel channel = connection.createChannel();
            channel.queueDeclare(QUEUE_NAME, false, false, false, null);
            channel.exchangeDeclare(EXCHANGE_NAME, "direct");
            channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, EXCHANGE_ROUTING_KEY1);
            DefaultConsumer defaultConsumer = new DefaultConsumer(channel) {
                @Override
                public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                    System.out.println("消費(fèi)者1接收到的消息是:" + new String(body));
                }
            };
            channel.basicConsume(QUEUE_NAME, true, defaultConsumer);
        }
    }
    
    // 消費(fèi)者2
    public class Consumer2 {
        private static final String QUEUE_NAME = "queue_direct_2";
        private static final String EXCHANGE_NAME = "exchange_direct_1";
        private static final String EXCHANGE_ROUTING_KEY2 = "direct_km2";
    
        public static void main(String[] args) throws IOException, TimeoutException {
            Connection connection = ConnectionUtils.getConnection();
            Channel channel = connection.createChannel();
            channel.queueDeclare(QUEUE_NAME, false, false, false, null);
            channel.exchangeDeclare(EXCHANGE_NAME, "direct");
            channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, EXCHANGE_ROUTING_KEY2);
            DefaultConsumer defaultConsumer = new DefaultConsumer(channel) {
                @Override
                public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                    System.out.println("消費(fèi)者2接收到的消息是:" + new String(body));
                }
            };
            channel.basicConsume(QUEUE_NAME, true, defaultConsumer);
        }
    }
    
  3. 測試
    先啟動(dòng)2個(gè)消費(fèi)者,再啟動(dòng)生產(chǎn)者
    可以得到結(jié)果是消費(fèi)者1得到了序號(hào)是偶數(shù)的消息
    消費(fèi)者2得到了序號(hào)是奇數(shù)的消息

小結(jié)

本文介紹了 RabbitMQ 通信模型中的路由模型的使用,通過交換機(jī)和路由鍵實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)通信,適合于需要點(diǎn)對(duì)點(diǎn)通信的場景。在實(shí)際使用過程中,需要注意以下幾點(diǎn):

  1. 路由鍵必須要與消費(fèi)者綁定隊(duì)列時(shí)的路由鍵相同,否則無法接收到消息;
  2. 可以通過多個(gè)交換機(jī)和路由鍵來實(shí)現(xiàn)更靈活的消息路由。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 交換機(jī)
    +關(guān)注

    關(guān)注

    22

    文章

    2744

    瀏覽量

    101907
  • 路由
    +關(guān)注

    關(guān)注

    0

    文章

    280

    瀏覽量

    42479
  • 模型
    +關(guān)注

    關(guān)注

    1

    文章

    3519

    瀏覽量

    50413
  • Direct
    +關(guān)注

    關(guān)注

    0

    文章

    15

    瀏覽量

    11316
  • rabbitmq
    +關(guān)注

    關(guān)注

    0

    文章

    20

    瀏覽量

    1154
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    RabbitMQ的發(fā)布訂閱模型

    上一篇文章,簡單的介紹了一下RabbitMQ的work模型。這篇文章來學(xué)習(xí)一下RabbitMQ的發(fā)布訂閱
    的頭像 發(fā)表于 09-25 14:30 ?819次閱讀
    <b class='flag-5'>RabbitMQ</b><b class='flag-5'>中</b>的發(fā)布訂閱<b class='flag-5'>模型</b>

    RabbitMQ通信模型的work模型

    上一篇文章,簡單的介紹了一下RabbitMQ,以及安裝和hello world。 有的小伙伴留言說看不懂其中的方法參數(shù),這里先解釋一下幾個(gè)基本的方法參數(shù)。 // 聲明隊(duì)列方法
    的頭像 發(fā)表于 09-25 14:34 ?805次閱讀
    <b class='flag-5'>RabbitMQ</b>通信<b class='flag-5'>模型</b><b class='flag-5'>中</b>的work<b class='flag-5'>模型</b>

    RabbitMQ是什么

    在工作中經(jīng)常會(huì)用到消息隊(duì)列處理各種問題,今天指北君帶領(lǐng)大家來學(xué)一個(gè)很常用到的技術(shù)-RabbitMQ;接下來還會(huì)有關(guān)于RabbitMQ的系列教程,對(duì)你有幫助的話記得關(guān)注哦~ RabbitMQ
    的頭像 發(fā)表于 09-25 14:36 ?1210次閱讀
    <b class='flag-5'>RabbitMQ</b>是什么

    RabbitMq入門教程

    RabbitMQ是一個(gè)開源的,在AMQP基礎(chǔ)上完整的,可復(fù)用的企業(yè)消息系統(tǒng)。
    的頭像 發(fā)表于 12-04 11:10 ?886次閱讀
    <b class='flag-5'>RabbitMq</b>入門教程

    基于Docker Compose部署RabbitMQ的經(jīng)驗(yàn)分享

    RabbitMQ 是一個(gè)功能強(qiáng)大的開源消息隊(duì)列系統(tǒng),它實(shí)現(xiàn)了高效的消息通信和異步處理。
    的頭像 發(fā)表于 01-03 10:22 ?2542次閱讀
    基于Docker Compose部署<b class='flag-5'>RabbitMQ</b>的經(jīng)驗(yàn)分享

    RabbitMQ-CN RabbitMQ中文文檔

    RabbitMQ_into_Chinese.zip
    發(fā)表于 04-19 10:51 ?0次下載
    <b class='flag-5'>RabbitMQ</b>-CN <b class='flag-5'>RabbitMQ</b>中文文檔

    什么情況下使用RabbitMQ或 Kafka

    如果你問自己是否Apache Kafka比RabbitMQ更好或RabbitMQ是否比Apache Kafka更可靠,我想在這里阻止你。本文將從更廣泛的角度討論這兩種情況。它關(guān)注的是這兩個(gè)系統(tǒng)提供的功能,并將指導(dǎo)您做出正確的決定,決定何時(shí)使用哪個(gè)系統(tǒng)。
    的頭像 發(fā)表于 02-22 10:35 ?760次閱讀
    什么情況下使用<b class='flag-5'>RabbitMQ</b>或 Kafka

    什么情況下使用RabbitMQ或 Kafka

    如果你問自己是否Apache Kafka比RabbitMQ更好或RabbitMQ是否比Apache Kafka更可靠,我想在這里阻止你。本文將從更廣泛的角度討論這兩種情況。它關(guān)注的是這兩個(gè)系統(tǒng)提供的功能,并將指導(dǎo)您做出正確的決定,決定何時(shí)使用哪個(gè)系統(tǒng)。
    的頭像 發(fā)表于 02-24 11:12 ?834次閱讀
    什么情況下使用<b class='flag-5'>RabbitMQ</b>或 Kafka

    RabbitMQ:消息傳遞的中介

    電子發(fā)燒友網(wǎng)站提供《RabbitMQ:消息傳遞的中介.zip》資料免費(fèi)下載
    發(fā)表于 06-14 16:08 ?0次下載
    <b class='flag-5'>RabbitMQ</b>:消息傳遞的中介

    rabbitmq是什么?rabbitmq安裝、原理、部署

    rabbitmq是什么? MQ的全稱是Messagee Queue,因?yàn)橄⒌年?duì)列是隊(duì)列,所以遵循FIFO 先進(jìn)先出的原則是上下游傳遞信息的跨過程通信機(jī)制。 RabbitMQ是一套開源(MPL
    的頭像 發(fā)表于 07-19 13:50 ?1320次閱讀

    RocketMQ和RabbitMQ的區(qū)別

    化:RocketMQ將消息存儲(chǔ)在磁盤上,保證消息的可靠性;RabbitMQ默認(rèn)將消息保存在內(nèi)存,可以通過插件進(jìn)行持久化。 可用性:RocketMQ具備分布
    的頭像 發(fā)表于 07-24 13:39 ?1.5w次閱讀

    Topic 模型的使用

    RabbitMQ 是一個(gè)流行的開源消息隊(duì)列軟件,它提供了多種通信模型,例如發(fā)布/訂閱模型、路由模型、work
    的頭像 發(fā)表于 09-25 11:30 ?931次閱讀

    redis和rabbitMQ的區(qū)別

    Redis和RabbitMQ之間的區(qū)別。 架構(gòu)設(shè)計(jì): Redis是一個(gè)內(nèi)存存儲(chǔ)系統(tǒng),它將數(shù)據(jù)存儲(chǔ)在內(nèi)存,以提供快速的讀寫訪問。因此,Redis的存儲(chǔ)能力受到內(nèi)存大小的限制。它使用發(fā)布/訂閱模式來處理消息隊(duì)列,發(fā)布者將消息發(fā)送到頻道,訂閱者從頻道接收消息。
    的頭像 發(fā)表于 12-04 14:48 ?2121次閱讀

    rabbitmq高可用集群搭建

    在進(jìn)行RabbitMQ搭建時(shí),我們基于現(xiàn)有的連接數(shù)據(jù)和業(yè)務(wù)需求進(jìn)行了深入分析。目前的統(tǒng)計(jì)數(shù)據(jù)顯示,連接數(shù)為631,隊(duì)列數(shù)為80418。為了確保業(yè)務(wù)需求的順利滿足,我們需要在云產(chǎn)品和自建RabbitMQ消息隊(duì)列服務(wù)之間做出選擇。
    的頭像 發(fā)表于 03-12 14:29 ?487次閱讀
    <b class='flag-5'>rabbitmq</b>高可用集群搭建

    RabbitMQ消息隊(duì)列解決方案

    在現(xiàn)代分布式系統(tǒng)架構(gòu),消息隊(duì)列作為核心組件,承擔(dān)著系統(tǒng)解耦、異步處理、流量削峰等重要職責(zé)。RabbitMQ作為一款成熟的消息隊(duì)列中間件,以其高可用性、高可靠性和豐富的特性,成為眾多企業(yè)的首選方案。本文將從運(yùn)維工程師的角度,詳細(xì)闡述Ra
    的頭像 發(fā)表于 07-08 15:55 ?181次閱讀