Spring 集成 RabbitMQ ConnectionFactory 在 RabbitMQ 关闭时优雅地停止重试

Spring Integration RabbitMQ ConnectionFactory gracefully stop retry if RabbitMQ is down

我配置了 Spring 与 RabbitMQ 集成作为消息代理。我有一个场景,其中应用程序可以使用 RabbitMQ down.When 部署在生产环境中,它发生在应用程序连续尝试重新连接

org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer run
WARNING: Consumer raised exception, processing can restart if the connection factory supports it. Exception summary: org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused

我的服务器日志中充满了这些日志。我如何配置连接工厂,也就是说,尝试以 10,30 或 60 mis 的间隔仅重新连接 5 次? 我希望能够控制重试并打印一些自定义消息。

只有一个简单的recoveryInterval,可以增加,但是是固定的; 有一些关于如何实现更复杂的东西的建议。

如果您想为您的 RabbitMQ 客户端使用更复杂的恢复和重新连接策略,您可以查看我们的 Lyra。例如:

Config config = new Config()
    .withRecoveryPolicy(new RecoveryPolicy()
        .withBackoff(Duration.seconds(1), Duration.seconds(30))
        .withMaxAttempts(20)
        .withMaxDuration(Duration.minutes(5)));

Connection connection = Connections.create(new ConnectionOptions(), config);

它不涉及 spring-amqp,而是使用标准的 amqp-client API,但它确实为您提供了强大的故障处理和资源恢复。