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