新しい@Asyncメソッドを呼び出すが、条件を待つにはどうすればよいですか?

2020-02-26 java multithreading spring-boot asynchronous

AMQP MessageListenerを実装するSpring Bootアプリがあります。このリスナーは、プールサイズでThreadPoolTask​​Executorによって管理される@Asyncメソッドを呼び出します。この問題は、受信メッセージが多い場合に発生し、非同期ワーカーが利用できないため、これらのメッセージは失われます。

Spring Core 5.0.7-RELEASE、Java 8を使用しています

これは私のコードです:

AsyncConfigurator:

@EnableAsync
@Configuration
public class AsyncConfiguration extends AsyncConfigurerSupport {

    @Override
    @Bean("docThreadPoolTaskExecutor")
    public Executor getAsyncExecutor() {
        final ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(4);
        executor.setMaxPoolSize(8);
        executor.setWaitForTasksToCompleteOnShutdown(true);
        executor.setThreadNamePrefix("DocWorkerThread-");
        executor.initialize();
        return executor;
    }

My Back Service( MyAsyncService ):

  @Async("docThreadPoolTaskExecutor") @Override public void generaDocumento(String idUser, int year) { //... some heavy and slow process } 
  @Async("docThreadPoolTaskExecutor") @Override public void generaDocumento(String idUser, int year) { //... some heavy and slow process } 
  @Async("docThreadPoolTaskExecutor") @Override public void generaDocumento(String idUser, int year) { //... some heavy and slow process } 
  @Async("docThreadPoolTaskExecutor") @Override public void generaDocumento(String idUser, int year) { //... some heavy and slow process } 
  @Async("docThreadPoolTaskExecutor") @Override public void generaDocumento(String idUser, int year) { //... some heavy and slow process } 
 

私のメッセージリスナー:


    @Async("docThreadPoolTaskExecutor")
    @Override
    public void generaDocumento(String idUser, int year) {
       //... some heavy and slow process
    }

これを解決するためのアイデアを教えてくれる人が必要です。

Answers

ThreadPoolTaskExecutorはデフォルトでキューがあります。 corePoolSize達したら、メッセージをキューに追加する必要があります。キューがいっぱいになると、 maxPoolSize達するまで、より多くのワーカーが開始されます。 executor.getThreadPoolExecutor().getQueue().size()を使用して現在のキューサイズを確認し、メッセージが実際に失われているか、キューに残っているかを確認できます。

Related