当前位置: 首页 > news >正文

Spring Boot 多 ActiveMQ 通道配置与多连接消息发送实战(含完整示例与踩坑记录)

文章目录

  • 前言
  • 一、环境准备
    • 📌 单 ActiveMQ 配置
    • 📌 多 ActiveMQ 配置
    • 📌 多 MQ 注入使用 controller
  • 二、踩坑记录
    • 1.✅ NoUniqueBeanDefinitionException
    • 2.✅ Could not resolve placeholder
  • 总结
    • 📌 完整项目源码
    • 📌 结语


前言

在实际的企业应用开发中,消息队列(MQ)是系统解耦、异步通讯、高并发削峰填谷的重要手段。尤其是制造业、物流、金融、IoT场景下,常常会同时接入多个 MQ 实例,或者将消息分别投递到不同 MQ 队列与通道中。

Spring Boot 自带的 spring-boot-starter-activemq 默认只支持单个 ActiveMQ 实例。但在实际业务中,我们常常有如下需求:

  • 不同业务系统对接不同 MQ 地址
  • 数据需要同时发送到多个 MQ
  • 不同厂商独立的消息中间件部署

本篇文章将带你完整实现:
✅ 多 ActiveMQ 实例独立配置
✅ 多 JmsMessagingTemplate 实例注入使用
✅ 多消息发送接口与队列定义
✅ 踩坑记录与常见异常排查


一、环境准备

  • Spring Boot 2.7.x / 3.x
  • ActiveMQ 5.x
  • Maven依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-activemq</artifactId>
</dependency>

📌 单 ActiveMQ 配置

application.yml:

spring:activemq:broker-url: tcp://localhost:61616user: adminpassword: admin

配置类:

@Configuration
@Slf4j
public class ActivemqConfig {@Value("${spring.activemq.broker-url}")private String brokerUrl;@Value("${spring.activemq.user}")private String username;@Value("${spring.activemq.password}")private String password;// 连接工厂@Beanpublic ConnectionFactory connectionFactory() {return new ActiveMQConnectionFactory(username, password, brokerUrl);}// 消息发送模板@Bean(name = "jmsMessageTemplate")public JmsMessagingTemplate jmsMessagingTemplate() {return new JmsMessagingTemplate(connectionFactory());}// 定义队列@Bean(name = "AOI_J10-1_4")public Queue aoiQueue() {return new ActiveMQQueue("AOI_J10-1_4");}// 其他队列类似
}

📌 多 ActiveMQ 配置

两个mq的配置
application.yml:

spring:activemq:broker-url: tcp://localhost:61616user: adminpassword: adminjt:activemq:broker-url: tcp://192.168.22.130:61616user: adminpassword: admin

配置类:

@Configuration
@Slf4j
public class JtActivemqConfig {@Value("${jt.activemq.broker-url}")private String brokerUrl;@Value("${jt.activemq.user}")private String username;@Value("${jt.activemq.password}")private String password;@Bean(name = "jtConnectionFactory")public ConnectionFactory jtConnectionFactory() {return new ActiveMQConnectionFactory(username, password, brokerUrl);}@Bean(name = "jtJmsMessagingTemplate")public JmsMessagingTemplate jtJmsMessagingTemplate(@Qualifier("jtConnectionFactory") ConnectionFactory connectionFactory) {return new JmsMessagingTemplate(connectionFactory);}// jt MQ 队列@Bean(name = "jtQueue")public Queue jtQueue() {return new ActiveMQQueue("Report_ProductGague_H_The_H_The_Two");}
}

📌 多 MQ 注入使用 controller

Controller 中:

@RestController
@RequestMapping("/api")
@Slf4j
public class DataController {@Resource(name = "jmsMessageTemplate")private JmsMessagingTemplate defaultTemplate;@Resource(name = "jtJmsMessagingTemplate")private JmsMessagingTemplate jtTemplate;@Resource(name = "AOI_J10-1_4")private Queue aoiQueue;@Resource(name = "jtQueue")private Queue jtQueue;@PostMapping("/send")public String sendMessage(@RequestBody String msg) {// 发送到本地 MQdefaultTemplate.convertAndSend(aoiQueue, msg);log.info("已发送至本地队列: {}", aoiQueue);// 同时发送到jt MQjtTemplate.convertAndSend(jtQueue, msg);log.info("已发送至jt队列: {}", jtQueue);return "success";}
}

二、踩坑记录

1.✅ NoUniqueBeanDefinitionException

异常信息:

No qualifying bean of type 'JmsMessagingTemplate' available: expected single matching bean but found 2

原因:
容器中存在两个 JmsMessagingTemplate,Spring 不知道该注入哪个。

解决:
使用 @Resource(name=“”) 或 @Qualifier(“beanName”) 精准指定。

⚠️ 多个 JmsMessagingTemplate Bean 存在,Spring 无法自动装配
✔️ 解决:使用 @Resource(name=“”) 或 @Qualifier(“beanName”) 精确注入

2.✅ Could not resolve placeholder

异常信息:

Could not resolve placeholder 'jt.activemq.broker-url'

原因:
配置文件 application.yml 中缺失该配置。

解决:
补全配置项,或使用 @ConfigurationProperties(prefix = “jt.activemq”) 封装配置对象,更优雅。

⚠️ application.yml 中缺少 jt.activemq.broker-url 配置
✔️ 解决:补全多 MQ 配置项,或者使用 @ConfigurationProperties 封装配置更优雅

总结

本项目实现了:
✅ 多 ActiveMQ 实例独立配置
✅ 多消息发送模板独立 Bean 定义
✅ 多队列动态注入
✅ 实现不同 MQ 消息分发
✅ 避免 Bean 冲突、配置项缺失的常见异常

适用于:

  • 多厂商、多业务消息独立通道场景
  • 高并发异构系统中间件集成
  • 微服务独立 MQ 通讯

本项目实现了:
✅ 多 ActiveMQ 实例独立配置
✅ 多消息发送模板独立 Bean 定义
✅ 多队列动态注入
✅ 实现不同 MQ 消息分发
✅ 避免 Bean 冲突、配置项缺失的常见异常

适用于:

  • 多厂商、多业务消息独立通道场景
  • 高并发异构系统中间件集成
  • 微服务独立 MQ 通讯

📌 完整项目源码

👉 如有需要,可留言或私信,分享完整 Spring Boot 多 ActiveMQ 配置与消息发送 DEMO 项目。

📌 结语

多 MQ 配置在实际生产环境中非常常见,理解 MQ 连接、消息模板、队列定义、消息发送与监听的关系,是搞定 MQ 通讯的基础。

本文就是一份通用、可复制、实战型解决方案,希望对你有帮助。👊

如果你觉得这篇文章有用,别忘了 👉 点赞、收藏、关注,一起搞定 Spring 全家桶!

http://www.lryc.cn/news/579512.html

相关文章:

  • Ubuntu 24.04 LTS 服务器配置:安装 JDK、Nginx、Redis。
  • 一体机电脑为何热度持续上升?消费者更看重哪些功能?
  • 关于系统无法找到 arm-linux-gcc 命令,这表明你的环境中尚未安装 ARM 交叉编译工具链。以下是详细的解决方案:(DIY机器人工房)
  • 牛客:HJ16 购物单【01背包】【华为机考】
  • 封装 获取paramsByKey 方法
  • 毕业设计(启智模块化机器人的组装与K5的使用
  • 使用Visual Studio 2022创建CUDA编程项目
  • 车载交换机动态MAC学习和静态MAC绑定如何获取MAC地址表
  • jenkins角色权限
  • 这才叫窗口查询!TDEngine官方文档没讲透的实战玩法
  • 微信小程序41~50
  • 佰力博科技与您探讨压电材料的原理与压电效应的应用
  • C++(std::sort)
  • 【轨物洞见】光伏机器人与组件、支架智能化协同白皮书
  • 如何避免服务器出现故障情况?
  • SPLADE 在稀疏向量搜索中的原理与应用详解
  • 【NLP入门系列四】评论文本分类入门案例
  • ubuntu 6.8.0 安装xenomai3.3
  • lspci查看PCI设备详细信息
  • OpenCV篇——项目(二)OCR文档扫描
  • Rust方法语法:赋予结构体行为的力量
  • ConcurrentHashMap 原理
  • Linux多线程(十二)之【生产者消费者模型】
  • 汽车ECU产线烧录和检测软件怎么做?
  • Flutter 3.29+使用isar构建失败
  • HarmonyOS ArkTS卡片堆叠滑动组件实战与原理详解(含源码)
  • Java网络编程:TCP/UDP套接字通信详解
  • I/O 进程 7.2
  • 在Ubuntu 24.04主机上创建Ubuntu 14.04编译环境的完整指南
  • (一)复习(模块注入/minimal api/EF和Dapper实现CQRS)