当前位置: 首页 > 知识库问答 >
问题:

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

左丘耀
2023-03-14

我有一个应用程序,从Kafka获取消息,并调用目标系统来更新遗留的Oracle DB。

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

任何帮助都将受到感谢。

共有1个答案

邢令
2023-03-14

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

@Autowired
private ConfigurableApplicationContext context;

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

但是,您不应该在调用@StreamListener的线程上调用stop(),否则停止将被延迟(因为容器将在默认情况下等待该线程退出5秒钟——至少使用兔子绑定器)。

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

 类似资料:
  • 下面是我的代码:(它非常混乱,我只是在收集我的想法。我有一个更正式的程序,它要大得多,我将在稍后实现它) 当我选择A-E时,我会弹出一个带有“选择”或“取消”的对话框。我不希望原来的框架关闭。

  • 我有一个使用Twitter4j启动的Android应用程序,如果我不再需要该流,我正在寻求有关如何停止/关闭它的帮助。我在偏好更改时启动流,但需要根据用户操作在应用程序的其他部分停止它。 以下是我启动流的方式,这是我在文档中找到的典型方式: 任何帮助将不胜感激,谢谢!

  • 我使用Pygame和Pydub用Python编写了一个音乐播放器(我使用Pygame实际播放音乐,而Pydub可能与这个问题无关)。 除非我切换到另一个Pygame窗口,否则即使切换了窗口,音乐也能正常工作。我认为如果我编译它(cx_freeze),这种效果会消失,但那不起作用。 所以我想知道是否有什么方法可以让音乐在窗口切换到另一个Pyplay窗口时继续播放。 我使用而不是声音对象,如果可能有某

  • 问题内容: 我最近一直在尝试使用logback,并且一直在Eclipse内部直接运行示例。当我这样做时,我注意到- 即使在我的静态方法结束之后(从Java驱动程序类内部),应用程序仍在运行。 最终,我确定Logback正在管理自己的线程,这些线程即使在我的主应用程序退出后仍保持活动状态。我四处搜寻一些解决方案,发现这是从Java内部显式关闭Logback的一种方式: 这真的是彻底关闭登录的唯一方法

  • 问题内容: 我已将一个WAR文件部署到Tomcat服务器,该类之一将在启动时调用,然后init()方法将安排一个计时器,每5小时触发一次以执行一些任务。 我的init()代码如下所示: 我的应用程序运行没有问题,但是当我使用 /etc/init.d/tomcat7 stop 关闭Tomcat时,我检查了日志(catalina.out),它具有以下条目: 严重:Web应用程序[/ MyApplica

  • 我有一个类,,并用注释它。 我在该类中有两个方法: 我看到,当它应该打印它们中的内容时,它会打印出来,但当我在intelij中按一次停止按钮时,我会得到: 我需要再按一次停止按钮才能完全停止。 为什么即使到达也不关闭ExecutorService?我做错了什么? PS:这是我唯一的ExecutorService,没有其他线程是我做的。 停止按钮是intelij IDEA中play和debug按钮附