我的 spring boot 应用程序有一个 kafka 消费者和一个预定的工作。问题是卡夫卡消费者停止消费,直到预定的工作完成。我希望卡夫卡消费者在她工作的同时继续消费。
对这种行为有什么想法吗?
@KafkaListener(topics = "sometopic", concurrency = "2" )
public void batchListen(@Payload List<String> messages) {
}
@Scheduled(fixedDelayString = "30000" , initialDelay = 10000)
public void job() {
// some job action
}
你的问题的解决方案将是引入多线程。在单独的线程中运行 kafka 消费者并在另一个单独的线程中运行预定作业。
对于预定的工作,您可以像这样使用 Spring
ScheduledThreadPoolExecutor
:
ScheduledExecutorService executorService = Executors.newScheduledThreadPool(2);
ScheduledFuture<Object> resultFuture =
executorService.scheduleAtFixedRate(runnableTask, 10, 30, TimeUnit.SECONDS);