我使用 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);
}
}