RabbitMQ第四个实操小案例——DirectExchange

news/2024/7/8 6:15:11 标签: java-rabbitmq, rabbitmq, java

文章目录

  • RabbitMQ第四个实操小案例——DirectExchange

RabbitMQ第四个实操小案例——DirectExchange

DirectExchange:这种交换机的模式跟前面的Fouout(广播)不太一样,DirectExchange 会将接收到的消息根据规则路由到指定的Queue,因此也被称之为 路由模式(routes)。

他的模型如下所示:
在这里插入图片描述
我们先说一下上面这个图吧:

  • 每一个Queue都与Exchange绑定一个或多个bingingKey。(上面queue1与exchange绑定的bindingKey有red和blue,queue2与exchange绑定的bindingKey有red和yellow。)
  • Publisher发送消息时,指定消息的bindingKey。
  • Exchange根据消息的bindingKey,将消息转发到对应的Queue。
    • 假如现在发送的消息的bindingKey为blue,那么消息将被queue1接收。
    • 假如现在发送的消息的bindingKey为yellow,那么消息将被queue2接收。
    • 假如现在发送的消息的bindingKey为red,那么消息将被queue1和queue2同时接收。

OK,废话少说,老规矩,咱们代码来一波:
实现思路:

步骤一、配置我们的配置类。
步骤二、在Consumer服务中,编写两个消费者方法,分别监听direct.queue1和direct.queue2。
步骤三、在Publisher服务中,编写测试方法,向交换机exchange.direct发送消息。

步骤一、使用我们的@RabbitListener注解声明我们的Exchange、Queue、RoutingKey,编写两个消费者方法。

java">@RabbitListener(bindings = @QueueBinding(
        value = @Queue(name = "direct.queue1"),
        exchange = @Exchange(name = "exchange.direct", type = ExchangeTypes.DIRECT),
        key = {"red", "blue"}
))
public void listenerDirectQueue1(String msg){
    System.out.println("监听到 direct.queue1 的消息为:【"+ msg +"】");
}

@RabbitListener(bindings = @QueueBinding(
        value = @Queue(name = "direct.queue2"),
        exchange = @Exchange(name = "exchange.direct", type = ExchangeTypes.DIRECT),
        key = {"red", "yellow"}
))
public void listenerDirectQueue2(String msg){
    System.err.println("监听到 direct.queue2 的消息为:【"+ msg +"】");
}

编写完代码,我们重启一下我们的消费者服务,然后我们看一下我们的RabbitMQ。可以看到,此时我们的交换机中,绑定的有两个queue,其中queue1监听的RoutingKey有blue和red、queue2监听的RoutingKey有yellow和red。
在这里插入图片描述
我们也可以看看我们的queue,确实也多了俩,一个叫direct.queue1,一个叫direct.queue2。
在这里插入图片描述

步骤二、在Publisher服务中,编写测试方法,向交换机exchange.direct发送消息。

java">    @Test
    public void testDirectExchange(){
        //交换机的名称
        String exchangeName = "exchange.direct";
        //消息
        String blueMsg = "Hello, Blue.";
        String redMsg = "Hello, Red.";
        String yellowMsg = "Hello, Yellow.";
        //发送消息
        for (int i = 0; i < 10; i++){
            if (i % 3 == 0){
                rabbitTemplate.convertAndSend(exchangeName, "blue", blueMsg);
            }else if (i % 3 == 1){
                rabbitTemplate.convertAndSend(exchangeName, "yellow", yellowMsg);
            }else {
                rabbitTemplate.convertAndSend(exchangeName, "red", redMsg);
            }
        }
    }

运行我们的测试方法后,我们看一下Consumer服务的控制台打印消息:
在这里插入图片描述
可以看到,direct.queue1 监听到的消息有 Hello, Red 和 Hello, Blue,而direct.queue2 监听到的消息有 Hello, Red 和 Hello, Yellow.


http://www.niftyadmin.cn/n/1733232.html

相关文章

javascript面向对象技术基础(六)

http://sdcyst.javaeye.com/blog/296492作用域、闭包、模拟私有属性 先来简单说一下变量作用域&#xff0c;这些东西我们都很熟悉了&#xff0c;所以也不详细介绍。 Js代码 var sco "global"; //全局变量 function t() { var sco "local"; //函…

javascript面向对象技术基础(四)

http://sdcyst.javaeye.com/blog/288808类、构造函数、原型 先来说明一点:在上面的内容中提到,每一个函数都包含了一个prototype属性,这个属性指向了一个prototype对象(Every function has a prototype property that refers to a predefined prototype object --section8.6.…

树莓派安装Web服务器Boa和CGIC

树莓派安装Web服务器Boa和CGIC 陈拓 2020/08/01-2020/08/09 1. 树莓派换源 为了加快所需软件的下载&#xff0c;我们需要先换源。 首先查看系统版本&#xff1a;lsb_release -a修改软件更新源 /etc/apt/sources.list sudo nano /etc/apt/sources.list 在下面的语句前面加#注…

树莓派I2C通过Shell操作FDC2214

陈拓 chentuoms.xab.ac.cn 2020/07/21-2020/07/29 FDC2214是Ti公司的一款低功耗高精度的电容传感器芯片。本文讲述用树莓派Linux Shell配置和操作FDC2214&#xff0c;可以快速熟悉并进行原型开发。 1. 树莓派换源 为了加快所需软件的下载&#xff0c;我们需要先换源。 首先查…

界面渐变特效 -- CSS实现 -- 兼容IE8

特别注意&#xff1a;里面的RGB颜色值必须要全写&#xff0c;不能使用缩写。左右&#xff1a;background: -webkit-gradient(linear, 0 0, 0 100%, from(#80c1e7), to(#213c7c)); background: -webkit-linear-gradient(left, #80c1e7, #213c7c); background: -moz-linear-g…

javascript面向对象技术基础(二)

数组 我们已经提到过,对象是无序数据的集合,而数组则是有序数据的集合,数组中的数据(元素)通过索引(从0开始)来访问,数组中的数据可以是任何的数据类 型.数组本身仍旧是对象,但是由于数组的很多特性,通常情况下把数组和对象区别开来分别对待(Throughout this book, objects and…

树莓安装Nginx并支持CGI

陈拓 2020.09.17/2020.09.17 1. 概述 百度百科对Nginx 的介绍&#xff1a; Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器&#xff0c;同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔赛索耶夫为俄罗斯访问量第二的Rambler.ru站点&#xff08;俄文&#xff1a;…

Position属性四个值:static、fixed、absolute和relative的区别

1、static&#xff08;静态定位&#xff09;&#xff1a;默认值。没有定位&#xff0c;元素出现在正常的流中&#xff08;忽略 top, bottom, left, right 或者 z-index 声明&#xff09;。 2、relative&#xff08;相对定位&#xff09;&#xff1a;生成相对定位的元素&#x…