Spring Boot 如何集成 ActiveMQ?
【摘要】 🏆本文收录于「滚雪球学SpringBoot」专栏(全网一个名),手把手带你零基础入门Spring Boot,从入门到就业,助你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8 🚀 :构建可靠的消息传递系统 在现代分布式系统中,消息队列是解决高...

🏆本文收录于「滚雪球学SpringBoot」专栏(全网一个名),手把手带你零基础入门Spring Boot,从入门到就业,助你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8
🚀 :构建可靠的消息传递系统
在现代分布式系统中,消息队列是解决高并发、系统解耦、异步处理的重要工具之一。ActiveMQ 是一个开源的消息中间件,广泛用于高效、可靠的消息传递系统。Spring Boot 提供了对 ActiveMQ 的良好支持,能够帮助我们快速集成并使用消息队列。
本文将介绍如何在 Spring Boot 中集成 ActiveMQ,实现消息的发送(生产者)与接收(消费者)。我们将通过实际代码示例来展示如何配置 ActiveMQ、如何创建消息生产者与消费者,并演示如何利用消息队列提升系统的可扩展性与解耦性。
📜 目录
- 📝 ActiveMQ 简介
- 1.1 什么是 ActiveMQ?
- 1.2 ActiveMQ 的主要特点
- 1.3 为什么使用消息队列?
- 🔧 Spring Boot 集成 ActiveMQ
- 2.1 添加 ActiveMQ 依赖
- 2.2 配置 ActiveMQ 连接
- 🧑💻 消息的生产与消费
- 3.1 创建消息生产者(Producer)
- 3.2 创建消息消费者(Consumer)
- ⚙️ 消息队列的高级功能
- 4.1 消息持久化与事务
- 4.2 异常处理与重试机制
- 4.3 消息的优先级与延迟
- 📘 总结:提高系统解耦与可靠性
📝 1. ActiveMQ 简介
1.1 什么是 ActiveMQ?
ActiveMQ 是 Apache 提供的一个开源的消息队列系统,它实现了 JMS(Java Message Service)规范。ActiveMQ 支持多种消息协议,包括 AMQP、MQTT、STOMP、OpenWire 等,能够在分布式系统中提供可靠的消息传递服务。
1.2 ActiveMQ 的主要特点
- 高可用性:ActiveMQ 支持集群配置和高可用性部署,确保系统的可靠性。
- 持久化支持:ActiveMQ 支持消息的持久化,可以确保消息在传输过程中不丢失。
- 多协议支持:除了 JMS 外,ActiveMQ 还支持 AMQP、MQTT、STOMP 等多种协议,能够满足不同场景的需求。
- 消息优先级与延迟:支持消息的优先级管理,并能够设置消息的延迟时间。
1.3 为什么使用消息队列?
- 解耦:消息队列将生产者与消费者解耦,生产者只需将消息发送到队列,而不需要关心消费者的处理过程。
- 异步处理:通过消息队列,生产者和消费者可以异步处理,避免同步操作带来的性能瓶颈。
- 流量削峰:在高并发情况下,消息队列能够平衡系统负载,避免系统过载。
🔧 2. Spring Boot 集成 ActiveMQ
2.1 添加 ActiveMQ 依赖
要在 Spring Boot 中集成 ActiveMQ,首先需要添加相关依赖。在 pom.xml
中添加以下依赖:
<dependencies>
<!-- Spring Boot Starter Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Boot Starter JMS with ActiveMQ -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
</dependencies>
这个依赖会自动为我们提供对 ActiveMQ 的支持,并包含 JMS 和 ActiveMQ 客户端。
2.2 配置 ActiveMQ 连接
在 application.properties
或 application.yml
中配置 ActiveMQ 的连接信息:
# ActiveMQ 配置
spring.activemq.broker-url=tcp://localhost:61616 # ActiveMQ 服务器地址
spring.activemq.user=admin
spring.activemq.password=admin
spring.activemq.in-memory=false # 是否使用内存存储,false 表示持久化到磁盘
spring.jms.pub-sub-domain=false # 使用点对点模型(Queue),如果为 true 则使用发布/订阅模型(Topic)
这里的 broker-url
是 ActiveMQ 服务器的地址,默认情况下,ActiveMQ 运行在 tcp://localhost:61616
上。
🧑💻 3. 消息的生产与消费
3.1 创建消息生产者(Producer)
在 Spring Boot 中,使用 JmsTemplate
来发送消息。我们首先创建一个消息生产者来发送消息到 ActiveMQ 队列。
创建消息生产者类
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Service;
import javax.jms.Queue;
@Service
public class MessageProducer {
@Autowired
private JmsTemplate jmsTemplate;
@Autowired
private Queue queue;
public void sendMessage(String message) {
jmsTemplate.convertAndSend(queue, message);
System.out.println("Sent message: " + message);
}
}
在上面的代码中,JmsTemplate
用于发送消息,Queue
是我们定义的队列,sendMessage
方法将消息发送到队列中。
配置消息队列
在配置类中,我们定义队列和连接工厂:
import org.apache.activemq.ActiveMQConnectionFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.annotation.EnableJms;
import org.springframework.jms.core.JmsTemplate;
import javax.jms.Queue;
@Configuration
@EnableJms
public class ActiveMQConfig {
@Bean
public Queue queue() {
return new ActiveMQQueue("my-queue");
}
@Bean
public JmsTemplate jmsTemplate(ActiveMQConnectionFactory connectionFactory) {
JmsTemplate jmsTemplate = new JmsTemplate(connectionFactory);
jmsTemplate.setDefaultDestination(queue());
return jmsTemplate;
}
}
3.2 创建消息消费者(Consumer)
消息消费者用于接收队列中的消息。我们使用 @JmsListener
注解来标记方法,使其能够自动监听队列中的消息。
创建消息消费者类
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;
@Component
public class MessageConsumer {
@JmsListener(destination = "my-queue")
public void receiveMessage(String message) {
System.out.println("Received message: " + message);
}
}
@JmsListener
注解让方法自动监听队列 "my-queue"
,并接收来自队列的消息。
⚙️ 4. 消息队列的高级功能
4.1 消息持久化与事务
消息持久化是确保消息在传输过程中不会丢失的一种机制。ActiveMQ 默认支持消息持久化,可以确保即使在服务器崩溃的情况下,消息也不会丢失。
为了启用持久化消息,可以在发送消息时配置消息的持久化属性:
jmsTemplate.convertAndSend(queue, message, messagePostProcessor -> {
messagePostProcessor.setJMSDeliveryMode(DeliveryMode.PERSISTENT);
return messagePostProcessor;
});
同时,我们可以使用 Spring 的事务管理 来确保消息传递的可靠性。在需要确保消息传递成功的场景中,可以使用 @Transactional
来管理消息的事务。
4.2 异常处理与重试机制
在分布式系统中,消息队列的消费可能会失败。为了解决这一问题,我们可以通过 Spring 提供的 DefaultMessageListenerContainer
来进行消息重试与失败处理。比如,可以设置最大重试次数,并在失败时将消息发送到死信队列(DLQ)。
4.3 消息的优先级与延迟
ActiveMQ 支持消息优先级的设置,可以通过设置不同的优先级来影响消息的消费顺序。例如,我们可以将高优先级的消息优先发送到消费者:
jmsTemplate.convertAndSend(queue, message, messagePostProcessor -> {
messagePostProcessor.setJMSPriority(9); // 设置消息优先级,0 到 9
return messagePostProcessor;
});
同时,ActiveMQ 也支持延迟消息的发送,可以设置消息的延迟时间,适用于定时任务等场景。
📘 总结:提高系统解耦与可靠性
通过集成 ActiveMQ,我们能够实现高效的消息传递机制,确保系统之间的解耦和高可用性。通过 Spring Boot 和 Spring JMS,我们可以轻松实现消息的生产与消费,并结合消息的持久化、事务管理、优先级控制等功能,提升系统的容错性和可靠性。
希望本文帮助你理解如何在 Spring Boot 项目中集成 ActiveMQ,构建可靠的异步消息系统!
🧧福利赠与你🧧
无论你是计算机专业的学生,还是对编程有兴趣的小伙伴,都建议直接毫无顾忌的学习此专栏「滚雪球学SpringBoot」专栏(全网一个名),bug菌郑重承诺,凡是学习此专栏的同学,均能获取到所需的知识和技能,全网最快速入门SpringBoot,就像滚雪球一样,越滚越大, 无边无际,指数级提升。
最后,如果这篇文章对你有所帮助,帮忙给作者来个一键三连,关注、点赞、收藏,您的支持就是我坚持写作最大的动力。
同时欢迎大家关注公众号:「猿圈奇妙屋」 ,以便学习更多同类型的技术文章,免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板、技术文章Markdown文档等海量资料。
✨️ Who am I?
我是bug菌,CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家,C站博客之星Top30,华为云多年度十佳博主/价值贡献奖,掘金多年度人气作者Top40,掘金等各大社区平台签约作者,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者;全网粉丝合计 30w+;更多精彩福利点击这里;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试真题、4000G PDF电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿。

-End-
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)