SpringBoot 4.1 Starter ActiveMQ集成与集群【消息中间件】

夏辰同学_9135

夏辰同学_9135

2026-08-07

403人浏览

原创

必须使用spring-boot-starter-activemq-jakarta 4.1.0,配置failover集群url并禁用randomize,手动创建boot.queue队列,移除旧池化依赖,确保activemq artemis集群的network connectors处于active状态。

springboot 4.1 starter activemq集成与集群【消息中间件】

要在SpringBoot 4.1项目中完成ActiveMQ Starter的集成并支持集群部署,必须避开Spring Boot 3.x起废弃的auto-configuration路径,同时解决ActiveMQ 6.x新版本对JMS 2.0.3+的强制要求,否则启动时会抛出javax.jms.JMSException: Not a valid JMS destination异常。

确认ActiveMQ服务端已就绪

访问 http://localhost:8161/admin,使用默认账号 admin/admin 登录管理后台。若页面无法打开,说明ActiveMQ未运行或端口被占用——【必须确保8161(控制台)和61616(OpenWire协议)端口均处于监听状态】

在Queues标签页下,手动创建一个名为 BOOT.QUEUE 的队列,不勾选“Temporary”,点击“Create”。这一步不能跳过,Spring Boot 4.1默认不再自动创建队列,仅支持连接已存在的目标。

检查左侧导航栏是否显示 “Network Connectors” 且状态为 “Active”。若无此选项或显示 “Disabled”,说明当前运行的是单节点模式,不满足集群前提条件。

引入适配Spring Boot 4.1的Starter依赖

在 pom.xml 中替换旧版 starter,使用官方维护的 Jakarta EE 兼容版本:


  org.springframework.boot
  spring-boot-starter-activemq-jakarta
  4.1.0

删除所有含 activemq-poolpooled-jms 的依赖项——Spring Boot 4.1内置连接池已重构为 org.apache.activemq.artemis.jms.client.ActiveMQJMSConnectionFactory,旧池化实现与Jakarta命名空间冲突,会导致 BeanCreationException。

如果项目中存在自定义 JmsTemplate Bean 定义,必须移除或重命名为非默认名(如 customJmsTemplate),否则会覆盖 Spring Boot 4.1 自动配置的 Jakarta 兼容实例。

配置application.yml启用集群连接

使用 YAML 格式,严格区分空格缩进,不可混用 Tab:

spring:
  activemq:
    broker-url: failover:(tcp://192.168.1.10:61616,tcp://192.168.1.11:61616,tcp://192.168.1.12:61616)?randomize=false&initialReconnectDelay=500&maxReconnectDelay=30000
    user: admin
    password: admin
  jms:
    pub-sub-domain: false
    template:
      default-destination: BOOT.QUEUE

【failover URL 中的 randomize=false 是关键,否则集群节点间负载不均,消息可能卡在某一台Broker上无法投递】

broker-url 中三个 IP 必须对应实际部署的 ActiveMQ Artemis 集群节点地址;若使用传统 ActiveMQ 5.x,需先升级至 5.18.3+ 并启用 networkConnector 配置,否则 failover 机制无法识别集群拓扑。

声明队列并注入JmsTemplate

方法一:通过 @Bean 声明标准 Queue 实例

团象
团象

团象是一款AI工具,AI内容检测与优化平台。

下载

@Configuration
public class JmsQueueConfig {
  @Bean
  public Queue bootQueue() {
    return new ActiveMQQueue("BOOT.QUEUE");
  }
}

方法二:使用 @Value 绑定配置属性(更推荐)

@Configuration
public class JmsQueueConfig {
  @Value("${spring.jms.template.default-destination}")
  private String queueName;

  @Bean
  public Queue bootQueue() {
    return new ActiveMQQueue(queueName);
  }
}

注意:不要在 @JmsListener 注解中直接写死队列名,例如 @JmsListener(destination = "BOOT.QUEUE") —— 这会导致监听器绑定到本地内存队列而非集群Broker,消息将无法跨节点消费。

编写生产者发送消息

第一步:注入 Jakarta 兼容的 JmsTemplate

@Autowired
private JmsTemplate jmsTemplate;

第二步:构造消息并发送

String payload = "order-id-202608061702";
jmsTemplate.convertAndSend("BOOT.QUEUE", payload);

第三步:验证发送结果

登录 ActiveMQ 控制台 → Queues → 点击 BOOT.QUEUE → 查看 “Number Of Pending Messages” 是否 +1。若为 0,检查日志中是否有 “Failed to connect to broker” 或 “Destination does not exist” 错误。

第四步:添加消息头以支持集群路由

MessagePostProcessor postProcessor = message -> {
  message.setJMSXGroupID("GROUP-A");
  message.setStringProperty("cluster-route", "shard-1");
  return message;
};
jmsTemplate.convertAndSend("BOOT.QUEUE", payload, postProcessor);

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
spring框架介绍
spring框架介绍

本专题整合了spring框架相关内容,想了解更多详细内容,请阅读专题下面的文章。

2025.08.06

2131

22

Java Spring Security 与认证授权
Java Spring Security 与认证授权

本专题系统讲解 Java Spring Security 框架在认证与授权中的应用,涵盖用户身份验证、权限控制、JWT与OAuth2实现、跨站请求伪造(CSRF)防护、会话管理与安全漏洞防范。通过实际项目案例,帮助学习者掌握如何 使用 Spring Security 实现高安全性认证与授权机制,提升 Web 应用的安全性与用户数据保护。

2026.01.26

397

25

什么是中间件
什么是中间件

中间件是一种软件组件,充当不兼容组件之间的桥梁,提供额外服务,例如集成异构系统、提供常用服务、提高应用程序性能,以及简化应用程序开发。想了解更多中间件的相关内容,可以阅读本专题下面的文章。

2024.05.11

549

5

Golang 中间件开发与微服务架构
Golang 中间件开发与微服务架构

本专题系统讲解 Golang 在微服务架构中的中间件开发,包括日志处理、限流与熔断、认证与授权、服务监控、API 网关设计等常见中间件功能的实现。通过实战项目,帮助开发者理解如何使用 Go 编写高效、可扩展的中间件组件,并在微服务环境中进行灵活部署与管理。

2025.12.18

564

18

ThinkPHP中间件机制与请求拦截处理实践
ThinkPHP中间件机制与请求拦截处理实践

本专题围绕 ThinkPHP 中间件体系展开,深入讲解中间件的定义、注册与执行流程。内容包括全局中间件与路由中间件的区别、请求前后处理逻辑、自定义中间件开发以及权限验证与日志处理应用。通过实际案例,帮助开发者掌握中间件在项目中的核心作用与最佳实践。

2026.03.31

398

17

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

2026.09.23

0

15

Buffalo框架路由与请求处理实操指南
Buffalo框架路由与请求处理实操指南

本专题讲解Buffalo框架路由与请求处理机制,涵盖路由注册与分组、资源路由、Handler编写规范、Context上下文方法、参数绑定、中间件编写挂载、Session与Cookie读写、Flash消息及错误页面定制方法。

2026.09.23

0

15

Buffalo框架零基础入门教程
Buffalo框架零基础入门教程

本专题整理Buffalo框架入门内容,涵盖Go环境准备、buffalo CLI安装、新项目生成、目录结构说明、dev热加载启动、数据库连接配置与常见报错排查,帮助新手按约定优于配置的思路跑通第一个Buffalo框架应用。

2026.09.23

0

15

Conan创建软件包配方指南
Conan创建软件包配方指南

本专题介绍通过conanfile.py创建软件包的方法,讲解包名、版本、依赖和构建设置等基础信息,以及source、build、package、package_info等常用方法的作用及编写思路。

2026.09.22

0

12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Redis6入门到精通超详细教程
Redis6入门到精通超详细教程

共47课时 | 7.1万人学习