【发布时间】:2019-06-26 12:33:12
【问题描述】:
我有几个 Kafka 消费者从 Kafka 集群中提取消息,然后他们将这些消息放入执行器服务中进行处理。消息本身的处理是耗时的。当我尝试关闭应用程序时——即关闭 Tomcat,我注意到执行程序服务将继续工作,但速度要慢得多,并且出现一些套接字超时异常。这意味着我可能要等待很长时间才能完成 Tomcat 关闭过程,但它只是继续运行。如果我手动杀死 Tomcat 线程,那么我会丢失很多消息。我有办法解决这个问题吗?非常感谢!
【问题讨论】:
-
在关闭事件的上下文监听器中关闭执行器服务。
-
在您的应用程序成功处理消息之前,您的 Kafka 消费者可能正在确认已收到消息。确保在关闭时停止您的 Kafka 消费者并处理所有待处理的消息;或者,在处理消息之前不要知道消息(请参阅 kafka 指南..)
-
感谢您的回答!是的,我昨晚多想了一些,相信消费者一定还在忙着从软管里喝水。由于消费者获取消息的速度比执行者处理消息的速度要快,因此Tomcat必须一直等待......所以我们可以先尝试关闭消费者,然后一旦确认关闭,我们就可以关闭Tomcat。使用 Spring Boot,我刚刚开始寻找停止监听器的方法。可能是这样的:stackoverflow.com/questions/47062346/….
标签: java tomcat executorservice shutdown