4

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

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

任何帮助都将不胜感激。

4

1 回答 1

2

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

@Autowired
private ConfigurableApplicationContext context;

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

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

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

于 2016-09-20T16:57:02.787 回答