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

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

本文介绍如何在 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 相关产品和应用

全部下载

专题列表