我有一个应用程序,它从kafka获取消息并调用目标系统来更新遗留的oracle数据库。
我想启用这样一个场景:如果目标系统关闭,将消息留在kafka总线上,并且在给定的时间段内不处理它们。我在考虑一些基于hystrix的断路器解决方案,但是我找不到任何机制来告诉springcloudstream“停止”事件监听。我能想到的另一种选择是,如果断路器断开,将这些消息传输到错误/重新处理主题,但这听起来像是反模式。我应该可以暂停系统处理事件,这是微服务应用程序中pub/sub的全部优势。
任何帮助都将受到感谢。
1条答案
按热度按时间3z6pesqy1#
一种解决方案是自动连接应用程序上下文。
你可以
stop()
以及start()
上下文。你不应该打电话
stop()
在调用@StreamListener
但是,或者停止将被延迟(因为容器将在默认情况下等待线程退出5秒-至少使用rabbit绑定器)。当然,您将需要某种带外机制来重新启动—可能是jmx或单独的应用程序上下文监听某种控制主题。