Spring Boot 中 ActiveMQ Artemis 连接超时

问题描述 投票:0回答:1

我在 Spring Boot 中向 ActiveMQ Artemis 发送消息时遇到一些问题:

Uncategorized exception occurred during JMS processing; nested exception is ActiveMQConnectionTimedOutException[errorType=CONNECTION_TIMEDOUT message=AMQ219013: Timed out waiting to receive cluster topology. Group:null]

我使用

apache/activemq-artemis:latest-alpine
Docker 容器。我没有配置它并打开
5672
端口。 如果我尝试通过 JMS 模板发送消息,则会收到此错误。 我的豆子(在 Kotlin 上):

@EnableJms
@Configuration
class JmsConfig {
    @Bean
    fun jmsTemplate(connectionFactory: ConnectionFactory): JmsTemplate {
        val jmsTemplate = JmsTemplate(connectionFactory)
        jmsTemplate.messageConverter = messageConverter()
        return jmsTemplate
    }

    @Bean
    fun messageConverter(): MessageConverter {
        val converter = MappingJackson2MessageConverter()

        converter.setTargetType(MessageType.TEXT)
        converter.setTypeIdPropertyName("_type")

        return converter
    }
}
@Configuration
class ActiveMQConfig {

    @Bean
    fun connectionFactory(): ConnectionFactory {
        return ActiveMQConnectionFactory("tcp://localhost:5672?protocols=STOMP,AMQP,MQTT", "artemis", "artemis")
    }
}

我发消息的地方

@Service
class EmailGateway (
    private val template: JmsTemplate,
) {
    fun sendEmail(to: String, letter: Letter) {
        template.convertAndSend("test-queue", EmailInfo(to, letter))
    }
}

EmailInfo是一个业务逻辑类,只是带有字段的类。

我的依赖

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")
    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")
}

如果我关闭 ActiveMQ Artemis,错误将更改为:

Uncategorized exception occurred during JMS processing; nested exception is ActiveMQNotConnectedException[errorType=NOT_CONNECTED message=AMQ219007: Cannot connect to server(s). Tried with all available servers.]

我认为我需要配置我的 ActiveMQ Artemis,但我没有在我的案例中找到一些额外的设置。 Spring Boot 指南告诉我只需要使用 JMS 模板即可。

附注在嵌入式配置中一切正常

java spring spring-boot jms activemq-artemis
1个回答
0
投票

您的

ActiveMQConnectionFactory
配置为使用端口
5672
。这个
ConnectionFactory
将使用Core协议。但是,在默认代理配置中,端口
5672
是专门为 AMQP 配置的。尝试使用这个代替:

return ActiveMQConnectionFactory("tcp://localhost:61616", "artemis", "artemis")
© www.soinside.com 2019 - 2024. All rights reserved.