我有一个应用程序,它从 Kafka 获取消息并调用目标系统来更新旧版 Oracle 数据库。
我想要启用一个场景,如果目标系统关闭,则将消息留在 Kafka 总线上,并且在给定的时间内不处理它们。我正在考虑一些基于 Hystrix 的断路器解决方案,但我找不到任何机制来告诉 Spring Cloud Stream “停止”事件侦听。我能想到的唯一其他选择是,如果断路器打开,则将这些消息传输到错误/重新处理主题,但这对我来说听起来像是反模式。我should能够暂停系统处理事件,这就是微服务应用程序中发布/订阅的全部优势。
任何帮助,将不胜感激。
一种解决方案是自动连接应用程序上下文。
@Autowired
private ConfigurableApplicationContext context;
You can stop()
and start()
上下文。
你不应该打电话stop()
在调用的线程上@StreamListener
但是,否则停止将被延迟(因为容器默认情况下将等待该线程退出 5 秒 - 至少使用 Rabbit 绑定器)。
当然,您将需要某种带外机制来重新启动 - 也许是 JMX 或侦听某种控制主题的单独应用程序上下文。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)