首页 > 解决方案 > 使用 Hystrix 断路器暂停/恢复 JMS 侦听器

问题描述

我们有一个 JMS 监听器,它从 MQ 中提取消息并将它们保存在数据库中。我的问题是在数据库关闭时暂时暂停 JMS 侦听器并在一段时间后再次恢复它的最佳方法是什么。

我的想法是在 db 操作周围使用 Spring Circuit Breaker 来监视其运行状况并回退到错误处理程序方法。这将有助于避免每次都等待数据库超时。但是,侦听器仍在拉取消息并尝试保存它们,这会浪费 CPU 和网络。

有没有办法处理断路器命令事件,例如:开/半开/关?然后我可以编写代码以在电路开路事件发生时停止JMS,并在电路半开事件发生时启动JMS。

或者当依赖项失败时临时暂停 JMS 侦听器的最佳实践是什么?

注意:我们使用 Spring Integration message-driven-channel-adapter 作为监听器。

标签: springspring-integrationspring-jmshystrixcircuit-breaker

解决方案


JMS 监听器是一个Lifecyclebean,因此是 Spring Integration 中的 JMS 入站通道适配器。这意味着它们有start()/stop()方法,因此允许您在不停止应用程序上下文的情况下停止使用消息。

关于断路器,我假设您正在谈论一种 spring-cloud 服务。如果是这样,那么您只需将 JMS 侦听器或适配器注入它的实现并调用它的start/stop方法。但这主要是为了引入断路器分布式微服务,这也意味着服务发现和其他高级功能。

如果您仅使用 spring 集成 (SI) 运行单个应用程序上下文来执行断路器,您可能希望从此处描述的内部 SI 支持中受益。


推荐阅读