当具有固定线程池的Executor服务与Kafka Listener一起使用时,线程将从队列中删除

时间:2019-10-08 18:41:56

标签: java multithreading apache-kafka executorservice executor

当我尝试将executorService(固定线程池为50)与Kafka一起使用时,某些线程已从Queue中删除,并且未得到处理。

例如,对于以下代码:日志中打印的行数: “内部卡夫卡监听器”:3000 “正在处理消息”:2100 “发生异常”:0

@Named
public class KafkaListener {

    ExecutorService executorService = Executors.newFixedThreadPool(50);

    @Inject
    KafkaMessageProcessor kafkaMessageProcessor;

    @KafkaListener(
            topics = "topicName",
            containerFactory = "filterKafkaListenerContainerFactory")
    public void listen(String message) {
        try {
            System.out.println("Inside Kafka Listener " + message);
            executorService.submit(() -> {
                System.out.println("Processing message");
                kafkaMessageProcessor.process(message);
            });
        } catch (Exception e) {
            System.out.println("Exception occurred :" + e);
        }
    }
}

我希望日志中的行数相等,因为newFixedThreadPool使用大小为Integer.MAX_VALUE的阻塞队列。

0 个答案:

没有答案