SpringBoot 整合 ActiveMQ 实现点对点消息队列
本文介绍如何在 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 消息中间件集成的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













