色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

RabbitMQ中的路由模型(direct)

科技綠洲 ? 來源:了不起 ? 作者:了不起 ? 2023-09-25 11:32 ? 次閱讀

路由模型

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

路由模型(direct):路由模式相當于是分布訂閱模式的升級版,多了一個 路由key來約束隊列與交換機的綁定。

在路由模型中,生產者將消息發送到交換機,交換機根據消息的路由鍵將消息轉發到對應的隊列中。每個隊列可以綁定多個路由鍵,每個路由鍵可以綁定到多個隊列中。消費者從隊列中接收消息并處理。當一個路由鍵被多個隊列綁定時,交換機會將消息發送到所有綁定的隊列中。當一個隊列綁定多個路由鍵時,該隊列將能夠接收到所有路由鍵對應的消息。

適用場景

路由模型適用于需要點對點通信的場景,例如:

  1. 系統監控告警通知;
  2. 任務分發;
  3. 用戶私信系統;
  4. 訂單確認通知等。

演示

  1. 生產者

    // 生產者
    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, ("路由模型發送的第 " + i + " 條信息").getBytes());
                } else {
                    channel.basicPublish(EXCHANGE_NAME, EXCHANGE_ROUTING_KEY2, null, ("路由模型發送的第 " + i + " 條信息").getBytes());
                }
            }
            channel.close();
            connection.close();
        }
    }
    
  2. 消費者

    // 消費者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("消費者1接收到的消息是:" + new String(body));
                }
            };
            channel.basicConsume(QUEUE_NAME, true, defaultConsumer);
        }
    }
    
    // 消費者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("消費者2接收到的消息是:" + new String(body));
                }
            };
            channel.basicConsume(QUEUE_NAME, true, defaultConsumer);
        }
    }
    
  3. 測試
    先啟動2個消費者,再啟動生產者
    可以得到結果是消費者1得到了序號是偶數的消息
    消費者2得到了序號是奇數的消息

小結

本文介紹了 RabbitMQ 通信模型中的路由模型的使用,通過交換機和路由鍵實現點對點通信,適合于需要點對點通信的場景。在實際使用過程中,需要注意以下幾點:

  1. 路由鍵必須要與消費者綁定隊列時的路由鍵相同,否則無法接收到消息;
  2. 可以通過多個交換機和路由鍵來實現更靈活的消息路由。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 交換機
    +關注

    關注

    21

    文章

    2637

    瀏覽量

    99531
  • 路由
    +關注

    關注

    0

    文章

    278

    瀏覽量

    41836
  • 模型
    +關注

    關注

    1

    文章

    3226

    瀏覽量

    48807
  • Direct
    +關注

    關注

    0

    文章

    15

    瀏覽量

    11155
  • rabbitmq
    +關注

    關注

    0

    文章

    17

    瀏覽量

    1026
收藏 人收藏

    評論

    相關推薦

    RabbitMQ的發布訂閱模型

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

    RabbitMQ通信模型的work模型

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

    RabbitMQ是什么

    在工作中經常會用到消息隊列處理各種問題,今天指北君帶領大家來學一個很常用到的技術-RabbitMQ;接下來還會有關于RabbitMQ的系列教程,對你有幫助的話記得關注哦~ RabbitMQ
    的頭像 發表于 09-25 14:36 ?850次閱讀
    <b class='flag-5'>RabbitMQ</b>是什么

    RabbitMq入門教程

    RabbitMQ是一個開源的,在AMQP基礎上完整的,可復用的企業消息系統。
    的頭像 發表于 12-04 11:10 ?496次閱讀
    <b class='flag-5'>RabbitMq</b>入門教程

    基于Docker Compose部署RabbitMQ的經驗分享

    RabbitMQ 是一個功能強大的開源消息隊列系統,它實現了高效的消息通信和異步處理。
    的頭像 發表于 01-03 10:22 ?1920次閱讀
    基于Docker Compose部署<b class='flag-5'>RabbitMQ</b>的經驗分享

    Rabbitmq與esp-open-rtos集成失敗了怎么解決?

    我嘗試將 Rabbitmq 與 esp-open-rtos 集成,但失敗了。 誰能幫忙?
    發表于 05-10 11:45

    多態路由承載的內容分發模型

    針對命名數據網絡( NDN)難以保障多樣化業務服務需求問題,提出了多態路由承載的內容分發模型( CDMPR)。該模型通過內容請求、路由計算、內容查表和內容緩存四種類型的重構模塊組合來承
    發表于 12-06 17:04 ?0次下載
    多態<b class='flag-5'>路由</b>承載的內容分發<b class='flag-5'>模型</b>

    RabbitMQ-CN RabbitMQ中文文檔

    RabbitMQ_into_Chinese.zip
    發表于 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更可靠,我想在這里阻止你。本文將從更廣泛的角度討論這兩種情況。它關注的是這兩個系統提供的功能,并將指導您做出正確的決定,決定何時使用哪個系統。
    的頭像 發表于 02-22 10:35 ?568次閱讀
    什么情況下使用<b class='flag-5'>RabbitMQ</b>或 Kafka

    什么情況下使用RabbitMQ或 Kafka

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

    RabbitMQ:消息傳遞的中介

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

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

    rabbitmq是什么? MQ的全稱是Messagee Queue,因為消息的隊列是隊列,所以遵循FIFO 先進先出的原則是上下游傳遞信息的跨過程通信機制。 RabbitMQ是一套開源(MPL
    的頭像 發表于 07-19 13:50 ?1030次閱讀

    RocketMQ和RabbitMQ的區別

    化:RocketMQ將消息存儲在磁盤上,保證消息的可靠性;RabbitMQ默認將消息保存在內存,可以通過插件進行持久化。 可用性:RocketMQ具備分布
    的頭像 發表于 07-24 13:39 ?1.4w次閱讀

    Topic 模型的使用

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

    redis和rabbitMQ的區別

    Redis和RabbitMQ之間的區別。 架構設計: Redis是一個內存存儲系統,它將數據存儲在內存,以提供快速的讀寫訪問。因此,Redis的存儲能力受到內存大小的限制。它使用發布/訂閱模式來處理消息隊列,發布者將消息發送到頻道,訂閱者從頻道接收消息。
    的頭像 發表于 12-04 14:48 ?1389次閱讀
    主站蜘蛛池模板: 免费一级特黄欧美大片久久网| 破苞流血哭泣 magnet| 寂寞夜晚视频在线观看| 青春草国产成人精品久久| 一本道高清不卡v免费费| 动漫美女和男人下载| 男人桶女人j的视频在线观看| 亚洲欧美日本中文子不卡| 国产欧美一本道无码| 草莓在线观看| 欧美日韩中文国产一区发布| 中文在线观看免费网站| 黑人干肥婆| 亚洲午夜精品A片久久软件| 国产欧美第一页| 我在厨房摸岳的乳HD在线观看| 爱穿丝袜的麻麻3d漫画acg| 青青草色青伊人| 成人影片下载网站| 视频成人永久免费看| 国产在线播放不卡| 日本视频中文字幕一区二区| 成人免费视频在线播放| 日韩在线中文字幕无码| 国产精品一区二区在线观看| 亚洲 欧美 日韩 精品 自拍| 国产亚洲欧洲日韩在线三区| 亚洲天堂2017无码| 欧美14videosex性欧美成人| 第一次处破女完整版电影| 亚洲AV怡红院AV男人的天堂| 久久成人永久免费播放| brazzers欧美孕交| 亚洲精品不卡视频| 免费观看a视频| 国产区免费在线观看| 18和谐综合色区| 性做久久久久免费观看| 男人把女人桶到爽免费看视频| 国产成人一区免费观看| 中文字幕乱码一区AV久久|