Spring Boot 如何集成 ActiveMQ?

举报
bug菌 发表于 2025/04/27 10:39:11 2025/04/27
352 0 0
【摘要】 🏆本文收录于「滚雪球学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、如何创建消息生产者与消费者,并演示如何利用消息队列提升系统的可扩展性与解耦性。


📜 目录

  1. 📝 ActiveMQ 简介
    • 1.1 什么是 ActiveMQ?
    • 1.2 ActiveMQ 的主要特点
    • 1.3 为什么使用消息队列?
  2. 🔧 Spring Boot 集成 ActiveMQ
    • 2.1 添加 ActiveMQ 依赖
    • 2.2 配置 ActiveMQ 连接
  3. 🧑‍💻 消息的生产与消费
    • 3.1 创建消息生产者(Producer)
    • 3.2 创建消息消费者(Consumer)
  4. ⚙️ 消息队列的高级功能
    • 4.1 消息持久化与事务
    • 4.2 异常处理与重试机制
    • 4.3 消息的优先级与延迟
  5. 📘 总结:提高系统解耦与可靠性

📝 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 的支持,并包含 JMSActiveMQ 客户端

2.2 配置 ActiveMQ 连接

application.propertiesapplication.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

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。