SpringBoot实现RabbitMQ的定向交换机(SpringAMQP 实现Direct定向交换机)

本文主要是介绍SpringBoot实现RabbitMQ的定向交换机(SpringAMQP 实现Direct定向交换机),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


文章目录

  • Direct 交换机特点
  • 实战
    • 声明交换及其队列(以注解方式)
    • 发消息
  • 应用


在这里插入图片描述

上一篇文章中的 Fanout 模式,一条消息,会被所有订阅其交换机的队列都消费。

但是,在某些场景下,我们希望不同的消息被不同的队列消费。这时就要用到 Direct类型的交换机。

Direct 交换机特点

在Direct模型下:

  • 队列与交换机的绑定,不能是任意绑定了,而是要指定一个RoutingKey(路由key)
  • 消息的发送方在 向 Exchange发送消息时,也必须指定消息的 RoutingKey
  • Exchange不再把消息交给每一个绑定的队列,而是根据消息的Routing Key进行判断,只有队列的Routingkey与消息的 Routing key完全一致,才会接收到消息

实战

我们定义一个定向交换机( Direct Exchange )
再定义两个队列,让这两个队列绑定到该交换机上,并且按照如下图 key 的规则绑定.

在这里插入图片描述

声明交换及其队列(以注解方式)

上篇文章是按照基于@Bean的方式声明队列和交换机比较麻烦,Spring还提供了基于注解方式来声明。

consumerSpringRabbitListener 中添加两个消费者,同时基于注解来声明队列和交换机:

 /** 基于注解的来声明交换机和队列及其绑定关系 */
@RabbitListener( bindings = @QueueBinding(exchange = @Exchange(name = "test2024.direct", type = ExchangeTypes.DIRECT),value = @Queue(name = "test2024.direct.redOrBlueOrYellow"),key = {"red", "yellow", "blue"}
))
public void rabbitListener5(String message) {System.out.println("红黄蓝: " + message);
}@RabbitListener( bindings = @QueueBinding(exchange = @Exchange(name = "test2024.direct", type = ExchangeTypes.DIRECT),value = @Queue(name = "test2024.direct.WhiteOrBlack"),key = {"white", "black"}
))
public void rabbitListener6(String message) {System.out.println("黑白: " + message);
}
/** 基于注解的来声明交换机和队列及其绑定关系 */

启动上面的服务后 我们发现指定的交换机和队列都创建好了

在这里插入图片描述


发消息

//  测试定向交换机
@Test
public void test03() throws InterruptedException {String exchangeName = "test2024.direct";String[] keyArray = {"red", "yellow", "blue", "black", "white"};String message = "this is a message from direct! key: ";for (int i = 0; i < 50; i++) {int index = new Random().nextInt(keyArray.length);rabbitTemplate.convertAndSend(exchangeName, keyArray[index], message + keyArray[index]);}Thread.sleep(500);
}

在这里插入图片描述


看到数据都规规整整的进入指定的key对应的队列,并被消费.


应用

Direct 交换机适用于一对一的消息传递模式,它通过消息的路由键(Routing Key)将消息发送到与之完全匹配的队列中。因此,Direct交换机常用于以下情况:

  • 点对点通信:当系统中存在一对一的通信需求时,可以使用Direct交换机来确保消息被准确地路由到目标队列。例如,订单系统中将订单消息发送到指定的订单处理队列。

  • 任务分发:在分布式系统中,可以使用Direct交换机来将任务分发到不同的工作节点。每个工作节点都可以绑定一个特定的队列,根据任务的类型或者其他属性,将任务发送到相应的队列中。

  • 系统内部通知:当系统需要向特定的用户或者部门发送通知消息时,可以使用Direct交换机来确保消息仅发送给目标接收者,而不会广播给所有用户。

  • 错误处理:在系统中可能会发生错误,需要将错误消息发送到指定的队列中进行处理。Direct交换机可以将错误消息准确地路由到错误处理队列,方便进行后续的排查和处理。

Direct交换机适用于需要精确路由消息到指定队列的场景,是一种简单而高效的消息传递方式。



在这里插入图片描述



这篇关于SpringBoot实现RabbitMQ的定向交换机(SpringAMQP 实现Direct定向交换机)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/860866

相关文章

解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题

《解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题》本文主要讲述了在使用MyBatis和MyBatis-Plus时遇到的绑定异常... 目录myBATis-plus-boot-starpythonter与mybatis-spring-b

Java中switch-case结构的使用方法举例详解

《Java中switch-case结构的使用方法举例详解》:本文主要介绍Java中switch-case结构使用的相关资料,switch-case结构是Java中处理多个分支条件的一种有效方式,它... 目录前言一、switch-case结构的基本语法二、使用示例三、注意事项四、总结前言对于Java初学者

关于Java内存访问重排序的研究

《关于Java内存访问重排序的研究》文章主要介绍了重排序现象及其在多线程编程中的影响,包括内存可见性问题和Java内存模型中对重排序的规则... 目录什么是重排序重排序图解重排序实验as-if-serial语义内存访问重排序与内存可见性内存访问重排序与Java内存模型重排序示意表内存屏障内存屏障示意表Int

Python pyinstaller实现图形化打包工具

《Pythonpyinstaller实现图形化打包工具》:本文主要介绍一个使用PythonPYQT5制作的关于pyinstaller打包工具,代替传统的cmd黑窗口模式打包页面,实现更快捷方便的... 目录1.简介2.运行效果3.相关源码1.简介一个使用python PYQT5制作的关于pyinstall

使用Python实现大文件切片上传及断点续传的方法

《使用Python实现大文件切片上传及断点续传的方法》本文介绍了使用Python实现大文件切片上传及断点续传的方法,包括功能模块划分(获取上传文件接口状态、临时文件夹状态信息、切片上传、切片合并)、整... 目录概要整体架构流程技术细节获取上传文件状态接口获取临时文件夹状态信息接口切片上传功能文件合并功能小

python实现自动登录12306自动抢票功能

《python实现自动登录12306自动抢票功能》随着互联网技术的发展,越来越多的人选择通过网络平台购票,特别是在中国,12306作为官方火车票预订平台,承担了巨大的访问量,对于热门线路或者节假日出行... 目录一、遇到的问题?二、改进三、进阶–展望总结一、遇到的问题?1.url-正确的表头:就是首先ur

C#实现文件读写到SQLite数据库

《C#实现文件读写到SQLite数据库》这篇文章主要为大家详细介绍了使用C#将文件读写到SQLite数据库的几种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录1. 使用 BLOB 存储文件2. 存储文件路径3. 分块存储文件《文件读写到SQLite数据库China编程的方法》博客中,介绍了文

Java汇编源码如何查看环境搭建

《Java汇编源码如何查看环境搭建》:本文主要介绍如何在IntelliJIDEA开发环境中搭建字节码和汇编环境,以便更好地进行代码调优和JVM学习,首先,介绍了如何配置IntelliJIDEA以方... 目录一、简介二、在IDEA开发环境中搭建汇编环境2.1 在IDEA中搭建字节码查看环境2.1.1 搭建步

Redis主从复制实现原理分析

《Redis主从复制实现原理分析》Redis主从复制通过Sync和CommandPropagate阶段实现数据同步,2.8版本后引入Psync指令,根据复制偏移量进行全量或部分同步,优化了数据传输效率... 目录Redis主DodMIK从复制实现原理实现原理Psync: 2.8版本后总结Redis主从复制实

javafx 如何将项目打包为 Windows 的可执行文件exe

《javafx如何将项目打包为Windows的可执行文件exe》文章介绍了三种将JavaFX项目打包为.exe文件的方法:方法1使用jpackage(适用于JDK14及以上版本),方法2使用La... 目录方法 1:使用 jpackage(适用于 JDK 14 及更高版本)方法 2:使用 Launch4j(