兔子 - 打开一个封闭的通道

时间:2012-08-24 11:33:49

标签: java rabbitmq

使用频道一段时间后,我的rabbitmq重启。
然后当java客户端应用程序(仍在运行)尝试使用该通道时 -
我试图使用关闭频道。

有没有办法检查频道是否关闭?
有没有办法让它保持开放?
有没有办法做到这一点,而不是永远保持它? (我希望当服务器重新启动时,它会删除频道和队列,但能够在新用法时创建它们)

感谢。

3 个答案:

答案 0 :(得分:1)

Channel您可以使用isOpen方法。

您要做的是监控您的连接,以便在关闭时您想要开始轮询服务器再次恢复。查看Connection.addShutdownListenerShutdownNotifier接口的文档。

不幸的是,无法重新连接已关闭的频道,您需要在重新连接后再创建新频道。

答案 1 :(得分:0)

您可能需要查看Spring AMQP integration,特别是Spring Retry。从第2.12节开始:

  

Spring Retry提供了几个AOP拦截器和大量的拦截器   灵活地指定重试的参数(数量)   尝试,异常类型,退避算法等)。春季AMQP也   提供了一些方便的工厂bean来创建Spring Retry   拦截器以方便的形式用于AMQP用例,具有很强的功能   键入的回调接口,用于实现自定义恢复逻辑。   请参阅StatefulRetryOperationsInterceptor的Javadoc和属性   和StatelessRetryOperationsInterceptor了解更多细节。

答案 2 :(得分:0)

您可以查看Lyra,这是一个RabbitMQ客户端,可以在意外关闭时自动恢复资源(连接/通道)。