spring - 使用 Hystrix 断路器暂停/恢复 JMS 监听器

标签 spring spring-integration spring-jms hystrix circuit-breaker

我们有一个 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/

相关文章:

java - Spring 依赖

java - 如何根据配置动态创建多个jms消息驱动 channel 适配器

java - 为什么当 ftp java dsl 配置被引入 spring 集成核心时过滤器行为发生了变化

tomcat - 如何在 tomcat 上优雅地关闭 ActiveMQ session 线程

java - 为什么 Spring 有 JdbcDaoSupport 类,但没有类似的 JmsSupport 类?

JavaFX 和 Spring - bean 不 Autowiring

java - AsyncRestTemplate ListenableFuture<T> 回调 + 超时

java - AtomikosDataSourceBean.getMaxLifetime() 中的 AbstractMethodError

Spring 集成 : Hooking web services to a FIFO queue

java - MQConstants.USE_MQCSP_AUTHENTICATION_PROPERTY 和 JMSConstants.USER_AUTHENTICATION_MQCSP 的字符串属性名称是什么?