[英]java rabbitmq with Executor thread, created threads keeps running. how to make sure threads are killed?
我正在使用 rabbitmq 接收器。 它同時收到多個請求,因此我正在創建線程來同時處理多個請求。
問題是我創建了 newSingleThreadExecutor 或 newFixedThreadPool 它們仍然運行 executor.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");
}
和線程保持像Thread[pool-1-thread-"number"]
線程的創建與我在接收器中收到的請求一樣多,並且從不關閉。
如何避免這種情況或者最好完全刪除多線程概念?
提前致謝
首先,您不應該在您的偵聽器中使用執行程序,否則您將面臨消息丟失的風險。
增加容器concurrentConsumers
,框架將為您管理並發。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.