2016-04-28 10 views
0

Ich habe einen kaninchen verbraucher, und innen habe ich einen thread pool. Ich entschied mich für einen Thread-Pool, da ich auf den Abschluss der Berechnungen warten musste. Aber wie ich bemerkt habe, verursacht TP-Nutzung seltsame Effekte wie Einfrieren und so weiter. Also ich möchte fragen, ist es richtig TP in Kaninchenkonsumenten zu verwenden? Ist es möglich, die gleiche Funktionalität mit Spring Rabbit Tools zu erreichen?java frühling kaninchen thread pool in verbraucher

... 
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 
    }); 

} 

oder

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

Spring rabbitmq Werkzeuge tun mehr oder weniger gleich. Verwenden Sie Nachrichten mit automatischer Bestätigung? –

Antwort

1

Im Allgemeinen ist es besser, einfach die concurrentConsumers im Hörer Behälter zu erhöhen als zu Ihrem eigenen Thread-Pool zu übergeben.

Ihr Code muss auf beide Arten threadsicher sein.

Mit Ihrer aktuellen Lösung riskieren Sie einen Nachrichtenverlust, da die Nachricht beim Beenden des Listeners bestätigt wird.