当前位置: 首页 > news >正文

RabbitMQ之基于注解声明队列交换机:使用@RabbitListener实现消息监听

文章目录

    • 什么是`@RabbitListener`?
    • 队列和交换机的基本概念
    • 使用`@RabbitListener`注解声明队列和交换机
      • 代码解析
        • 1. `@QueueBinding`
        • 2. 消费者方法
    • 运行原理
    • 应用场景
    • 总结

在现代的微服务架构中,消息队列是一种重要的异步通信机制。RabbitMQ作为一种流行的消息代理软件,提供了丰富的功能来处理消息的发布和订阅。在Spring Boot应用中,我们可以使用Spring AMQP提供的注解来简化RabbitMQ的配置和使用。本文将介绍如何使用 @RabbitListener注解来声明队列和交换机,并实现消息监听。

什么是@RabbitListener

@RabbitListener是Spring AMQP框架提供的一个注解,用于定义一个方法,该方法可以监听指定的队列,并在接收到消息时自动调用。通过这种方式,我们可以非常方便地实现消息的异步处理。

队列和交换机的基本概念

在RabbitMQ中,消息的传递依赖于两个核心组件:队列交换机

  • 队列(Queue):用来存储消息,消费者可以从队列中读取消息。
  • 交换机(Exchange):负责接收生产者发送的消息,并根据绑定的规则将消息路由到一个或多个队列。

常见的交换机类型有:

  • Direct:根据消息的路由键(routing key)精确匹配队列。
  • Topic:根据路由键的模式匹配队列。
  • Fanout:将消息广播到所有绑定的队列。

使用@RabbitListener注解声明队列和交换机

下面我们通过一个具体的例子来展示如何使用@RabbitListener注解来声明队列和交换机。

@RabbitListener(bindings = @QueueBinding(value = @Queue(name = "direct.queue1", durable = "true"),exchange = @Exchange(name = "hmall.direct", type = ExchangeTypes.DIRECT),key = {"red", "blue"}
))
public void listenDirectQueue1(String message) {log.info("消费者1监听到direct.queue1消息:{}", message);
}@RabbitListener(bindings = @QueueBinding(value = @Queue(name = "direct.queue2", durable = "true"),exchange = @Exchange(name = "hmall.direct", type = ExchangeTypes.DIRECT),key = {"red", "yellow"}
))
public void listenDirectQueue2(String message) {log.info("消费者2监听到direct.queue2消息:{}", message);
}

代码解析

1. @QueueBinding

@QueueBinding用于绑定队列和交换机,并指定路由键。它包含以下几个属性:

  • value:声明一个队列,使用@Queue注解。

    • name:队列名称,如direct.queue1direct.queue2
    • durable:是否持久化队列。设置为true表示消息队列重启后依然存在。
  • exchange:声明一个交换机,使用@Exchange注解。

    • name:交换机名称,如hmall.direct
    • type:交换机类型,这里使用ExchangeTypes.DIRECT表示Direct交换机。
  • key:路由键数组,指定消息匹配的路由键。如direct.queue1监听redblue两个路由键的消息。

2. 消费者方法
  • listenDirectQueue1:监听direct.queue1,当队列接收到符合路由键redblue的消息时,方法被调用,输出日志信息。
  • listenDirectQueue2:监听direct.queue2,当队列接收到符合路由键redyellow的消息时,方法被调用,输出日志信息。

运行原理

在上述代码中,我们定义了两个消费者,它们分别监听不同的队列,并根据路由键进行消息的分发。

  • hmall.direct是一个Direct类型的交换机,它将消息路由到绑定的队列中。
  • 如果发送的消息的路由键是red,则两个消费者都会接收到该消息。
  • 如果路由键是blue,只有listenDirectQueue1会接收到消息。
  • 如果路由键是yellow,只有listenDirectQueue2会接收到消息。

应用场景

这种基于注解的方式非常适合以下场景:

  1. 简单易用:不需要额外的XML或配置文件,直接在Java代码中完成队列和交换机的声明。
  2. 灵活性高:可以根据需求灵活调整队列和交换机的绑定关系。
  3. 快速开发:减少了手动配置的复杂度,加快开发速度。

总结

通过使用@RabbitListener注解,我们可以方便地在Spring Boot应用中实现RabbitMQ的消息监听和处理。它不仅简化了配置流程,还增强了代码的可读性和可维护性。在实际项目中,我们可以根据业务需求,灵活定义队列、交换机及其绑定关系,实现复杂的消息路由逻辑。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Java日志框架
  • npm、pnpm、yarn镜像源设置
  • 深入探究Liunx服务器内存:模拟程序实际占用与缓存占用内存
  • 深入理解 Go 语言信号量 Semaphore
  • 数据库事务( 五 ) Spring管理事务的几道面试题
  • 史上最详细ArduinoESP32 外部中断
  • python爬虫学习记录-请求模块urllib3
  • lvs实战项目-dr模式实现
  • github使用gh-pages部署vue静态网站(简单易懂)
  • gorm不定参数
  • 第129天:内网安全-横向移动WmiSmbCrackMapExecProxyChainsImpacket
  • SOPHGO算能科技BM1684盒子占用空间满的问题解决
  • AI大模型加持的新一代网络舆情系统——“速途观澜”舆情感知引擎发布上线
  • Hadoop的streamingAPI与MapReduce[Python]
  • 使用 NumPy 生成随机数:一个全面的指南
  • 【笔记】你不知道的JS读书笔记——Promise
  • crontab执行失败的多种原因
  • css的样式优先级
  • Debian下无root权限使用Python访问Oracle
  • django开发-定时任务的使用
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 从零开始的无人驾驶 1
  • 高性能JavaScript阅读简记(三)
  • 技术:超级实用的电脑小技巧
  • 力扣(LeetCode)22
  • 前端存储 - localStorage
  • 驱动程序原理
  • 让你的分享飞起来——极光推出社会化分享组件
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 微信小程序--------语音识别(前端自己也能玩)
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 一文看透浏览器架构
  • postgresql行列转换函数
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​TypeScript都不会用,也敢说会前端?
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #单片机(TB6600驱动42步进电机)
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • $().each和$.each的区别
  • (09)Hive——CTE 公共表达式
  • (2020)Java后端开发----(面试题和笔试题)
  • (C++二叉树05) 合并二叉树 二叉搜索树中的搜索 验证二叉搜索树
  • (floyd+补集) poj 3275
  • (MTK)java文件添加简单接口并配置相应的SELinux avc 权限笔记2
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (三)终结任务
  • (新)网络工程师考点串讲与真题详解
  • (一)appium-desktop定位元素原理
  • (转)Windows2003安全设置/维护
  • .bat批处理(七):PC端从手机内复制文件到本地