SpringKafka不能正常关闭

0kjbasz6  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(364)

我已配置 ConcurrentMessageListenerContainer 使用3的并发性从3个分区中消耗,并且 KafkaTemplate 与producerfactory一起向3个分区生成消息。springbean配置了destroy方法来调用 stop() 应用程序关闭时的使用者侦听器容器和生产者。关闭后,下面显示的日志看起来像消费者已经停止,但是没有生产者是否停止的信息。
[kafkacontainer-0-c-1]info org.springframework.kafka.listener.kafkamessagelistenercontainer$listenerconsumer-consumer已停止
[kafkacontainer-2-c-1]info org.springframework.kafka.listener.kafkamessagelistenercontainer$listenerconsumer-consumer已停止
[kafkacontainer-1-c-1]info org.springframework.kafka.listener.kafkamessagelistenercontainer$listenerconsumer-consumer已停止
但应用程序并没有完全关闭。执行jstack命令会显示3个threadpooltaskscheduler仍在后台运行。jstack命令的输出片段:
“threadpooltaskscheduler-1”#74 prio=5 osŠprio=0 tid=0x00007f8564f23800 nid=0x77e5等待条件[0x00007f852292000]java.lang.thread.state:在sun.misc.unsafe.park(本机方法)-停车等待<0x00000000ec8f0808>(java.util.concurrent.locks.abstractqueuedsynchronizer$conditionobject)在java.util.concurrent.locks.locksupport.park(locksupport。java:175)在java.util.concurrent.locks.abstractqueuedsynchronizer$conditionobject.await(abstractqueuedsynchronizer。java:2039)在java.util.concurrent.scheduledthreadpoolexecutor$delayedworkqueue.take(scheduledthreadpoolexecutor。java:1081)在java.util.concurrent.scheduledthreadpoolexecutor$delayedworkqueue.take(scheduledthreadpoolexecutor。java:809)位于java.util.concurrent.threadpoolexecutor.gettask(threadpoolexecutor。java:1067)位于java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor。java:1127)在java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor。java:617)在java.lang.thread.run(线程。java:745)
上面的块是为每个messagelistener打印的,我的意思是如果我将并发性设置为5,那么jstack输出包含上面的消息5次。所以我认为即使消费者监听器被记录为shutdown,它在内部也不会完全关闭。
我遗漏了一些关于关闭生产商和消费者的信息?

2wnc66cl

2wnc66cl1#

你不能说你用的是哪个版本。
这在2.1.0、2.0.2和1.3.2中是固定的。
你不需要这么做 stop() 容器从 destroy() 方法;上下文将在使用者关闭时停止它。

相关问题