gpt4 book ai didi

javarabbitmq带有Executor线程,创建的线程保持运行。如何确保线程被杀死?

转载 作者:行者123 更新时间:2023-12-01 18:42:27 25 4
gpt4 key购买 nike

我正在使用rabbitmq接收器。它同时收到多个请求,因此我创建线程来同时处理多个请求。

问题是我创建 newSingleThreadExecutor 或 newFixedThreadPool 它们仍然运行执行器.shutdown();或 executor.shutdownNow();不会关闭下面的线程是示例

 public void receiver(String message) {

ExecutorService executor = Executors.newFixedThreadPool(10);
:
executor.execute(c);
:
executor.shutdown();
try {
executor.awaitTermination(30, TimeUnit.NANOSECONDS);
executor.shutdownNow();

} catch (InterruptedException e) {
e.printStackTrace();
}
}

下面是我的rabbitmq配置

 @Bean
SimpleMessageListenerContainer container(ConnectionFactory connectionFactory,
MessageListenerAdapter listenerAdapter) {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
container.setQueueNames(queueName);
container.setMessageListener(listenerAdapter);
return container;
}

@Bean
MessageListenerAdapter listenerAdapter(receiver recv) {
return new MessageListenerAdapter(recv, "receiver");
}

并且线程保持类似状态 线程[pool-1-thread-"number"]

线程是根据我在接收器中收到的请求而创建的,并且永远不会关闭。

如何避免这种情况,或者最好完全删除多线程概念?

提前致谢

最佳答案

您首先不应在监听器中使用执行器,否则您将面临消息丢失的风险。

增加容器concurrentConsumers,框架将为您管理并发。

关于javarabbitmq带有Executor线程,创建的线程保持运行。如何确保线程被杀死?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59898427/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com