RabbitMQ AMQP Java客户端关闭处理程序的用途是什么?

RabbitMQ文档介绍了如何添加关闭侦听器以及何时调用侦听器但我无法看到处理程序的用途。 似乎所有Java示例(包括https://github.com/rabbitmq/rabbitmq-tutorials )都忽略了关闭处理程序。 在哪种情况下,我更喜欢关闭监听器而不是简单地捕获ShutdownSignalException (和IOException )exception?

另一个令人费解的问题是控制流程在处理程序完成时的位置。

可能相关的相关SO问题:

  • 通过运行RabbitMQ使用者安全地结束Java应用程序的最佳方法是什么?
  • 使用RabbitMQ(Java客户端),有没有办法确定消费期间网络连接是否关闭?

捕获IOException可以告诉您是否由于方法调用而发生连接/通道关闭,但是连接/通道也可以被非自愿关闭,例如,如果与服务器的连接丢失。 在这种情况下,ShutdownListener是了解连接/通道关闭的唯一方法。

关闭侦听器通常用于提供连接/通道恢复,尽管可靠地恢复是其自身的挑战。 为此,请查看Lyra 。

我见过的ShutdownListener的主要用途是自动重新连接。 你监听关机,当它发生时,尝试重新连接。

例如,这是rabbitmq-ha-client的基础,它在HaConnectionFactory.HaShutdownListener中完成。