AMQP代理通知断开/重新连接Spring-AMQP / RabbitMQ

时间:2013-10-15 18:15:03

标签: spring spring-amqp spring-rabbit

Spring-AMQP的一个很好的功能是,当代理关闭并重新启动时,它似乎实现了将Spring应用程序重新连接到消息代理所需的逻辑。

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

到目前为止,我提出的最好的是类似轮询的机制,我试图定期从连接工厂获取一个频道。

提前致谢!

1 个答案:

答案 0 :(得分:2)

随意打开“改进”JIRA Issue - 当连接丢失(并重新建立)时,我们可以发出ApplicationEvent;然后,您可以使用ApplicationListener订阅该活动。

与此同时,您可以通过日志记录子系统执行某些操作 - 例如,使用Log4J,您可以创建自定义appender以获取具有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()以使所有人按计划工作。