在目标系统关闭时停止spring cloud stream@streamlistener侦听

wqsoz72f  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(866)

我有一个应用程序,它从kafka获取消息并调用目标系统来更新遗留的oracle数据库。
我想启用这样一个场景:如果目标系统关闭,将消息留在kafka总线上,并且在给定的时间段内不处理它们。我在考虑一些基于hystrix的断路器解决方案,但是我找不到任何机制来告诉springcloudstream“停止”事件监听。我能想到的另一种选择是,如果断路器断开,将这些消息传输到错误/重新处理主题,但这听起来像是反模式。我应该可以暂停系统处理事件,这是微服务应用程序中pub/sub的全部优势。
任何帮助都将受到感谢。

3z6pesqy

3z6pesqy1#

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

@Autowired
private ConfigurableApplicationContext context;

你可以 stop() 以及 start() 上下文。
你不应该打电话 stop() 在调用 @StreamListener 但是,或者停止将被延迟(因为容器将在默认情况下等待线程退出5秒-至少使用rabbit绑定器)。
当然,您将需要某种带外机制来重新启动—可能是jmx或单独的应用程序上下文监听某种控制主题。

相关问题