1

我使用 Spring MVC 在 Scala 中开发了一个简单的异步 API。在我使用的控制器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);
    }

}
4

0 回答 0