Spring Boot + ActiveMQ Artemis:快速实现高效消息队列处理功能

在现代微服务架构中,消息队列是实现异步通信、解耦系统的重要手段。而通过 Spring Boot 和 ActiveMQ Artemis,您可以快速搭建一个高效、可靠的消息队列处理系统,轻松应对订单处理、日志分析等场景。本文将带您从零开始,逐步实现一个完整的消息队列处理功能。


一、为什么选择 ActiveMQ Artemis?

ActiveMQ Artemis 是 Apache ActiveMQ 的高性能消息代理,具备以下优势:

  • 轻量级:支持嵌入式模式,无需单独部署服务。
  • 高性能:消息吞吐量高,延迟低。
  • 兼容性强:支持多种协议(AMQP、STOMP、MQTT 等)以及与 Spring Boot 的无缝集成。
  • 易用性:提供管理控制台和丰富的监控接口。

无论是嵌入式模式还是独立部署模式,ActiveMQ Artemis 都能满足不同规模的应用需求。


二、Spring Boot 快速搭建消息队列

1. 引入依赖

pom.xml 中添加以下依赖:

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-artemis</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>RELEASE</version><scope>compile</scope></dependency><dependency><groupId>org.apache.activemq</groupId><artifactId>artemis-jakarta-server</artifactId><version>2.37.0</version></dependency>

2. 配置消息队列

application.yml 中配置消息队列:

嵌入式模式配置
spring:artemis:embedded:enabled: truepersistent: falsequeues: order-queue # 自动创建队列

独立模式配置

spring:artemis:broker-url: tcp://localhost:61616user: adminpassword: admin

根据实际需求选择一种模式。如果您需要快速试验,可以使用嵌入式模式;如果应用需在生产环境运行,推荐使用独立模式。

三、消息生产者

消息生产者负责向队列发送消息。以下是实现代码:

import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Service;@Service
public class OrderMessageProducer {private final JmsTemplate jmsTemplate;public OrderMessageProducer(JmsTemplate jmsTemplate) {this.jmsTemplate = jmsTemplate;}public void sendOrderMessage(String order) {jmsTemplate.convertAndSend("order-queue", order);System.out.println("Sent order: " + order);}
}

调用 sendOrderMessage 方法即可发送订单信息到队列 order-queue

四、消息消费者

消费者监听队列中的消息并进行处理。通过 @JmsListener 注解可以轻松实现:

import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Service;@Service
public class OrderMessageConsumer {@JmsListener(destination = "order-queue")public void processOrder(String order) {System.out.println("Processing order: " + order);// 模拟处理逻辑}
}

当消息到达队列时,processOrder 方法会自动触发,输出消息内容。

五、队列监控功能

1. 监控队列状态

为确保系统稳定性,需要实时监控队列积压情况。以下是一个监控服务的实现:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Service;@Service
public class QueueMonitorService {@Autowiredprivate JmsTemplate jmsTemplate;public long getQueueSize(String queueName) {return jmsTemplate.browse(queueName, (session, browser) -> {int count = 0;while (browser.getEnumeration().hasMoreElements()) {count++;browser.getEnumeration().nextElement();}return (long) count;});}
}

使用此服务可以查询任意队列的积压消息数量。

2. 暴露 REST 接口

通过 Spring Boot 的 REST 接口,可以更直观地获取监控数据

import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/monitor")
public class QueueMonitorController {private final QueueMonitorService monitorService;public QueueMonitorController(QueueMonitorService monitorService) {this.monitorService = monitorService;}@GetMapping("/queue/{name}/size")public String getQueueSize(@PathVariable String name) {long size = monitorService.getQueueSize(name);return "Queue " + name + " size: " + size;}
}

六、故障排查和优化

1. 常见问题

嵌入式模式启动失败
  • 检查日志是否有端口占用错误。
  • 确认嵌入式配置正确,避免和独立模式配置冲突。
连接失败
  • 检查 broker-url 是否正确,确保 ActiveMQ Artemis 服务已启动。
  • 确认服务端网络和防火墙规则允许客户端访问。
消息丢失
  • 确保在生产环境中启用持久化(persistent=true)。
  • 配置死信队列处理失败的消息。

2. 性能优化

  • 异步消费:设置消费者并发级别,提高吞吐量。
  • 队列分片:将大队列拆分为多个子队列,避免单点瓶颈。
  • 消息压缩:对于大消息启用压缩,减少网络传输量。

七、完整代码仓库

您可以访问 https://gitee.com/cng1985/nb-queue 查看本文完整代码示例,并快速开始构建属于自己的消息队列功能。


八、总结

通过 Spring Boot 与 ActiveMQ Artemis 的强大组合,我们可以快速实现一个功能强大且高性能的消息队列系统。无论是订单处理、通知分发还是其他场景,本文提供的代码和最佳实践都可以直接应用到实际项目中。

现在就尝试用 Spring Boot 和 ActiveMQ Artemis 为您的项目添加消息队列支持吧!

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

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

相关文章

局域网与广域网:探索网络的规模与奥秘(3/10)

一、局域网的特点 局域网覆盖有限的地理范围&#xff0c;通常在几公里以内&#xff0c;具有实现资源共享、服务共享、维护简单、组网开销低等特点&#xff0c;主要传输介质为双绞线&#xff0c;并使用少量的光纤。 局域网一般是方圆几千米以内的区域网络&#xff0c;其特点丰富…

EMD-KPCA-Transformer多变量回归预测!分解+降维+预测!多重创新!直接写核心!

EMD-KPCA-Transformer多变量回归预测&#xff01;分解降维预测&#xff01;多重创新&#xff01;直接写核心&#xff01; 目录 EMD-KPCA-Transformer多变量回归预测&#xff01;分解降维预测&#xff01;多重创新&#xff01;直接写核心&#xff01;效果一览基本介绍程序设计参…

编程之路,从0开始:文件操作(2)

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 今天我们来继续学习C语言的文件操作。 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;编程之路 持续更新高质量内容&#xff0c;欢迎点赞、关注&…

mybatis学习(三)

声明&#xff1a;该内容来源于动力节点&#xff0c;本人在学习mybatis过程中参考该内容&#xff0c;并自己做了部分笔记&#xff0c;但个人觉得本人做的笔记不如动力节点做的好&#xff0c;故使用动力节点的笔记作为后续mybatis的复习。 六、在WEB中应用MyBatis&#xff08;使…

ES6 模块化语法

目录 ES6 模块化语法 分别暴露 统一暴露 ​编辑 默认暴露 ES6 模块化引入方式 ES6 模块化语法 模块功能主要由两个命令构成&#xff1a;export 和 import。 ⚫ export 命令用于规定模块的对外接口&#xff08;哪些数据需要暴露&#xff0c;就在数据前面加上关键字即可…

【Spring boot】微服务项目的搭建整合swagger的fastdfs和demo的编写

文章目录 1. 微服务项目搭建2. 整合 Swagger 信息3. 部署 fastdfsFastDFS安装环境安装开始图片测试FastDFS和nginx整合在Storage上安装nginxnginx安装不成功排查:4. springboot 整合 fastdfs 的demodemo编写1. 微服务项目搭建 版本总结: spring boot: 2.6.13springfox-boot…

无线电磁波在自由空间的衰减

自由空间损耗&#xff0c;指的是电磁波在空气中传播时候的能量损耗&#xff0c;电磁波在穿透任何介质的时候都会有损耗。在传输路径上的损耗&#xff0c;即为路径损耗。 自由空间路径损耗&#xff08;Free Space Path Loss&#xff09;的基本公式&#xff1a; 简化的自由空间损…

UE5实现可销毁对象的淡化销毁

进入对象材质 设置 的不透明蒙版 不透明蒙版见 UE材质不透明蒙版选项-CSDN博客 默认混合模式(不透明)下无法进行设置&#xff0c;将混合模式修改为 混合模式见 UE5材质混合模式-CSDN博客 新添加Texture sample节点 关于Texture sample&#xff1a;UE5材质Texture Sample …

【Linux学习】【Ubuntu入门】1-7 ubuntu下磁盘管理

1.准备一个U盘或者SD卡&#xff08;插上读卡器&#xff09;&#xff0c;将U盘插入主机电脑&#xff0c;右键点击属性&#xff0c;查看U盘的文件系统确保是FAT32格式 2.右键单击ubuntu右下角图标&#xff0c;将U盘与虚拟机连接 参考链接 3. Ubuntu磁盘文件&#xff1a;/dev/s…

文件的处理(c语言)

首先了解下文件的作用 文件可以把数据直接放在电脑的硬盘上&#xff0c;实现了数据的持久化 什么是文件 文件就是磁盘上的文件。在程序设计中&#xff0c;文件通常有俩种&#xff0c;一种是程序文件&#xff0c;另一种是数据文件&#xff08;这是从文件功能来分类的&#xff…

shell编程之awk

awk 是 Linux 以及 UNIX 环境中现有的功能最强大的数据处理工具。简单地讲&#xff0c; awk 是一种处理文本数据的编程语言。awk 的设计使得它非常适合于处理由行和列组成的文本数据。而在 Linux 或者 UNIX 环境中&#xff0c;这种类型的数据是非常普遍的。 除此之外&#xff…

数据库-基础理论

文章目录 前言一、ORM框架二、ACID原则三、事务Transaction四、N1问题五、Normalization三范式六、FMEA方法论&#xff08;Failure Mode and Effects Analysis&#xff09;七、Profiling和PerformanceSchema查询分析 前言 基础理论 ORM框架、ACID原则、事务Transaction、N1问…

用 Python 从零开始创建神经网络(九):反向传播(Backpropagation)

反向传播&#xff08;Backpropagation&#xff09; 引言1. 分类交叉熵损失导数&#xff08;Categorical Cross-Entropy loss derivative&#xff09;2. 分类交叉熵损失导数 - 代码实现3. Softmax激活函数导数&#xff08;Softmax activation derivative&#xff09;4. Softmax激…

Transformer详解及衍生模型GPT|T5|LLaMa

简介 Transformer 是一种革命性的神经网络架构&#xff0c;首次出现在2017年的论文《Attention Is All You Need》中&#xff0c;由Google的研究团队提出。与传统的RNN和LSTM模型不同&#xff0c;Transformer完全依赖于自注意力&#xff08;Self-Attention&#xff09;机制来捕…

C0034.在Ubuntu中安装的Qt路径

Qt安装路径查询 在终端输入qmake -v如上中/usr/lib/x86_64-linux-gnu就是Qt的安装目录&#xff1b;

Swift 实现查找链表入环点:快慢指针法

文章目录 前言摘要描述题解答案题解代码题解代码分析示例测试及结果时间复杂度空间复杂度总结 前言 本题由于没有合适答案为以往遗留问题&#xff0c;最近有时间将以往遗留问题一一完善。 142. 环形链表 II 不积跬步&#xff0c;无以至千里&#xff1b;不积小流&#xff0c;无…

stable-diffusion-webui在conda pycharm中运行

目录 简介下载conda环境配置环境变量修改launch_utils.py文件运行stable-diffusion-webui下载模型文本生成图片参考 简介 stable-diffusion-webui是AI绘画 Stable Diffusion浏览器UI界面&#xff0c;为用户提供了一个简单、直观的方式来利用 Stable Diffusion 技术创建视觉内容…

小柴冲刺软考中级嵌入式系统设计师系列二、嵌入式系统硬件基础知识(7)嵌入式Soc

越努力&#xff0c;越幸运&#xff01; 分享一个晚霞&#xff0c;真的好美啊&#x1f496;&#xff01; 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 不得不说&#xff0c;我还是喜欢在人少的地方生活啊。 flechazohttps://www.zhihu.com/people/ji…

【云计算网络安全】解析 Amazon 安全服务:构建纵深防御设计最佳实践

文章目录 一、前言二、什么是“纵深安全防御”&#xff1f;三、为什么有必要采用纵深安全防御策略&#xff1f;四、以亚马逊云科技为案例了解纵深安全防御策略设计4.1 原始设计缺少安全策略4.2 外界围栏构建安全边界4.3 访问层安全设计4.4 实例层安全设计4.5 数据层安全设计4.6…

产业用机器人中的旋转花键若损伤有何影响?

旋转花键在产业用机器人中是关键的组件之一&#xff0c;如果机器人中的旋转花键损坏&#xff0c;会对机器人的运行和性能产生一定影响。以下是可能的影响&#xff1a; 1、功能受限&#xff1a;旋转花键用于连接两个旋转部件&#xff08;例如电机轴和传动轴&#xff09;&#xf…