我们有一个 JMS 监听器,它从 MQ 中提取消息并将它们保存在数据库中。我的问题是,在数据库关闭时临时暂停 JMS 监听器并在一段时间后重新恢复它的最佳方法是什么。
我的想法是在数据库操作周围使用 Spring Circuit Breaker 来监视其运行状况并回退到错误处理程序方法。这将有助于避免每次都等待数据库超时。然而,监听器仍在拉取消息并尝试保存它们,这会浪费 CPU 和网络。
有没有办法处理断路器命令事件,例如:打开/半打开/关闭?然后,我可以编写代码以在发生电路开路事件时停止 JMS,并在发生电路半开事件时启动 JMS。
或者当依赖项失败时临时暂停 JMS 监听器的最佳实践是什么?
注意:我们使用 Spring Integration 消息驱动 channel 适配器作为监听器。
最佳答案
JMS 监听器是一个 Lifecycle
bean,因此是 Spring Integration 中的 JMS 入站 channel 适配器。这意味着它们具有 start()/stop()
方法,从而允许您在不停止应用程序上下文的情况下停止使用消息。
关于断路器,我假设您正在谈论其中一项 spring-cloud 服务。如果是这样,那么您只需将 JMS 监听器或适配器注入(inject)到它的实现中并调用它的 start/stop
方法。但这主要是为了引入断路器分布式微服务,这也意味着服务发现和其他高级功能。
如果您仅使用 Spring Integration (SI) 运行单个应用程序上下文来执行断路器,您可能希望受益于描述的内部 SI 支持 here .
关于spring - 使用 Hystrix 断路器暂停/恢复 JMS 监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53586580/