apache-kafka - 当目标系统关闭时,停止 Spring Cloud Stream @StreamListener 监听

标签 apache-kafka hystrix spring-cloud-stream spring-retry circuit-breaker

我有一个应用程序,它从 Kafka 获取消息并调用目标系统来更新旧版 Oracle 数据库。

我想启用一个场景,如果目标系统关闭,则将消息留在 Kafka 总线上,并且在给定的时间内不处理它们。我正在考虑一些基于 Hystrix 的断路器解决方案,但我找不到任何机制来告诉 Spring Cloud Stream “停止”事件监听。我能想到的唯一其他选择是,如果断路器打开,则将这些消息传输到错误/重新处理主题,但这对我来说听起来像是反模式。我应该能够暂停系统处理事件,这就是微服务应用程序中发布/订阅的全部优势。

如有任何帮助,我们将不胜感激。

最佳答案

一种解决方案是自动连接应用程序上下文。

@Autowired
private ConfigurableApplicationContext context;

您可以stop()start() 上下文。

不过,您不应该在调用 @StreamListener 的线程上调用 stop(),否则停止将被延迟(因为容器将等待该线程默认退出 5 秒 - 至少使用 Rabbit Binder )。

当然,您将需要某种带外机制来重新启动 - 也许是 JMX 或监听某种控制主题的单独应用程序上下文。

关于apache-kafka - 当目标系统关闭时,停止 Spring Cloud Stream @StreamListener 监听,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39598943/

相关文章:

java - 微服务假装无限循环调用?

java - Spring Boot 1.5.3 本地 CDF 服务器

hadoop - 大数据摄取 - Flafka 用例

spring-cloud - 没有 Eureka 的涡轮仪表板指标

azure - 无法连接到在 Azure 应用服务上运行的 KAFKA

java - Hystrix 回退方法不运行

spring-cloud-stream 生产者交易性

java - 如何指定使用Spring Cloud Stream向RabbitMQ发送消息的超时?

java - 如何通过 Kafka.Producer 从 java servlet 向 Kafka 发送消息

maven - 使用架构注册表时出现问题 :download