Асинхронный API блокируется после обработки N запросов

Я разработал простой асинхронный API в Scala с использованием Spring MVC. В контроллере я использую DeferredResult<Map<String,Integer>> response = new DeferredResult<>(360000L,new String("PROCESSING_TIMEOUT")); чтобы вернуть сообщение PROCESSING_TIMEOUT в случае чрезмерно длительного времени обработки. Затем, чтобы протестировать этот API, я отправляю 100 одновременных запросов. Проблема заключается в том, что после успешной обработки около 50 первых запросов программа блокируется и ждет 360000 миллисекунд, а затем возвращает сообщение PROCESSING_TIMEOUTи продолжает обработку остальных запросов. Затем он снова блокируется и разблокируется за 360000 миллисекунд. Я не понимаю такого поведения. Почему это происходит? И как это решить? Я пытался поиграть с параметрами размера основного пула и максимального размера пула, но это не решило проблему.

@Configuration
@SpringBootApplication
@EnableAsync
public class AppConfig implements AsyncConfigurer {
    @Bean
    public javax.validation.Validator localValidatorFactoryBean() {
        return new LocalValidatorFactoryBean();
    }

    @Override
    public Executor getAsyncExecutor() {
        //return new SimpleAsyncTaskExecutor();
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(2);
        executor.setMaxPoolSize(2);
        executor.setQueueCapacity(1000);
        executor.setThreadNamePrefix("MyExecutor-");
        executor.initialize();
        return executor;
    }

    @Override
    public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
        return new MyUncaughtExceptionHandler();
    }

    public static void main(String[] args) {
        SpringApplication.run(AppConfig.class, args);
    }

}

0 ответов

Другие вопросы по тегам