簡體   English   中英

java rabbitmq with Executor thread,創建的線程保持運行。 如何確保線程被殺死?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM