在使用频道一段时间后,我的rabbitmq重新启动。
然后当java客户端应用程序(仍在运行)尝试使用频道 -
我尝试使用关闭频道。兔子 - 打开一个关闭频道
有没有办法检查通道是否关闭?
有没有办法让它打开?
有没有办法做到这一点,而不是永远保留它?
(我希望当服务器重新启动时,它会删除通道和队列,但可以在新的使用情况下创建它们)
谢谢。
在使用频道一段时间后,我的rabbitmq重新启动。
然后当java客户端应用程序(仍在运行)尝试使用频道 -
我尝试使用关闭频道。兔子 - 打开一个关闭频道
有没有办法检查通道是否关闭?
有没有办法让它打开?
有没有办法做到这一点,而不是永远保留它?
(我希望当服务器重新启动时,它会删除通道和队列,但可以在新的使用情况下创建它们)
谢谢。
您可能想查看Spring AMQP integration,尤其是Spring Retry。从部分2.12:
春重试提供了一些AOP拦截器和 具有很大的灵活性来指定重试参数( 尝试次数,异常类型,退避算法等)。 Spring AMQP还为 提供了一些便利的工厂bean,用于为AMQP用例创建Spring Retry 拦截器,并为您提供强大的 类型回调接口,以实现自定义恢复逻辑。 有关更多详细信息,请参阅StatefulRetryOperationsInterceptor 和StatelessRetryOperationsInterceptor的Javadocs和属性。
Channel
有一个isOpen
方法可以使用。
你想要做的是监视你的连接,以便当它关闭时,你想开始轮询服务器再次回来。查看Connection.addShutdownListener
和ShutdownNotifier
接口的文档。
不幸的是,封闭的频道无法重新连接,您需要在连接重新备份后创建新的频道。
您可能会检出Lyra,这是一个RabbitMQ客户端,它可以在意外关闭时自动恢复资源(连接/通道)。