【问题标题】:I am using rabbitmq in Spring framework, how to call basicRecover on connection create?我在 Spring 框架中使用 rabbitmq,如何在连接创建时调用 basicRecover?
【发布时间】:2023-03-28 04:10:01
【问题描述】:

我正在使用rabbitmq spring 框架。我的队列有问题,在我的 rabbitmq 消费者部署期间,突然断开连接会留下未确认的消息。

<rabbit:listener-container id="MyListenerContainer"
    connection-factory="MyRabbitConsumerConnectionFactory"
    prefetch="100"
    concurrency="5"
    acknowledge="manual"
    auto-startup="true">
    <rabbit:listener queues="MyRabbitQueue" ref="MyConsumer"/>

<rabbit:queue id="MyRabbitQueue"
              name="MyRabbitQueue"
              declared-by="MyConsumerRabbitAdmin"
              auto-delete="false"
              durable="true"
              exclusive="false"/>

<rabbit:admin id="MyConsumerRabbitAdmin"
              connection-factory="MyRabbitConsumerConnectionFactory"
              auto-startup="true"/>

MyConsumer 实现了 ChannelAwareMessageListener 接口。 如何在连接创建期间发出 basicRecover(true) 方法?

谢谢

【问题讨论】:

    标签: java spring rabbitmq


    【解决方案1】:

    尝试玩com.rabbitmq.client.ConnectionFactory

    /**
     * Enables or disables <a href="http://www.rabbitmq.com/api-guide.html#recovery">automatic connection recovery</a>.
     * @param automaticRecovery if true, enables connection recovery
     * @see <a href="http://www.rabbitmq.com/api-guide.html#recovery">Automatic Recovery</a>
     */
    public void setAutomaticRecoveryEnabled(boolean automaticRecovery) {
        this.automaticRecovery = automaticRecovery;
    }
    

    默认为false

    【讨论】:

    • 我已启用自动恢复。我可以恢复连接。我停止消费者(停止消费者的进程)后的问题,然后稍后重新启动。在停止消费者的那一刻留下了许多未确认的消息。所以我想在第一次建立连接时调用 basicRecover。
    • 我不想推测和复制/粘贴,所以我将您发送到正确的链接:stackoverflow.com/questions/7063224
    • 我在 ConnectionFactory 上添加了一个 channelListener。在 onCreate 方法中,我将发出 channel.basicRecover(true)。我有一个问题,重新传递的消息由于 channel.basicRecover(true) 而将重新传递标志设置为 true?
    • 在我看来这是正确的。您的消息已发送一次。所以,恢复跟踪它并让您的新消费者知道之前发生了一些意想不到的事情。
    • 这种情况下redelivered标志是否设置为true?
    【解决方案2】:

    您可以使用 RabbitMQ 管理 HTTP API 列出所有通道,然后在每个通道的详细信息中,您可以查看它空闲了多长时间并做出相应的反应,例如关闭通道,这将自动取消任何已确认的消息仍在该频道上徘徊。

    请看这里:http://hg.rabbitmq.com/rabbitmq-management/raw-file/3646dee55e02/priv/www-api/help.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多