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

微服务学习(2):实现SpringAMQP对RabbitMQ的消息收发

目录

SpringAMQP是什么

为什么采用SpringAMQP

SpringAMQP应用

准备springBoot工程

实现消息发送


SpringAMQP是什么

Spring AMQP是Spring框架下用于简化AMQP(高级消息队列协议)应用开发的一套工具集,主要针对RabbitMQ等消息中间件的集成。它提供了基于模板的消息发送和接收方法(如AmqpTemplate),以及用于配置和管理交换机、队列及其绑定关系的机制。通过Spring AMQP,开发者可以方便地将消息队列功能整合到Spring项目中。

为什么采用SpringAMQP

将来我们开发业务功能的时候,肯定不会在控制台收发消息,而是应该基于编程的方式。RabbitMQ官方提供的Java客户端编码相对复杂,一般生产环境下我们更多会结合Spring来使用。而Spring的官方刚好基于RabbitMQ提供了这样一套消息收发的模板工具:SpringAMQP。并且还基于SpringBoot对其实现了自动装配,使用起来非常方便。

SpringAMQP提供了三个功能:

1.自动声明队列、交换机及其绑定关系

2.基于注解的监听器模式,异步接收消息

3.封装了RabbitTemplate工具,用于发送消息

SpringAMQP应用

准备springBoot工程

新建一个springboot工程,包括三部分:

  • mq-demo:父工程,管理项目依赖

  • publisher:消息的发送者

  • consumer:消息的消费者

工程目录如图所示:

pom.xml文件导入依赖:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>cn.itcast.demo</groupId><artifactId>mq-demo</artifactId><version>1.0-SNAPSHOT</version><modules><module>publisher</module><module>consumer</module></modules><packaging>pom</packaging><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.12</version><relativePath/></parent><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!--AMQP依赖,包含RabbitMQ--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency><!--单元测试--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency></dependencies>
</project>

如此,子工程中就可以直接使用SpringAMQP。

实现消息发送

首先配置MQ地址,在publisher服务的application.yml和consumer服务的application.yml中添加配置:

spring:rabbitmq:host: 192.168.12.101 # 你的虚拟机IPport: 5672 # 端口virtual-host: /user # 你的虚拟主机username: user # 用户名password: 123 # 密码

然后在publisher服务中编写测试类SpringAmqpTest,并利用RabbitTemplate实现消息发送:

@SpringBootTest
class SpringAmqpTest {@Autowiredprivate RabbitTemplate rabbitTemplate;@Testpublic void testSimpleQueue() {// 队列名称String queueName = "hello.queue";// 消息String message = "hello rabbitmq";// 发送消息rabbitTemplate.convertAndSend(queueName, message);}
}

运行后,打开控制台,可以看到消息已经发送到队列中:

当然,我们可以在consumer服务的consumer.listener包中新建一个类SpringRabbitListener来接收,代码如下:

@Component
@Slf4j
public class SpringRabbitListener {@RabbitListener(queues = "hello.queue")public void listenSimpleQueue(String msg) {log.info("消费者收到消息:{}", msg);}
}

启动ConsumerApplication,控制台显示如下:

解读:实现SpringAMQP对RabbitMQ的消息收发的测试。

相关文章:

微服务学习(2):实现SpringAMQP对RabbitMQ的消息收发

目录 SpringAMQP是什么 为什么采用SpringAMQP SpringAMQP应用 准备springBoot工程 实现消息发送 SpringAMQP是什么 Spring AMQP是Spring框架下用于简化AMQP&#xff08;高级消息队列协议&#xff09;应用开发的一套工具集&#xff0c;主要针对RabbitMQ等消息中间件的集成…...

《操作系统 - 清华大学》 9 -2:进程调度:调度原则

进程调度策略&#xff1a;原则、指标与权衡 在计算机系统中&#xff0c;进程调度策略至关重要。我们讲的就是有不同的这种调度策略&#xff0c;那么调度的原则是什么呢&#xff1f;原则就是选择某一个进程执行的依据&#xff0c;即要基于什么样的标准来挑选最合适的进程去执行…...

CSS—选择器详解:5分钟动手掌握选择器

个人博客&#xff1a;haichenyi.com。感谢关注 1. 目录 1–目录2–引言3–种类4–优先级 引言 什么是选择器&#xff1f; CSS选择器是CSS&#xff08;层叠样式表&#xff09;中的一种规则&#xff0c;用于指定要应用样式的HTML元素。它们就像是指向网页中特定元素的指针&#…...

Java——String

在 Java 中&#xff0c;String 类是用于表示不可变字符序列的核心类&#xff0c;提供了丰富的 API 用于操作字符串。以下是 String 类的关键特性和常用方法详解&#xff1a; 一、String 的核心特性 不可变性&#xff08;Immutable&#xff09; 一旦创建&#xff0c;字符串内容不…...

Channel State Information 信道状态信息

Channel State Information&#xff08;CSI&#xff0c;信道状态信息&#xff09;是无线通信系统中的一个重要概念&#xff0c;指的是接收端或发送端对无线信道特性的估计和反馈。CSI可以用于优化无线通信性能&#xff0c;例如信道均衡、预编码、波束成形等&#xff0c;以提高数…...

python中单例模式应用

数据库连接池单例模式 1. 为什么使用单例模式 创建数据库连接是一个昂贵的过程&#xff08;涉及网络通信、认证等&#xff09;。单例模式的连接池可以在程序启动时初始化一组连接&#xff0c;并在整个生命周期中重用这些连接&#xff0c;而不是每次请求都新建连接。同时还可…...

StarRocks 在爱奇艺大数据场景的实践

作者&#xff1a;林豪&#xff0c;爱奇艺大数据 OLAP 服务负责人 小编导读&#xff1a; 本文整理自爱奇艺工程师在 StarRocks 年度峰会的分享&#xff0c;介绍了爱奇艺 OLAP 引擎演化及引入 StarRocks 后的效果。 在广告业务中&#xff0c;StarRocks 替换 ImpalaKudu 后&#x…...

Easy Trans Spring Boot Starter ---Spring系列的字段翻译库

Easy Trans Spring Boot Starter 使用文档 1. 简介 easy-trans-spring-boot-starter 是一个基于 Spring Boot 的库&#xff0c;用于简化数据翻译和转换操作。它可以帮助你将数据库中的枚举值、状态码等转换为用户友好的文本&#xff0c;或者将一种数据格式转换为另一种格式。…...

JAVA入门——IO流

一、了解File类 这个类里面提供了一些文件相关的方法&#xff0c;了解即可&#xff0c;方法有很多&#xff0c;不好背下面这个是最常用的只能对文件本身操作&#xff0c;不能读取数据 public File[] listFiles();//获取当前路径下的所有内容 注意&#xff1a;如果是需要权限才…...

Spring Boot 流式响应豆包大模型对话能力

当Spring Boot遇见豆包大模型&#xff1a;一场流式响应的"魔法吟唱"仪式 一、前言&#xff1a;关于流式响应的奇妙比喻 想象一下你正在火锅店点单&#xff0c;如果服务员必须等所有菜品都备齐才一次性端上来&#xff0c;你可能会饿得把菜单都啃了。而流式响应就像贴…...

Android Binder 用法详解

Binder 是 Android 系统中的一种进程间通信&#xff08;IPC&#xff09;机制&#xff0c;它允许不同进程之间进行高效通信。Binder 在 Android 系统中被广泛使用&#xff0c;例如在 Activity 与 Service 的交互中。 Binder 的基本组成 实现 Binder 通信通常包含以下几个关键部…...

在Ubuntu中,某个文件的右下角有一把锁的标志是什么意思?

在Ubuntu中&#xff0c;某个文件的右下角有一把锁的标志是什么意思&#xff1f; 在 Ubuntu&#xff08;或其他基于 GNOME 文件管理器的 Linux 发行版&#xff09;中&#xff0c;文件或文件夹的右下角出现一把“锁”标志&#xff0c;通常表示 你当前的用户没有该文件/文件夹的写…...

达梦数据库如何收集表和索引的统计信息

命令&#xff1a; DBMS_STATS.GATHER_TABLE_STATS(OWNNAME >HIDC,TABNAME > SYS_OSS,ESTIMATE_PERCENT>100,METHOD_OPT > FOR ALL COLUMNS SIZE AUTO,DEGREE > 2,CASCADE > true); dbms_stats.gather_table_stats&#xff1a;用于收集目标表&#xff0c;目…...

大语言模型:从诞生到未来的探索

1 发展历程 1.1 早期探索&#xff1a;基础积累 大语言模型的发展并非一蹴而就&#xff0c;其源头可以追溯到自然语言处理的早期阶段。早期的自然语言处理系统主要基于规则和模板&#xff0c;通过人工编写的语法规则来处理文本。例如&#xff0c;早期的机器翻译系统就是根据预…...

DeepSeek-V3:AI语言模型的高效训练与推理之路

参考&#xff1a;【论文学习】DeepSeek-V3 全文翻译 在人工智能领域&#xff0c;语言模型的发展日新月异。从早期的简单模型到如今拥有数千亿参数的巨无霸模型&#xff0c;技术的进步令人瞩目。然而&#xff0c;随着模型规模的不断扩大&#xff0c;训练成本和推理效率成为了摆在…...

【多模态】Magma多模态AI Agent

1. 前言 微软杨建伟团队&#xff0c;最近在AI Agent方面动作连连&#xff0c;前两天开源了OmniParser V2&#xff0c;2月26日又开源了Magma&#xff0c;OmniParser专注在对GUI的识别解析&#xff0c;而Magma则是基于多模态技术&#xff0c;能够同时应对GUI和物理世界的交互&…...

DeepSeek掘金——DeepSeek R1驱动的PDF机器人

DeepSeek掘金——DeepSeek R1驱动的PDF机器人 本指南将引导你使用DeepSeek R1 + RAG构建一个功能性的PDF聊天机器人。逐步学习如何增强AI检索能力,并创建一个能够高效处理和响应文档查询的智能聊天机器人。 本指南将引导你使用DeepSeek R1 + RAG构建一个功能性的PDF聊天机器人…...

DeepSeek在PiscTrace上完成个性化处理需求案例——光流法将烟雾动态可视化

引言&#xff1a;PiscTrace作为开放式的视图分析平台提供了固定格式的类型参数支持个性化定制处理需求&#xff0c;本文一步步的实现光流分析按照不同需求根据DeepSeek的代码处理视频生成数据。 光流法&#xff08;Optical Flow&#xff09;是一种基于图像序列的计算机视觉技术…...

explore与explode词源故事

英语单词explore来自古法语&#xff0c;源自拉丁语&#xff0c;由前缀ex-&#xff08;出来&#xff09;加词根plor-&#xff08;叫喊&#xff09;以及末尾的小尾巴-e组成&#xff0c;字面意思就是“喊出来&#xff0c;通过叫喊声赶出来”。它为什么能表示“探索”呢&#xff1f…...

LeeCode题库第三十七题

37.解数独 项目场景&#xff1a; 编写一个程序&#xff0c;通过填充空格来解决数独问题。 数独的解法需 遵循如下规则&#xff1a; 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。&#xff08;请…...

【数字信号处理:从原理到应用的深度剖析】

一、数字信号处理的原理 数字信号处理&#xff08;DSP&#xff09;是一种通过数学算法对信号进行分析、处理和转换的技术。其核心在于对离散时间信号的操作&#xff0c;目的是提取有用信息或将信号转换为更易于解释的形式。 &#xff08;一&#xff09;信号的数字化过程 1. …...

MySQL 数据库安全配置最佳实践

文章目录 MySQL 数据库安全配置最佳实践账户与权限管理账户最小化原则权限最小化配置密码策略强化 认证与访问控制禁用匿名账户启用安全认证 网络安全防护访问源限制禁用远程root访问启用SSL加密 日志审计与监控全量审计配置二进制日志管理 服务端安全加固关键参数配置文件权限…...

小红书自动评论

现在越来越多的人做起来小红书&#xff0c;为了保证自己的粉丝和数据好看&#xff0c;需要定期养号。 那么养号除了发视频外&#xff0c;还需要积极在社区互动&#xff0c;比如点赞、评论等等&#xff0c;为了节省时间&#xff0c;我做了一个自动化评论工具。 先看效果 那这个是…...

OpenCV图像认知(一)

OpenCV&#xff1a; 是由Intel公司俄罗斯团队发起并参与和维护的一个计算机视觉处理开源软件库&#xff0c;支持与计算机视觉和机器学习相关的众多算法 OpenCV-Python&#xff1a; OpenCV-Python是一个Python绑定库&#xff0c;旨在解决计算机视觉问题。 Python是一种由Gui…...

自学微信小程序的第六天

DAY6 1、使用录音API首先需要通过wx.getRecorderManager()方法获取到一个RecorderManager实例,该实例是一个全局唯一的录音管理器,用于实现录音功能。 表32:RecorderManager实例的常用方法 方法名称 说明 start() 开始录音 pause() 暂停录音 resume() 继续录音 stop() 停止…...

C++动态与静态转换区别详解

文章目录 前言一、 类型检查的时机二、安全性三、适用场景四、代码示例对比总结 前言 在 C 中&#xff0c;dynamic_cast 和 static_cast 是两种不同的类型转换操作符&#xff0c;主要区别体现在类型检查的时机、安全性和适用场景上。以下是它们的核心区别&#xff1a; 一、 类…...

Qt6.8编译项目找不到文件——6.8.2\msvc2022_64\include\QtWidgets\QMainWindow does not exist.

问题&#xff1a;Error: dependent ‘…\Qt6.8.2\6.8.2\msvc2022_64\include\QtWidgets\QMainWindow’ does not exist. jom: D:\Temp\untitled1\build\Makefile [release] Error 2 20:20:43: 进程"D:\ProgramFiles\Develop\Qt6.8.2\Tools\QtCreator\bin\jom\jom.exe"…...

AI工具导航平台功能模块之混合分类器功能说明文档

AI工具导航平台功能模块之混合分类器功能说明文档 这是我最近正在开发的AI工具信息平台的部门功能模块混合分类器的说明文档&#xff0c;我的AI工具信息平台基于streamlit架构&#xff0c;整理出来与大家分享。 该程序的混合分类器采用规则引擎与深度学习模型协同工作的架构&…...

【时序预测】在线学习:算法选择(从线性模型到深度学习解析)

——如何为动态时序预测匹配最佳增量学习策略&#xff1f; 引言&#xff1a;在线学习的核心价值与挑战 在动态时序预测场景中&#xff08;如实时交通预测、能源消耗监控&#xff09;&#xff0c;数据以流式&#xff08;Streaming&#xff09;形式持续生成&#xff0c;且潜在的…...

某个设备的RJ45网口接头为何不可连接任何POE设备

某个设备的RJ45网口接头不可连接任何POE设备 1.POE设备是什么&#xff1f; POE设备是指支持通过以太网线传输电力和数据的设备&#xff0c;即“Power over Ethernet”&#xff08;PoE&#xff09;技术的设备。这种技术允许网络设备在传输数据的同时&#xff0c;通过标准的RJ4…...