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.queue1和direct.queue2。 - durable:是否持久化队列。设置为
true表示消息队列重启后依然存在。
- name:队列名称,如
-
exchange:声明一个交换机,使用
@Exchange注解。- name:交换机名称,如
hmall.direct。 - type:交换机类型,这里使用
ExchangeTypes.DIRECT表示Direct交换机。
- name:交换机名称,如
-
key:路由键数组,指定消息匹配的路由键。如
direct.queue1监听red和blue两个路由键的消息。
2. 消费者方法
listenDirectQueue1:监听direct.queue1,当队列接收到符合路由键red或blue的消息时,方法被调用,输出日志信息。listenDirectQueue2:监听direct.queue2,当队列接收到符合路由键red或yellow的消息时,方法被调用,输出日志信息。
运行原理
在上述代码中,我们定义了两个消费者,它们分别监听不同的队列,并根据路由键进行消息的分发。
hmall.direct是一个Direct类型的交换机,它将消息路由到绑定的队列中。- 如果发送的消息的路由键是
red,则两个消费者都会接收到该消息。 - 如果路由键是
blue,只有listenDirectQueue1会接收到消息。 - 如果路由键是
yellow,只有listenDirectQueue2会接收到消息。
应用场景
这种基于注解的方式非常适合以下场景:
- 简单易用:不需要额外的XML或配置文件,直接在Java代码中完成队列和交换机的声明。
- 灵活性高:可以根据需求灵活调整队列和交换机的绑定关系。
- 快速开发:减少了手动配置的复杂度,加快开发速度。
总结
通过使用@RabbitListener注解,我们可以方便地在Spring Boot应用中实现RabbitMQ的消息监听和处理。它不仅简化了配置流程,还增强了代码的可读性和可维护性。在实际项目中,我们可以根据业务需求,灵活定义队列、交换机及其绑定关系,实现复杂的消息路由逻辑。
相关文章:
RabbitMQ之基于注解声明队列交换机:使用@RabbitListener实现消息监听
文章目录 什么是RabbitListener?队列和交换机的基本概念使用RabbitListener注解声明队列和交换机代码解析1. QueueBinding2. 消费者方法 运行原理应用场景总结 在现代的微服务架构中,消息队列是一种重要的异步通信机制。RabbitMQ作为一种流行的消息代理软…...
【grafana 】mac端grafana配置的文件 grafana.ini 及login
brew services start grafana 以后,怎么知道mac端的配置文件的路径 brew services restart grafana#brew services start grafana在macOS上使用Homebrew安装并启动Grafana服务后,通常的配置文件路径是在以下两个位置之一: Homebrew默认配置文件路径:/usr/local/etc/grafana…...
程序员如何在人工智能时代保持核心竞争力
目录 1.概述 1.1. 技术深度与广度的平衡 1.2. 软技能的培养 1.3. 持续学习和适应性 1.4. 理解和应用AI 1.5. 伦理和责任意识 2.AI辅助编程对程序员工作的影响 2.1.AI工具对编码实践的积极影响 2.2.AI工具的潜在风险 2.3.如何平衡利与弊 3.程序员应重点发展的核心能力…...
回溯排列+棋盘问题篇--代码随想录算法训练营第二十三天| 46.全排列,47.全排列 II,51. N皇后,37. 解数独
46.全排列 题目链接:. - 力扣(LeetCode) 讲解视频: 组合与排列的区别,回溯算法求解的时候,有何不同? 题目描述: 给定一个不含重复数字的数组 nums ,返回其 所有可能…...
ESXI加入VMware现有集群提示常规性错误
集群内有vSphere6.5和6.7的版本,都开启了EVC 这台老服务器是DELL R710添加时报错,网上查了些资料说要重装ESXI或者关闭EVC等等 最终解决方法是,给这台ESXI配置一个NTP服务器,同步系统时间,之后即可正常加入集群 往期文…...
数字噪音计(声级计)【AR814数字噪音计】
系统介绍 声级计,又叫噪音计,是噪声测量中最基本的仪器。声级计一般由电容式传声器、前置放大器、衰减器、放大器、频率计权网络以及有效值指示表头等组成。 声级计的工作原理是:由传声器将声音转换成电信号,再由前置放大器放大…...
【Vue3】图片未加载成功前占位
背景 在写项目时,加载图片未成功前,会出现空白页面,太影响美观和体验感 解决方案 1. element ui通过slot占位符解决 2. 自定义指令 原生img标签可以通过自定义指令解决,img标签有onload和onerror事件,都是在渲染成…...
AbstractQueuedSynchronizer之AQS
目录 AQS简单入门为什么说AQS是JUC包下的重要基石AQS能干嘛?实际实现原理AQS自身成员变量Node内部类的成员变量源码解读总结 AQS简单入门 AQS是抽象的队列同步器,是用来实现锁或者其它同步器组件的公共基础部分的抽象实现,是重量级基础框架及…...
<数据集>起重机识别数据集<目标检测>
数据集格式:VOCYOLO格式 图片数量:2984张 标注数量(xml文件个数):2984 标注数量(txt文件个数):2984 标注类别数:1 标注类别名称:[cranes] 使用标注工具:labelImg 标注规则:对…...
04--Docker
前言:前面写过关于DockerKubernetes的部署,主要是针对国产化linux系统的适配问题,并没有对docker进行复习。这里整理一下docker的知识点,用作容器化微服务的起点,主要为日常工作配置使用,本章可能有点长&am…...
MiniCPM-V: A GPT-4V Level MLLM on Your Phone 手机上的 GPT-4V 级多模态大模型
GitHub - OpenBMB/MiniCPM-V: MiniCPM-V 2.6: A GPT-4V Level MLLM for Single Image, Multi Image and Video on Your Phone 2408.01800 (arxiv.org) 目录 Introduction Model Architecture Training End-side Deployment MiniCPM-V是一种高效的多模态大型语言模型&…...
Unity初识
1:下载Unity Hub 下载地址:Unity官方下载_Unity最新版_从Unity Hub下载安装 | Unity中国官网 建议直接使用unity hub因为支持比较全面,适合新手 有中文 管理 编辑器等等功能支持 下载安装不过多介绍 2:Unity Hub汉化 因为我…...
【游戏引擎之路】登神长阶(九)——《3D游戏编程大师技巧》:我想成为游戏之神!
5月20日-6月4日:攻克2D物理引擎。 6月4日-6月13日:攻克《3D数学基础》。 6月13日-6月20日:攻克《3D图形教程》。 6月21日-6月22日:攻克《Raycasting游戏教程》。 6月23日-7月1日:攻克《Windows游戏编程大师技巧》。 7月…...
Linux:线程同步之信号量
信号量 (1)What(什么是信号量) 提供一种计数器的方式控制对共享资源的访问;当计数器大于0时,请求资源成功并计数器-1;当计数器小于0时,线程阻塞,等待其它线程执行signal(V操作&…...
GPT-SoVITS-文本转语音(你的声音不再是唯一)
本文将要介绍GPT-SoVITS的安装和使用方法 首先感谢花儿不哭大佬带来的RVC声音克隆 花儿不哭: 花儿不哭的个人空间-花儿不哭个人主页-哔哩哔哩视频 (bilibili.com) GPT-SoVITS下载地址 GitHub - RVC-Boss/GPT-SoVITS: 1 min voice data can also be used to train a …...
C语言深度剖析(部分)--剩下随缘更新
C语言深度剖析 关键字auto-最宽容大度的关键字 变量的分类 代码块:用{ }括起来的区域 局部变量:包含在代码块中的变量,局部变量具有临时性,进入代码块,自动形成局部变量,退出代码块自动释放。 全局变量…...
计算机毕业设计选题推荐-电缆行业生产管理系统-Java/Python项目实战
✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…...
Linux 下查看 CPU 使用率
目录 一、什么是 CPU 使用率二、查看 CPU 利用率1、使用 top 查看2、用 pidstat 查看3、用 ps 查看4、用 htop 查看5、用 nmon 查看6、用 atop 查看7、用 glances 查看8、用 vmstat 查看9、用 sar 查看10、dstat11、iostat 三、总结 CPU 使用率是最直观和最常用的系统性能指标&…...
数理基础知识
数理基础 大数定律期望方差常见分布伯努利分布泊松分布高斯分布服从一维高斯分布的随机变量KL散度服从多元高斯分布的随机变量KL散度 Gibbs不等式凸函数Jensen不等式 似然函数泰勒近似信息论信息量信息熵KL散度JS散度交叉熵 Wiener ProcessSDE 大数定律 期望方差 x为连续随机…...
Java解决lombok和mapstruct编译模块的问题
pom.xml <dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><!-- 1.18.16版本 --><version>${lombok.version}</version><scope>provided</scope><!-- 防…...
AI 时代新人击穿资深壁垒:专家思维 + 实战案例
一位技术观察者对「一维→二维→三维」成长框架的重新论断 引言:我为什么坚信"经验正在贬值,抽象永远升值" 作为 用维度概念来定义初级、中级、高级程序员 后续文章,我觉得这正是时候,之前所说的初中级概念正在模糊&am…...
Face3D.ai Pro与Qt集成:桌面端应用开发
Face3D.ai Pro与Qt集成:桌面端应用开发 1. 引言 想象一下,你只需要一张普通的自拍照,就能在桌面上生成一个可以360度旋转、表情生动的3D人脸模型。这不是科幻电影里的场景,而是Face3D.ai Pro结合Qt框架能够实现的真实能力。 对…...
OpenClaw自动化测试:Qwen3-32B驱动UI操作与结果校验
OpenClaw自动化测试:Qwen3-32B驱动UI操作与结果校验 1. 为什么选择OpenClaw做UI自动化测试 去年接手一个个人项目时,我遇到了一个典型痛点——每次代码更新后,都需要手动重复执行几十个UI操作步骤来验证核心功能。这种重复劳动不仅耗时&…...
智慧农业草莓成熟度识别 基于cnn的YOLOv11深度学习 智慧农业草莓成熟度目标检测系统 草莓识别系统(数据集使用 YOLOv11 进行草莓成熟度计数与检测 注意:此模块是在以下资源的+模型+界面)
使用 YOLOv11 进行草莓成熟度计数与检测 注意:此模块是在以下资源的帮助下完成的:Detection_image.png1. 代码库中每个 Notebook 的说明Dataset split NB: 此 Notebook 用于将原始的 3000 张图片按 0.8、0.1 和 0.1 的比例分为训练集、验证集和测试集。N…...
turbo迁移vite-plus实践逞
认识Pass层级结构 Pass范围从上到下一共分为5个层级: 模块层级:单个.ll或.bc文件 调用图层级:函数调用的关系。 函数层级:单个函数。 基本块层级:单个代码块。例如C语言中{}括起来的最小代码。 指令层级:单…...
01-17-01 API Level与版本管理机制
01-17-01 API Level与版本管理机制 什么是API Level API Level是Android系统的版本号,每个Android版本都有唯一的API Level。 源码定义 // Build.java public class Build {public static class VERSION {/*** 设备的Android版本*/public static final int SDK_INT …...
机器学习面试题(二) 损失函数 常见损失函数
四、什么是损失函数(Loss Function)损失函数(Loss Function)衡量单个样本的预测误差,即模型的预测值与真实值之间的差异。成本函数/代价函数(Cost Function)衡量所有样本上预测值和真实值的平均…...
毕设-情绪雷达
情绪雷达 注: 项目基于芋道的 mini 版,进行二次开发,部署文档就不过多赘述了,可以看人家的官方文档。 概述: 情绪雷达,项目的核心开发路线是:针对用户发来的聊天界面截图,利用 a…...
OpenClaw隐私计算:Qwen3.5-9B-AWQ-4bit本地处理加密图片
OpenClaw隐私计算:Qwen3.5-9B-AWQ-4bit本地处理加密图片 1. 为什么需要加密图片处理 去年我在帮一家小型金融机构做自动化流程优化时,遇到了一个棘手问题:他们需要AI自动分析客户上传的身份证和银行卡照片,但直接传输这些敏感图…...
DAC8562双通道16位SPI数模转换器驱动库详解
1. DAC8562系列双通道16位SPI数模转换器驱动库深度解析DAC8562是德州仪器(TI)推出的一款高精度、低功耗、双通道16位串行输入数模转换器(DAC),采用标准SPI接口通信,广泛应用于工业控制、测试测量、音频信号…...
