You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 17:37:21