Spring-AMQP 的一个很好的特性是它似乎实现了在代理关闭和恢复时将 Spring 应用程序重新连接到消息代理所需的逻辑。
我正在寻找的是检测应用程序中何时发生此类断开/重新连接事件的首选方法。
到目前为止,我想出的最好的方法是一种类似轮询的机制,我尝试定期从连接工厂获取通道。
提前致谢!
Spring-AMQP 的一个很好的特性是它似乎实现了在代理关闭和恢复时将 Spring 应用程序重新连接到消息代理所需的逻辑。
我正在寻找的是检测应用程序中何时发生此类断开/重新连接事件的首选方法。
到目前为止,我想出的最好的方法是一种类似轮询的机制,我尝试定期从连接工厂获取通道。
提前致谢!
随意打开“改进” JIRA 问题ApplicationEvent
- 我们可以在连接丢失(并重新建立)时发出;然后,您可以使用ApplicationListener
.
与此同时,您可以通过您的日志子系统做一些事情——例如,使用 Log4J,您可以创建一个自定义附加程序来获取具有该SimpleMessageListenerContainer
类别的日志,例如...
16:05:50.042 WARN [SimpleAsyncTaskExecutor-6][org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer] Consumer raised exception, processing can restart if the connection factory supports it. Exception summary: com.rabbitmq.client.ShutdownSignalException: connection error; reason: {#method<connection.close>(reply-code=320, reply-text=CONNECTION_FORCED - broker forced connection closure with reason 'shutdown', class-id=0, method-id=0), null, ""}
16:05:55.048 WARN [SimpleAsyncTaskExecutor-7][org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer] Consumer raised exception, processing can restart if the connection factory supports it. Exception summary: org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused
编辑:
还有一个ConnectionListener
接口,您可以使用连接工厂注册实现;您可以通过它了解新的连接,但onClose()
目前仅在通过销毁工厂显式关闭连接时调用。
但是,为您提供了连接的句柄,因此您可以不时onCreate()
调用它的方法,但不要在方法本身中这样做 - 保存连接。您必须退出以便所有人按计划工作。isOpen()
onCreate()
onCreate()