RabbitMQ之 Direct 交换机

news2025/1/21 12:00:02

👽System.out.println(“👋🏼嗨,大家好,我是代码不会敲的小符,双非大四,Java实习中…”);
📚System.out.println(“🎈如果文章中有错误的地方,恳请大家指正!共同进步,共同成长✊”);
🌟System.out.println(“💡如果文章对您有所帮助,希望您可以三连支持一下博主噢🔥”);
🌈System.out.println("🚀正在完成计划中:接下来的三个月里,对梦想的追逐 ");

文章目录

    • Direct交换机
      • 模拟使用 DirectExchange
      • 发送者(生产者)
      • 消费者
    • 交换机的作用
    • 最后

Direct交换机

Direct Exchange 会将接收到的消息根据规则路由到指定的Queue因此称为定向路由

  • 每一个Queue都与Exchange设置一个BindingKey
  • 发布者发送消息时,指定消息的RoutingKey
  • Exchange将消息路由到BindingKey与消息RoutingKey一致的队列image.png

模拟使用 DirectExchange

利用SpringAMQP演示的使用,实现思路如下

  1. 在RabbitMQ控制台中,声明队列direct.queue1和direct.queue2
  2. direct.queue1 绑定路由 red、blue;direct.queue2 绑定路由 red、yellow
  3. 在RabbitMQ控制台中,声明交换机directTest.direct,将两个队列与其绑定
  4. 在consumer服务中,编写两个消费者方法,分别监听direct.queue1和direct.queue2
  5. 在publisher中编写测试方法,向directTest.direct发送消息

发送者(生产者)

@SpringBootTest
public class SpringAmqpTest {
    @Autowired
    private RabbitTemplate rabbitTemplate;

    @Test
    public void testSendMessage2DirectQueue1() {
        String exchangeName = "directTest.direct";
        String msg = "hello, exchangeName_directTest, message: red! red! red! " ;
        rabbitTemplate.convertAndSend(exchangeName, "red", msg);
    }
    @Test
    public void testSendMessage2DirectQueue2() {
        String exchangeName = "directTest.direct";
        String msg = "hello, exchangeName_directTest, message: blue! blue! blue! " ;
        rabbitTemplate.convertAndSend(exchangeName, "blue", msg);
    }
    @Test
    public void testSendMessage2DirectQueue3() {
        String exchangeName = "directTest.direct";
        String msg = "hello, exchangeName_directTest, message: yellow! yellow! yellow! " ;
        rabbitTemplate.convertAndSend(exchangeName, "yellow", msg);
    }
}

消费者

@Component
@Slf4j
public class RabbitMqListener {

    @RabbitListener(queues = "direct.queue1")
    public void listenDirectQueueMessage1(String msg) {
        log.info("directConsumer1 accept message: {}", msg);
        log.info("directConsumer1 message success!");
    }

    @RabbitListener(queues = "direct.queue2")
    public void listenDirectQueueMessage2(String msg) {
        log.info("directConsumer2 accept message: {}", msg);
        log.info("directConsumer2 message success!");
    }
}

交换机的作用

  • 接收publisher发送的消息
  • 将消息按照规则路由到与之绑定的队列
  • Direct Exchange 将消息路由转发到 BindingKey 与消息 RoutingKey 一致的队列。Direct交换机是根据消息的Routing Key来进行路由的
  • DirectExchange 通常用于一对一的消息传递场景,例如,订单系统中的订单创建、修改和取消等消息需要被路由到不同的队列中进行处理。在这种场景下,每个队列都需要绑定一个唯一的Routing Key,以确保消息能够被正确地路由到目标队列中去

最后

慢慢的来,别着急!学会有质量的走过每一步


我是代码不会敲的小符,希望认识更多有经验的大佬,也在努力摸索出自己的道路
欢迎添加小符微信:A13781678921,一起加油

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1454968.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【python】python入门(变量名)

Hi~ o(* ̄▽ ̄*)ブ今天一起来看看python入门之变量名吧~~ 变量名的规定: 举个例子: “违法”的变量名们 my love/my !love错误:中间不能是空格或者其他符号1my_love错误:不能数字开头"my_l…

【Spring底层原理高级进阶】轻松掌握 Spring MVC 的拦截器机制:深入理解 HandlerInterceptor 接口和其实现类的用法

🎉🎉欢迎光临🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟特别推荐给大家我的最新专栏《Spring 狂野之旅:底层原理高级进阶》 &#x1f680…

区块链技术和Hyperledger Fabric介绍

1 区块链介绍 1.1 区块链技术形成 1.1.1 起源 在比特币诞生之时,技术专家们开始研究比特币的底层技术,并抽象提取出来,形成区块链技术,或者称分布式账本技术。 1.1.2 定义 简称BT(Blockchain technology&#xff…

包教包会的Kotlin Flow教程

原文链接 包教包会的Kotlin Flow教程 公众号「稀有猿诉」 Kotlin中的Flow是专门用于处理异步数据流的API,是函数响应式编程范式(Functional Reactive Programming FRP)在Kotlin上的一个实现,并且深度融合了Kotlin的协程。是Kotlin中处理异步数据…

【PCIE709-F】基于复旦微JFM7VX690T80 FPGA的全国产化8通道光纤双FMC接口数据处理平台

板卡概述 PCIE709-F是一款基于上海复旦微电子的28nm 7系列FPGA JFM7VX690T80的全国产化8通道光纤双FMC接口数据预处理平台,该板卡采用复旦微的高性能7系列FPGA作为实时处理器,实现4路10G SFP光纤以及1路QSFP通信接口、实现1路X8 PCIE数据传输的功能。板载…

using--基础

using 关键字的作用 using声明---using declaration 就是声明一个已经存在的命名空间,命名空间成员,枚举,类成员对象等。 声明实现的原理 在 C 中,变量的声明并不等于变量的实现,变量声明只是告诉编译器该变量的名…

离谱!用ChatGPT进行审稿!

离谱!用ChatGPT进行审稿! 关注微信公众号: DeepGoAI 在这个信息爆炸的时代,AI已经跑到了学术会议的后台,偷偷摸摸地开始“帮忙”审稿了!🤖 最近,一位教授的LinkedIn动态可谓是火了一把&#xf…

Android 基础技术——HashMap

笔者希望做一个系列,整理 Android 基础技术,本章是关于HashMap HaspMap的默认初始长度是16,并且每次扩展长度或者手动初始化时,长度必须是2的次幂。 为什么长度是2的x次幂和每次扩容都是2倍?? 1)当一个key被放进到数…

大数据,对于生活的改变

谷歌通过对于疾病的查询量可以预测一个个h1n1病毒的大爆发, 大数据时代对于人的考验 用户的搜索记录就是一种信息,这种信息会满足其基础相关的词条与其有关的词条(最为原始的搜索机制,国内的搜索引擎都是采用这种基础原理。&…

【论文阅读笔记】Contrastive Learning with Stronger Augmentations

Contrastive Learning with Stronger Augmentations 摘要 基于提供的摘要,该论文的核心焦点是在对比学习领域提出的一个新框架——利用强数据增强的对比学习(Contrastive Learning with Stronger Augmentations,简称CLSA)。以下…

【Linux】简单的网络计算器的实现(自定义协议,序列化,反序列化)

文章目录 前言一、 服务端1.ServerCal.cc(服务器主文件)2.ServerCal.hpp3.Sock.hpp(套接字封装)4.TcpServer.hpp(服务器)5.Protocol(自定义协议) 二、用户端1.ClientCal 三、Log.hpp(日志)四、makefile 前言…

宜昌博物馆龙文物展,以数据为盾完成文物保护

​一、湖北宜昌博物馆龙文物精品展的独特魅力 近日,在湖北宜昌博物馆举行的甲辰年龙文物精品展上,多件包含“龙元素”的文物正式向社会展出。龙自古以来就是中华民族象征,带有“龙图案”或“龙元素”的物件,广泛存在于中国人“吃…

JVM-JVM调优基础(理论)

申明:文章内容是本人学习极客时间课程所写,作为笔记进行记录,文字和图片基本来源于课程资料,在某些地方会插入一点自己的理解,未用于商业用途,侵删。 原资料地址:课程资料 JVM参数 标准参数 …

人工智能学习与实训笔记(十五):Scikit-learn库的基础与使用

人工智能专栏文章汇总:人工智能学习专栏文章汇总-CSDN博客 本篇目录 一、介绍 1. 1 Scikit-learn的发展历程及定义 1.2 理解算法包、算法库及算法框架之间的区别和联系 二、Scikit-learn官网结构 三、安装与设置 3.1 Python环境的安装与配置 3.2 Scikit-lea…

如何实现批量获取电商数据自动化商品采集?如何利用电商数据API实现业务增长?

随着电子商务的快速发展,数据已经成为了电商行业最重要的资产之一。在这个数据驱动的时代,电商数据API(应用程序接口)的作用日益凸显。通过电商数据API,商家能够获取到大量关于消费者行为、产品表现、市场趋势等有价值…

模拟电子技术——基本微积分运算电路、滤波器、一阶低通滤波器、一阶高通滤波器、电压比较器、滞回比较器

文章目录 一、基本微积分运算电路什么是微积分电路电路及特点及参数计算-积分电路电路及特点及参数计算-微分电路 二、滤波器什么是滤波器滤波器分类有源无源的电路结构区别通带与阻带参数 三、一阶低通滤波器什么是一阶低通滤波器低通滤波器特性电路及相关特性 四、一阶高通滤…

【笔记------STM32】MX_RTC_Init()初始化RTC时RTC_ISR_INITF位超时失败的解决方法

RTC和flash有点像,有些功能需要解锁才能配置,虽然cubeMX生成的RTC部分的解锁配置正确,但却没有配置好前提条件:关闭PWR模块的备份域写保护使能,有点奇怪,手动关掉就好了 现象:进入RTC_EnterInit…

打开ps显示找不到dll怎么办?这四种方法可快速修复

在计算机操作系统中,当执行某程序或运行特定软件时,如果系统提示“ps显示找不到dll文件”,这其实是一个较为常见的问题现象。动态链接库(DLL)文件是Windows操作系统中不可或缺的重要组件,它包含了大量可被多…

Spring Boot 笔记 024 登录页面

1.1 登录接口 //导入request.js请求工具 import request from /utils/request.js//提供调用注册接口的函数 export const userRegisterService (registerData)>{//借助于UrlSearchParams完成传递const params new URLSearchParams()for(let key in registerData){params.a…

【Git】 大厂代码提交原则(适用新手,细节拉满)

目录 git是什么,为什么要学git 开发目录 提交到github/gitee的命令 提交代码时的注意事项 git 的其他命令 git是什么,为什么要学git git 是一个免费的、开源的分布式版本控制系统,git可以追踪文件的修改历史,并且在不同的人员…