spring - 使用 Hystrix 断路器暂停/恢复 JMS 侦听器
问题描述
我们有一个 JMS 监听器,它从 MQ 中提取消息并将它们保存在数据库中。我的问题是在数据库关闭时暂时暂停 JMS 侦听器并在一段时间后再次恢复它的最佳方法是什么。
我的想法是在 db 操作周围使用 Spring Circuit Breaker 来监视其运行状况并回退到错误处理程序方法。这将有助于避免每次都等待数据库超时。但是,侦听器仍在拉取消息并尝试保存它们,这会浪费 CPU 和网络。
有没有办法处理断路器命令事件,例如:开/半开/关?然后我可以编写代码以在电路开路事件发生时停止JMS,并在电路半开事件发生时启动JMS。
或者当依赖项失败时临时暂停 JMS 侦听器的最佳实践是什么?
注意:我们使用 Spring Integration message-driven-channel-adapter 作为监听器。
解决方案
JMS 监听器是一个Lifecycle
bean,因此是 Spring Integration 中的 JMS 入站通道适配器。这意味着它们有start()/stop()
方法,因此允许您在不停止应用程序上下文的情况下停止使用消息。
关于断路器,我假设您正在谈论一种 spring-cloud 服务。如果是这样,那么您只需将 JMS 侦听器或适配器注入它的实现并调用它的start/stop
方法。但这主要是为了引入断路器分布式微服务,这也意味着服务发现和其他高级功能。
如果您仅使用 spring 集成 (SI) 运行单个应用程序上下文来执行断路器,您可能希望从此处描述的内部 SI 支持中受益。
推荐阅读
- oracle - 用于开发和生产的存储过程中的不同模式名称
- java - Spring gateway(webflux) - oauth 安全 - 问题
- flutter - Flutter Provider 重新初始化模型
- memory-management - 在 vm_fault() 中预取,Linux 驱动程序
- c# - 改变重力方向
- python - 在 keras 自定义损失函数中获取训练数据形状
- csv - 将 CSV 数据复制到包含可为空列的 Azure SQL 数据库
- python - 汇总列列表
- python - 绘制平滑 matplotlib 和 seaborn
- sql-server - 在大量数据库调用之间进行选择,或通过在单个搜索中聚合信息来减少调用次数