消费者中的java spring rabbit thread pool

时间:2016-04-28 17:10:36

标签: java spring rabbitmq spring-rabbit

我有一个兔子消费者,里面我有一个线程池。我决定有一个线程池,因为我需要等待计算完成。但是正如我所注意到的,TP的使用会导致像冻结这样的怪异效果。所以我想问一下,在兔子消费者中使用TP是否正确?是否可以使用spring rabbit工具实现相同的功能?

...
ThreadPoolExecutor pool = new ThreadPoolExecutor(cores, 50, 30L,  TimeUnit.SECONDS, new ArrayBlockingQueue<>(3000));

public void onMessage(){

   pool.execute(()->{
     //do something
     handleMessage(...);//return to some output queue
   });

}

    public void onMessage(){
         //do something
         handleMessage(...);//return to some output queue
    }

1 个答案:

答案 0 :(得分:2)

通常最好只是增加侦听器容器中的concurrentConsumers而不是传递给自己的线程池。

您的代码无论如何都需要是线程安全的。

使用您当前的解决方案,您可能会因为在侦听器退出时确认消息而导致消息丢失。