RabbitMQ 文档介绍了如何添加关闭侦听器以及何时调用侦听器,但我看不到处理程序的用途。似乎所有的 Java 示例(包括https://github.com/rabbitmq/rabbitmq-tutorials)都忽略了关闭处理程序。在哪些情况下,我应该更喜欢关闭侦听器而不是简单地捕获ShutdownSignalException
(和IOException
)异常?
另一个令人费解的问题是当处理程序完成时控制流去哪里。
可能相关的 SO 问题:
RabbitMQ 文档介绍了如何添加关闭侦听器以及何时调用侦听器,但我看不到处理程序的用途。似乎所有的 Java 示例(包括https://github.com/rabbitmq/rabbitmq-tutorials)都忽略了关闭处理程序。在哪些情况下,我应该更喜欢关闭侦听器而不是简单地捕获ShutdownSignalException
(和IOException
)异常?
另一个令人费解的问题是当处理程序完成时控制流去哪里。
可能相关的 SO 问题:
捕获 IOException 可以告诉您是否由于方法调用而导致连接/通道关闭,但连接/通道也可以不由自主地关闭,例如与服务器的连接丢失。在这种情况下,ShutdownListener 是了解连接/通道关闭的唯一方法。
关闭侦听器通常用于提供连接/通道恢复,尽管可靠地恢复本身就是一个挑战。为此,请查看Lyra。
ShutdownListener
我见过的主要用途是自动重新连接。您监听关机,当它发生时,尝试重新连接。
例如,这是rabbitmq-ha-client的基础,它在HaConnectionFactory.HaShutdownListener中完成。