3

Spring-AMQP 的一个很好的特性是它似乎实现了在代理关闭和恢复时将 Spring 应用程序重新连接到消息代理所需的逻辑。

我正在寻找的是检测应用程序中何时发生此类断开/重新连接事件的首选方法。

到目前为止,我想出的最好的方法是一种类似轮询的机制,我尝试定期从连接工厂获取通道。

提前致谢!

4

1 回答 1

2

随意打开“改进” 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()

于 2013-10-15T20:16:08.740 回答