Spring Boot实现RabbitMQ监听消息的几种方式

Spring Boot实现RabbitMQ监听消息的几种方式

在现代的分布式系统中,消息队列扮演着至关重要的角色,用于解耦服务之间的通信,实现异步消息传递。而RabbitMQ作为其中一种常用的消息队列服务,在Spring Boot中得到了广泛的应用。本文将介绍在Spring Boot中实现RabbitMQ监听消息的几种方式,帮助程序员选择适合自己项目的方式。

1. 引入RabbitMQ依赖

在Spring Boot项目中使用RabbitMQ,首先需要在pom.xml文件中添加RabbitMQ的依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

这样就能够使用Spring Boot提供的RabbitMQ自动配置功能。

2. 注册消息监听器

在Spring Boot中,可以通过注册@RabbitListener注解的方法来监听RabbitMQ中的消息。下面介绍几种常见的注册方式:

2.1 使用@RabbitListener注解

import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;@Component
public class MessageListener {@RabbitListener(queues = "queueName")public void handleMessage(String message) {// 处理接收到的消息System.out.println("Received message: " + message);}
}

通过@RabbitListener注解标注在方法上,指定要监听的队列名称,当有消息到达指定队列时,Spring Boot会自动调用标注了@RabbitListener的方法来处理消息。

2.2 使用@RabbitListener注解和MessageConverter

import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;@Component
public class MessageListener {@RabbitListener(queues = "queueName")public void handleMessage(Message message) {// 处理接收到的消息System.out.println("Received message: " + new String(message.getBody()));}
}

在这种方式下,handleMessage方法的参数为Message类型,可以手动解析消息内容。

2.3 使用MessageListenerAdapter

import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageListener;
import org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;@Component
public class MessageListener {@Beanpublic MessageListenerAdapter messageListenerAdapter() {return new MessageListenerAdapter(new MyMessageHandler());}
}class MyMessageHandler implements MessageListener {@Overridepublic void onMessage(Message message) {// 处理接收到的消息System.out.println("Received message: " + new String(message.getBody()));}
}

通过MessageListenerAdapter可以将普通的POJO对象适配为MessageListener,实现消息的处理。

3. 配置连接工厂和队列

除了使用注解方式注册消息监听器外,还可以通过配置文件的方式手动配置连接工厂和队列。

import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class RabbitMQConfig {@Beanpublic Queue queue() {return new Queue("queueName");}
}

这样就可以创建一个名为queueName的队列,用于存放消息。

4. 使用SimpleRabbitListenerContainerFactory配置

除了默认的监听器容器外,还可以通过SimpleRabbitListenerContainerFactory配置自定义的监听器容器,实现更多个性化的配置。

import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class RabbitMQConfig {@Beanpublic SimpleRabbitListenerContainerFactory myListenerContainerFactory() {SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();// 设置连接工厂、并发消费者数量等return factory;}
}

5. 总结

本文介绍了在Spring Boot中实现RabbitMQ监听消息的几种方式,包括使用@RabbitListener注解、MessageListenerAdapter、配置连接工厂和队列等方式。

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

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

相关文章

pip(包管理器) for Python

pip是什么 pip是Python的包安装程序&#xff0c;即python包管理器。您可以使用 pip 从Python包索引和其他索引安装包。 1. pip 安装 python 包 pip install 包名 例如&#xff1a;pip install pymssql &#xff1a; 使用pip安装数据库驱动包 pymssql 2.pip 卸载 python 包 pi…

【Axure教程】拖动换位选择器

拖动换位选择器通常用于从一个列表中选择项目并将其移动到另一个列表中。用户可以通过拖动选项来实现选择和移动。这种交互方式在许多Web应用程序中很常见&#xff0c;特别是在需要对项目分组的情况下。 所以今天作者就教大家怎么在Axure用中继器制作一个拖动换位选择器的原型…

告别硬编码:Spring条件注解优雅应对多类场景

一、背景 在当今的软件开发中&#xff0c;服务接口通常需要对应多个实现类&#xff0c;以满足不同的需求和场景。举例来说&#xff0c;假设我们是一家2B公司&#xff0c;公司的产品具备对象存储服务的能力。然而&#xff0c;在不同的合作机构部署时&#xff0c;发现每家公司底…

RedisTemplateAPI:List

文章目录 ⛄介绍⛄List的常见命令有⛄RedisTemplate API❄️❄️添加缓存❄️❄️将List放入缓存❄️❄️设置过期时间(单独设置)❄️❄️获取List缓存全部内容&#xff08;起始索引&#xff0c;结束索引&#xff09;❄️❄️从左或从右弹出一个元素❄️❄️根据索引查询元素❄…

探索 Rust 语言的精髓:深入 Rust 标准库

探索 Rust 语言的精髓&#xff1a;深入 Rust 标准库 Rust&#xff0c;这门现代编程语言以其内存安全、并发性和性能优势而闻名。它不仅在系统编程领域展现出强大的能力&#xff0c;也越来越多地被应用于WebAssembly、嵌入式系统、分布式服务等众多领域。Rust 的成功&#xff0…

Day25:Leetcode:669. 修剪二叉搜索树 + 108.将有序数组转换为二叉搜索树 + 538.把二叉搜索树转换为累加树

LeetCode&#xff1a;669. 修剪二叉搜索树 问题描述 解决方案&#xff1a; 1.思路 2.代码实现 class Solution {public TreeNode trimBST(TreeNode root, int low, int high) {if (root null) {return null;}if (root.val < low) {return trimBST(root.right, low, hi…

Nginx文件解析漏洞复现:CVE-2013-4547

漏洞原理 CVE-2013-4547漏洞是由于非法字符空格和截止符导致Nginx在解析URL时的有限状态机混乱&#xff0c;导致攻击者可以通过一个非编码空格绕过后缀名限制。假设服务器中存在文件1. jpg&#xff0c;则可以通过改包访问让服务器认为访问的为PHP文件。 漏洞复现 开启靶场 …

Energia单片机实验-饮水机模拟

一、要求分析 利用状态机程序思想&#xff0c;使用MSP-EXP430F5529 Launchpad板卡实现以下模拟饮水机的功能。 饮水机是我们生活中常见的家用设备。假设一个简易的饮水机有两个按键&#xff1a;童锁按键[PUSH1]和热水按键[PUSH2]。 按键功能说明&#xff1a; 1.童锁按键&#x…

联盟 | 歌者 AIPPT X HelpLook携手,开启企业高效办公新时代

面对日益增长的工作负荷和追求效率优化的压力&#xff0c;企业知识的积累与传播显得愈发重要。如何系统化地沉淀员工与企业的知识精华&#xff1f;如何快速分享内外部知识&#xff1f;更重要的是&#xff0c;如何在获取这些知识后&#xff0c;迅速将其转化为精美的PPT&#xff…

USB-HID 键盘描述符简介

USB-HID 键盘描述符简介 USB-HID键盘设备描述符&#xff1a; #define DEVICE_DESCRIPTOR_SIZE 0x12 #define USB_CTRL_TEST_SZIE 8 #define CONFIG_DESCRIPTOR_SIZE_DUSB 0x0029 //0x0022//0x0029 #define HID_REPORT_DESCRIPTOR_SIZE_DUSB 0x004…

人类交互3 皮肤感觉与运动系统

皮肤感觉概述 皮肤是人体最大的器官之一&#xff0c;具有多种感觉功能&#xff0c;包括&#xff1a; 触觉&#xff1a;通过触觉&#xff0c;我们能感知物体的形状、质地&#xff0c;帮助我们与外界环境进行互动和感知周围物体的特征。 热觉&#xff1a;热觉使我们能感知周围环…

ridge lightgbm catboost

本文从理论基础、代码实践、内容总结三个方面来展示预测的三大基础模型与手动调参自动调参内容细节。 一、理论基础 ridgeRegression 图片: https://uploader.shimo.im/f/uX43BitluzbQeqht.jpg!thumbnail?accessTokeneyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1Q…

哪款电脑桌面日历记事本软件好用?推荐优秀的电脑日历记事本

对于众多上班族而言&#xff0c;每天在电脑前忙碌已成为生活常态。若想提升工作效率&#xff0c;简化繁琐的工作流程&#xff0c;选择一款出色的电脑桌面日历与记事本软件就显得至关重要。 然而&#xff0c;在Windows操作系统上设定提醒显得相当繁琐&#xff0c;而系统自带的记…

机器学习之注意力机制

概念 注意力机制(Attention Mechanism)是机器学习,特别是深度学习中一种重要的技术,最初被用于自然语言处理(NLP)任务,如机器翻译。它的核心思想是,让模型在处理输入数据时,能够“关注”到数据中的重要部分,而不是一视同仁地处理所有部分。这种机制极大地提高了模型…

Python贪心算法

贪心算法&#xff08;Greedy Algorithm&#xff09;是一种常见的算法设计策略&#xff0c;它在每一步选择当前最优解&#xff0c;希望通过局部最优解最终得到全局最优解。贪心算法通常适用于满足一些特定条件的问题&#xff0c;例如货币找零、活动选择、任务调度等。贪心算法的…

Discourse 中可能使用的 HMAC 算法 Java 实现

在 DiscourseConnect 中&#xff0c;对数据的签名使用的是 HMAC 算法。 实际使用的算法为 HmacSHA256。 Java 生成签名的方法很简单。 String hmac new HmacUtils(HmacAlgorithms.HMAC_SHA_256, "55619458534897682511405307018226").hmacHex(ssoPayload);HmacUti…

lvm磁盘创建失败Couldn‘t create temporary archive name

问题情况: 在客户单位创建lvm时,执行vgextend提示异常信息: 挂载磁盘报如下错误: ]# vgextend centos /dev/xvdb Physical volume “/dev/xvdb” successfully created. Couldn’t create temporary archive name. 原因:存储使用100%,无法挂载,须预留部分空间出来。 解…

工程项目核算报价-项目CPQ报价系统控成本高效完成工程项目报价

首先了解一下CPQ报价如何解决工程项目报价难的? 目前市场上的工程项目报价方案制作效率低&#xff0c;易出错&#xff0c;反复修改&#xff0c;成本核算的过程不够严谨&#xff0c;凭以经验和数据大差不差的估算当下项目&#xff0c;报价过程中会忽略侧面因素&#xff0c;导致…

Elasticsearch 分析器的高级用法二(停用词,拼音搜索)

Elasticsearch 分析器的高级用法二&#xff08;停用词&#xff0c;拼音搜索&#xff09; 停用词简介停用词分词过滤器自定义停用词分词过滤器内置分析器的停用词过滤器注意&#xff0c;有一个细节 拼音搜索安装使用相关配置 停用词 简介 停用词是指&#xff0c;在被分词后的词…

uwsgi状态监控

使用 uWSGI 内置的状态服务器 uWSGI 提供了一个内置的状态服务器&#xff0c;你可以通过配置 uWSGI 来启用它&#xff0c;并使用 Web 浏览器或者通过 HTTP 请求来查看 uWSGI 的状态信息。 启用状态服务器 在 uWSGI 的配置文件中添加以下配置&#xff1a; [uwsgi] ... sta…