RabbitMQ第四个实操小案例——DirectExchange
创始人
2024-01-29 02:17:48
0

文章目录

  • 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,编写两个消费者方法。

@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发送消息。

    @Testpublic 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.

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...