SpringBoot 整合 ActiveMQ 实现点对点消息队列

唐可
唐可
发布时间:2026-10-15| 5人浏览过
原创

本文介绍如何在 SpringBoot 中集成 ActiveMQ 实现点对点(P2P)消息队列。通过引入依赖、配置连接参数,利用 JmsMessagingTemplate 发送与接收消息,并借助 @JmsListener 注解实现自动监听与异步处理,解决手动调用接口处理消息的低效问题,构建简易的消息流水线。

准备条件

在开始编码之前,确保本地已启动 ActiveMQ 服务。默认情况下,ActiveMQ 监听 tcp://localhost:61616。若未安装,可前往官方下载并在终端执行启动脚本以启用服务。

添加项目依赖

在 pom.xml 中引入 Spring Boot 提供的 ActiveMQ Starter 依赖,它将自动配置 JMS 相关的组件:

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

配置连接信息

在 application.yml 或 properties 文件中配置 Broker URL 及 JMS 模板属性。以下配置开启了非发布订阅模式(即点对点模式),并设置了默认目标队列:

spring:
  activemq:
    broker-url: tcp://localhost:61616
  jms:
    template:
      default-destination: my_queue # 可设默认队列名
    pub-sub-domain: false           # false 表示点对点(P2P),true 表示主题(Topic)

实现消息发送业务

创建一个 Service 类,注入 JmsMessagingTemplate。该模板封装了底层的 JMS 操作,使发送消息变得简单。例如,将订单 ID 发送到名为 "AA" 的队列:

@Service
public class MessageService {
    @Autowired
    private JmsMessagingTemplate template;

    public void sendMessage(String id) {
        // 将消息发送到队列 "AA"
        template.convertAndSend("AA", id);
        System.out.println("待发送短信的订单已纳入处理队列,id:" + id);
    }
}

使用监听器实现自动消费

为了避免通过 Controller 手动调用接口来处理消息,可以使用 @JmsListener 注解注册一个监听器。一旦队列中有消息产生,该方法会自动被触发。

第 1 步:定义消息监听组件

创建 MessageListener 类,标注 @Component 以便被 Spring 扫描到。指定监听的目的地为 "AA":

@Component
public class MessageListener {
    @Autowired
    private JmsMessagingTemplate template;

    /**
     * 监听队列 "AA" 中的消息
     */
    @JmsListener(destination = "AA")
    public void processMessage(String id) {
        System.out.println("已完成短信发送业务,id:" + id);
        // 此处可添加实际的业务逻辑,如发送短信逻辑
    }
}

此时,当调用上面的 MessageService.sendMessage() 时,消息会被放入队列,MessageListener 会自动消费并打印日志,实现了消息的自动化处理。

扩展:消息链式处理

如果需要将处理后的结果传递到下一个队列(例如从 "AA" 传到 "BB"),可以在监听方法上使用 @SendTo 注解。返回的字符串将被自动发送到指定的新队列中:

@Component
public class ChainMessageListener {

    @JmsListener(destination = "AA")
    @SendTo(value = "BB")
    public String processAndForward(String id) {
        System.out.println("原始消息 ID:" + id);
        // 处理逻辑...
        return "new_" + id; // 返回的数据将被发送到队列 "BB"
    }
}

这种方式可以实现简单的消息流水线处理。需要注意的是,点对点模型中,每个消息只会被一个消费者获取;而订阅模型(Pub/Sub)则允许多个订阅者同时收到同一消息,可根据实际业务场景选择合适的模式。

以上就是 SpringBoot 整合 ActiveMQ 实现点对点消息队列的详细内容,更多关于 SpringBoot 消息中间件集成的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。