我有一个 Spring Boot REST 服务,它有时会在请求中调用第三方服务。我想为我的所有资源设置一个超时时间(比如说 5 秒),这样如果任何请求处理(整个链,从传入到响应)花费的时间超过 5 秒,我的控制器就会使用 HTTP 503 而不是实际响应进行响应.如果这只是一个 Spring 属性,那就太棒了,例如设置
spring.mvc.async.request-timeout=5000
但我没有任何运气。我也尝试过扩展 WebMvcConfigurationSupport 并覆盖 configureAsyncSupport:
@Override
public void configureAsyncSupport(final AsyncSupportConfigurer configurer) {
configurer.setDefaultTimeout(5000);
configurer.registerCallableInterceptors(timeoutInterceptor());
}
@Bean
public TimeoutCallableProcessingInterceptor timeoutInterceptor() {
return new TimeoutCallableProcessingInterceptor();
}
没有任何运气。
我怀疑我必须手动计时所有第三方调用,如果它们花费的时间太长,则抛出超时异常。那正确吗?或者是否有任何更简单、更全面的解决方案涵盖我的所有请求端点?
原文由 Jesper N 发布,翻译遵循 CC BY-SA 4.0 许可协议
你需要返回一个
Callable<>
如果你想spring.mvc.async.request-timeout=5000
工作。