Spring Boot连接ActiveMQ Artemis超时问题求助
问题排查与解决方案
核心问题分析
报错AMQ219013: Timed out waiting to receive cluster topology和AMQ219007: Cannot connect to server(s)本质是客户端与Artemis服务器的协议/端口不匹配,加上依赖冗余导致的连接失败。
1. 修正端口与协议配置
默认情况下:
- Apache ActiveMQ Artemis的原生JMS协议端口是
61616 5672是AMQP协议的默认端口
你当前用ActiveMQConnectionFactory(JMS客户端)连接到AMQP端口,协议不匹配导致无法获取集群拓扑信息。
调整连接工厂配置
修改ActiveMQConfig,使用正确的端口与协议:
@Configuration class ActiveMQConfig { @Bean fun connectionFactory(): ConnectionFactory { // 使用原生JMS协议端口61616,无需额外指定protocols参数 return ActiveMQConnectionFactory("tcp://localhost:61616", "artemis", "artemis") } }
更新Docker端口映射
启动容器时需要映射61616端口,命令示例:
docker run -d -p 61616:61616 -p 5672:5672 apache/activemq-artemis:latest-alpine
2. 清理冗余依赖
spring-boot-starter-artemis已包含Artemis JMS客户端的核心依赖,手动添加的artemis-jakarta-client、artemis-jms-server等会导致版本冲突或冗余,删除这些依赖:
dependencies { implementation("org.springframework.boot:spring-boot-starter-data-jpa") implementation("org.springframework.boot:spring-boot-starter-web") implementation("org.springframework.boot:spring-boot-starter-security") implementation("org.springframework.boot:spring-boot-starter-quartz") implementation("org.springframework.boot:spring-boot-starter-artemis") implementation("com.fasterxml.jackson.module:jackson-module-kotlin") implementation("org.jetbrains.kotlin:kotlin-reflect") implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0") implementation("io.jsonwebtoken:jjwt:0.12.5") // 移除冗余的JMS API和Artemis依赖 // implementation("javax.jms:javax.jms-api:2.0.1") // implementation("org.apache.activemq:artemis-jakarta-client:2.33.0") // implementation("org.apache.activemq:artemis-jakarta-server:2.33.0") // implementation("org.apache.activemq:artemis-jms-server:2.33.0") // implementation("org.apache.activemq:artemis-jms-client:2.33.0") implementation("org.springframework.boot:spring-boot-starter-mail") runtimeOnly("org.postgresql:postgresql") testImplementation("org.springframework.boot:spring-boot-starter-test") }
3. 推荐使用Spring Boot自动配置
Spring Boot对Artemis有完善的自动配置支持,可完全移除自定义的ActiveMQConfig,直接在配置文件中定义连接信息:
application.yml
spring: artemis: mode: native broker-url: tcp://localhost:61616 user: artemis password: artemis
Spring Boot会自动创建正确的ConnectionFactory和JmsTemplate实例,无需手动编写配置Bean,减少出错概率。
4. 验证队列存在性
确保Artemis服务器中存在test-queue队列,可通过以下方式处理:
- 登录Artemis控制台(默认端口8161,用户名/密码
artemis/artemis)手动创建队列 - 启动Docker容器时启用自动创建队列:
docker run -d -p 61616:61616 -p 8161:8161 -e ARTEMIS_AUTO_CREATE_QUEUES=true apache/activemq-artemis:latest-alpine
内容的提问来源于stack exchange,提问作者Korlivar
相关产品推荐
相关产品推荐

