【问题标题】:RabbitMQ - no queue found stopping Spring serverRabbitMQ - 找不到停止 Spring 服务器的队列
【发布时间】:2019-02-11 12:52:05
【问题描述】:

我有一个使用来自rabbitmq 的消息的spring 应用程序。 但是,当 RabbitMQ 服务器宕机时,spring 服务器无法启动。

以下是例外,

Caused by: com.rabbitmq.client.ShutdownSignalException: connection error; protocol method: #method<connection.close>(reply-code=530, reply-text=NOT_ALLOWED - vhost test_queue not found, class-id=10, method-id=40)
        at com.rabbitmq.utility.ValueOrException.getValue(ValueOrException.java:66) ~[amqp-client-4.0.1.jar:4.0.1]
        at com.rabbitmq.utility.BlockingValueOrException.uninterruptibleGetValue(BlockingValueOrException.java:32) ~[amqp-client-4.0.1.jar:4.0.1]
        at com.rabbitmq.client.impl.AMQChannel$BlockingRpcContinuation.getReply(AMQChannel.java:366) ~[amqp-client-4.0.1.jar:4.0.1]
        at com.rabbitmq.client.impl.AMQChannel.privateRpc(AMQChannel.java:229) ~[amqp-client-4.0.1.jar:4.0.1]
        at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:117) ~[amqp-client-4.0.1.jar:4.0.1]
        at com.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:381) ~[amqp-client-4.0.1.jar:4.0.1]
        at com.rabbitmq.client.impl.recovery.RecoveryAwareAMQConnectionFactory.newConnection(RecoveryAwareAMQConnectionFactory.java:62) ~[amqp-client-4.0.1.jar:4.0.1]

有没有办法让 spring 应用程序在没有找到队列的情况下仍然启动?

弹簧配置。

<rabbit:connection-factory id="connectionFactory" host="${host}" port="${port}" username="${rabbitmq.username}" password="${rabbitmq.password}" virtual-host="${rabbitmq.virtualhost}"/>

    <rabbit:queue name="${rabbitmq.create.queue}" />


    <rabbit:template queue="${rabbitmq.feedback.queue}"
    exchange="${rabbitmq.feedback.exchange}" id="amqpTemplate"
    connection-factory="connectionFactory" />

    <bean id="xyzConsumerListener" class="com.sample.rabbitmq.listener.XyzConsumerListener">
    </bean>

    <rabbit:listener-container id="myListenerContainer" connection-factory="connectionFactory">
        <rabbit:listener ref="xyzConsumerListener" queue-names="${rabbitmq.create.queue}"/>
    </rabbit:listener-container>

问候, 法尔汉

【问题讨论】:

    标签: java spring rabbitmq


    【解决方案1】:

    错误消息指出它无法找到名为 test_queue 的虚拟主机。

    请检查虚拟主机是否存在或使用/ 作为您的虚拟主机。

    在这种特殊情况下,如果找不到虚拟主机,我认为应用程序不会启动。此外,如果您已将 RMQ 配置为不允许使用提供的凭据立即创建队列,它也可能完全失败,因为这是无法恢复的情况。

    【讨论】:

    • 谢谢戴夫。但是,即使在启动时找不到队列,我也希望我的 spring 应用程序能够启动。我发现如果 rabbit-listener 容器上的属性 missing-queue-fatal=false 允许 spring 应用程序在 rabbitmq 进入恢复模式时启动。基于 recovery-interval 和 failed-declaration-retry-interval,我们可以让 rabbitmq 再次轮询错过的队列。本站属性详解:docs.spring.io/spring-amqp/reference/htmlsingle
    • 很划算,很高兴您找到了该物业。
    猜你喜欢
    • 2014-01-04
    • 1970-01-01
    • 1970-01-01
    • 2019-12-23
    • 1970-01-01
    • 2015-02-22
    • 1970-01-01
    • 1970-01-01
    • 2021-02-12
    相关资源
    最近更新 更多