Spring Boot 中的 @RabbitListener 注解是什么,原理,如何使用

Spring Boot 中的 @RabbitListener 注解是什么,原理,如何使用

在 RabbitMQ 中,消息的接收需要通过监听队列来实现。在 Spring Boot 应用程序中,可以使用 @RabbitListener 注解来监听队列,并在接收到消息时执行指定的方法。本文将介绍 @RabbitListener 注解的原理、使用方法和常见应用场景。

在这里插入图片描述

@RabbitListener 注解的原理

@RabbitListener 注解是 Spring AMQP 框架中的一个关键组件,它可以将一个方法标记为 RabbitMQ 的消息监听器。当有消息到达指定的队列时,@RabbitListener 注解会自动将消息转发给标记了该注解的方法。

@RabbitListener 注解有多个属性,包括 queues、containerFactory、concurrency 和 errorHandler 等。其中,queues 属性用于指定监听的队列名称;containerFactory 属性用于指定使用的 RabbitMQ 连接工厂;concurrency 属性用于指定并发消费者的数量;errorHandler 属性用于指定错误处理器。

在 Spring Boot 应用程序中,可以通过添加 spring-boot-starter-amqp 依赖来使用 @RabbitListener 注解。下面是一个简单的 @RabbitListener 配置示例。

@Configuration
public class RabbitConfig {@Value("${spring.rabbitmq.host}")private String host;@Value("${spring.rabbitmq.port}")private int port;@Value("${spring.rabbitmq.username}")private String username;@Value("${spring.rabbitmq.password}")private String password;@Beanpublic ConnectionFactory connectionFactory() {CachingConnectionFactory connectionFactory = new CachingConnectionFactory();connectionFactory.setHost(host);connectionFactory.setPort(port);connectionFactory.setUsername(username);connectionFactory.setPassword(password);return connectionFactory;}@Beanpublic SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory() {SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();factory.setConnectionFactory(connectionFactory());factory.setConcurrentConsumers(3);factory.setMaxConcurrentConsumers(10);return factory;}
}

在上面的代码中,我们定义了一个 RabbitConfig 类,通过 @Value 注解读取配置文件中的 RabbitMQ 主机、端口、用户名和密码。然后通过 ConnectionFactory 创建 RabbitMQ 连接工厂,并将其注入到 Spring 容器中。在 RabbitListenerContainerFactory 中,我们定义了并发消费者的数量为 3,最大并发消费者的数量为 10。

下面是一个使用 @RabbitListener 注解监听队列并处理消息的示例代码。

@Service
public class MessageService {private static final String QUEUE_NAME = "queue";@RabbitListener(queues = QUEUE_NAME, containerFactory = "rabbitListenerContainerFactory")public void handleMessage(String message) {// 处理消息// ...}
}

在上面的代码中,我们定义了一个 MessageService 类,使用 @RabbitListener 注解监听指定的队列,并在接收到消息时执行 handleMessage 方法。在 @RabbitListener 注解中,我们指定了监听的队列名称和使用的 RabbitListenerContainerFactory。

常见应用场景

异步任务处理

在 Spring Boot 应用程序中,可以使用 @RabbitListener 注解来实现异步任务处理。当一个任务需要执行较长时间时,可以将任务放入 RabbitMQ 的队列中,由消费者来执行任务。这样,可以避免因为长时间任务的阻塞而导致应用程序的性能下降。

下面是一个异步任务处理的示例代码。

@Service
public class TaskService {private static final String QUEUE_NAME = "task_queue";@RabbitListener(queues = QUEUE_NAME, containerFactory = "rabbitListenerContainerFactory")public void handleTask(String task) {// 执行任务// ...}
}

在上面的代码中,我们定义了一个 TaskService 类,使用 @RabbitListener 注解监听任务队列。当有新任务到来时,执行 handleTask 方法来处理任务。

发布订阅模式

在 RabbitMQ 中,可以使用 Fanout 类型的 Exchange 来实现发布订阅模式。在 Spring Boot 应用程序中,可以使用 @RabbitListener 注解来实现订阅者的消息接收。当发布者向 Exchange 发布消息时,Exchange 会将消息发送给所有绑定到它上面的队列。订阅者通过监听队列来接收消息。

下面是一个发布订阅模式的示例代码。

@Service
public class SubscriberService {private static final String EXCHANGE_NAME = "exchange";@RabbitListener(bindings = @QueueBinding(value = @Queue,exchange = @Exchange(name = EXCHANGE_NAME, type = ExchangeTypes.FANOUT)), containerFactory = "rabbitListenerContainerFactory")public void handleSubscribeMessage(String message) {// 处理订阅消息// ...}
}

在上面的代码中,我们定义了一个 SubscriberService 类,使用 @RabbitListener 注解监听绑定到 Exchange 上的队列。当 Exchange 接收到新消息时,会将消息发送给所有绑定到它上面的队列。在 @RabbitListener 注解中,我们使用 bindings 属性指定了队列和 Exchange 的绑定关系,使用 containerFactory 属性指定了使用的 RabbitListenerContainerFactory。

总结

@RabbitListener 注解是 Spring AMQP 框架中的一个关键组件,它可以将一个方法标记为 RabbitMQ 的消息监听器。在 Spring Boot 应用程序中,可以使用 @RabbitListener 注解来监听队列,并在接收到消息时执行指定的方法。在本文中,我们介绍了 @RabbitListener 注解的原理、使用方法和常见应用场景。通过使用 @RabbitListener 注解,可以方便地实现异步任务处理、发布订阅模式等功能。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【网络原理】TCP连接管理机制(三次握手四次挥手)

🥊作者:一只爱打拳的程序猿,Java领域新星创作者,CSDN、阿里云社区优质创作者。 🤼专栏收录于:计算机网络原理 在使用TCP协议进行网络交互时,TCP会进行三次握手即建立连接,TCP四次挥手…

【springboot+云计算】B/S医院信息管理系统源码(云HIS)

一、基于云计算技术的B/S架构的医院管理系统(简称云HIS) 采用前后端分离架构,前端由Angular框架、JavaScript语言开发;后端使用Java语言开发。系统遵循服务化、模块化原则开发,具有强大的可扩展性,二次开发方便快捷。为医疗机构提…

哈工大计算机网络课程网络层协议之:网络层服务概述

哈工大计算机网络课程网络层协议之:网络层服务概述 文章目录 哈工大计算机网络课程网络层协议之:网络层服务概述网络层概述网络层核心功能—转发与路由网络层核心功能—连接建立网络层服务模型虚电路网络与数据报网络虚电路网络虚电路(VC)的具体实现VC转…

多元分类预测 | Matlab麻雀算法(SSA)优化混合核极限学习机(HKELM)分类预测,多特征输入模型,SSA-HKELM分类预测

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元分类预测 | Matlab麻雀算法(SSA)优化混合核极限学习机(HKELM)分类预测,多特征输入模型,SSA-HKELM分类预测 多特征输入单输出的二分类及多分类模型。程序内注释详细,直接替换数据就可以用。程序语言为matlab…

两小时快速入门 TypeScript 基础(二)面向对象

个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,也会涉及到服务端(Node.js 等) 📃个人状态: 2023届本科毕业生,已拿多个前端 offer&#x…

【AI底层逻辑】——篇章3(上):数据、信息与知识香农信息论信息熵

目录 引入 一、数据、信息、知识 二、“用信息丈量世界” 1、香农信息三定律 2、一条信息的价值 3、信息的熵 总结 引入 AI是一种处理信息的模型,我们把信息当作一种内容的载体,计算机发明以前很少有人思考它的本质是什么。随着通信技术的发展&a…

新后端漏洞之----SSRF漏洞(服务端请求伪造)

笔记 前言SSRF漏洞概述SSRF漏洞检测与挖掘SSRF漏洞的回显分类SSRF漏洞利用SSRF漏洞防御 前言 这几天各种技术面试接踵而至,压得我喘不过气了!然后面试官问了我这个SSRF漏洞原理和利用方式以及防御手段,当然同时还问了好几个Top10漏洞&#x…

记一次 .NET 某医院预约平台 非托管泄露分析

一:背景 1. 讲故事 前几天有位朋友找到我,说他的程序有内存泄露,让我帮忙排查一下,截图如下: 说实话看到 32bit, 1.5G 这些关键词之后,职业敏感告诉我,他这个可能是虚拟地址紧张所…

Selenium Wire编辑header破解反爬机制和访问限制

一、selenium Wire介绍 介绍 Selenium Wire扩展了Selenium的Python绑定,使您能够访问浏览器发出的底层请求。您已使用Selenium相同的方式编写代码,但是您获得了额外的api,用于检查请求和响应,并动态地对它们进行更改。&#xff08…

Unity基础 物理系统 刚体组件下的移动.碰撞.触发检测

当在Unity中创建游戏或应用程序时,重力系统是一个非常重要的组成部分。它可以模拟物体受到地球引力的影响,并产生逼真的物理效果。在Unity中,我们可以使用刚体组件和重力向量来控制重力系统。 首先,在Unity中创建一个物体&#xf…

基于Echarts2.X的地图数据可视化指南

目录 前言 一、关于Echarts版本 1、为什么用Echarts2.2.7 2、文件目录说明 二、地图数据可视化 1、新建map.html 2、Echarts图表初始化 3、参数设置 三、源码展示分析 1、初始化阶段 2、timelineOption.js模拟数据 总结 前言 在前面的博文(数据会说话-从我国…

(学习日记)2023.04.29

写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈。 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录&a…