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