我有一个兔子消费者,里面我有一个线程池。我决定有一个线程池,因为我需要等待计算完成。但是正如我所注意到的,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
}
答案 0 :(得分:2)
通常最好只是增加侦听器容器中的concurrentConsumers
而不是传递给自己的线程池。
您的代码无论如何都需要是线程安全的。
使用您当前的解决方案,您可能会因为在侦听器退出时确认消息而导致消息丢失。