使用频道一段时间后,我的rabbitmq重启。
然后当java客户端应用程序(仍在运行)尝试使用该通道时 -
我试图使用关闭频道。
有没有办法检查频道是否关闭?
有没有办法让它保持开放?
有没有办法做到这一点,而不是永远保持它?
(我希望当服务器重新启动时,它会删除频道和队列,但能够在新用法时创建它们)
感谢。
答案 0 :(得分:1)
Channel
您可以使用isOpen
方法。
您要做的是监控您的连接,以便在关闭时您想要开始轮询服务器再次恢复。查看Connection.addShutdownListener
和ShutdownNotifier
接口的文档。
不幸的是,无法重新连接已关闭的频道,您需要在重新连接后再创建新频道。
答案 1 :(得分:0)
您可能需要查看Spring AMQP integration,特别是Spring Retry。从第2.12节开始:
Spring Retry提供了几个AOP拦截器和大量的拦截器 灵活地指定重试的参数(数量) 尝试,异常类型,退避算法等)。春季AMQP也 提供了一些方便的工厂bean来创建Spring Retry 拦截器以方便的形式用于AMQP用例,具有很强的功能 键入的回调接口,用于实现自定义恢复逻辑。 请参阅StatefulRetryOperationsInterceptor的Javadoc和属性 和StatelessRetryOperationsInterceptor了解更多细节。
答案 2 :(得分:0)
您可以查看Lyra,这是一个RabbitMQ客户端,可以在意外关闭时自动恢复资源(连接/通道)。