通知频道关闭 类 实施 org.springframework.amqp.rabbit.connection.ConnectionListener

Notifying channel shutdown to classes implementing the org.springframework.amqp.rabbit.connection.ConnectionListener

总是 returns 真,因为连接正在自动恢复。因此,Health API 在连接终止后 10 分钟内不会获悉连接失败。

还有其他想法吗?

首先,Spring AMQP 不需要 autoRecovery;它一直有自己的恢复机制,早于(很长一段时间)现在由客户端库提供的机制。

无论如何它在消费者端被有效禁用。

原因是当代理恢复通道时,在该通道上侦听的代码早已不复存在,并且消费者是孤立的。为了避免这个问题,我们在检测到异常时关闭通道,以防止自动恢复恢复通道。

所以,简单的答案是在底层连接中禁用自动恢复。

当使用 SimpleMessageListenerContainer 时,它将根据其 recoveryIntervalrecoveryBackOff.

无限期地继续尝试重新连接

您仍然可以使用检测信号。

此外,容器在消费者遇到异常时发布应用事件;您可以使用 ApplicationListener 来通知这些事件;有关详细信息,请参阅 the documentation

  • 按照建议,删除本机客户端的自动恢复机制对我们有用。
  • 现在 Spring AMQP 自动恢复会在连接重置时启动。
  • 并且 ConnectionListener 的 isOpen() 方法 returns 每次都是正确的连接状态,因此健康状态 API 也是固定的。