如何处理Spring Boot中超时的异步请求?

卜山玛哈真(Bhushan Mahajan):

我正在为spring-boot应用程序编写配置。我正在使用WebMvcConfigurer界面。我已将默认超时设置为30秒,就像我用于SseEmitter()事件处理一样(SseEmitter默认情况下为30秒)。但是,在30秒后,它发出警告Async request timed out有没有办法再次设置超时或处理此错误?请帮助我如何解决此问题。提前致谢 :)

这是我写的。

@Configuration
public class EventConfiguration implements WebMvcConfigurer {
    @Override
    public void configureAsyncSupport(AsyncSupportConfigurer configurer) {
        configurer.setDefaultTimeout(30000);
    }
}

我收到以下错误:

2019-10-30 11:35:02.711  WARN 10728 --- [nio-8090-exec-3] .w.s.m.s.DefaultHandlerExceptionResolver : Async request timed out
2019-10-30 11:35:02.712  WARN 10728 --- [nio-8090-exec-3] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.context.request.async.AsyncRequestTimeoutException]
2019-10-30 11:35:03.699  WARN 10728 --- [nio-8090-exec-4] .w.s.m.s.DefaultHandlerExceptionResolver : Async request timed out
2019-10-30 11:35:03.701  WARN 10728 --- [nio-8090-exec-4] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.context.request.async.AsyncRequestTimeoutException]
Shailesh Chandra:

如果您只想处理异常,则可以为该异常编写异常处理程序,如下所示

@ExceptionHandler(AsyncRequestTimeoutException.class)
    public final ResponseEntity<Object> handleAsyncRequestTimeoutException(AsyncRequestTimeoutException ex, WebRequest request) {
       ....
       ....
    }

如果您想做更多事情,可以编写自己的TimeoutCallableProcessingInterceptor

@Bean
    public CallableProcessingInterceptor callableProcessingInterceptor() {
        return new TimeoutCallableProcessingInterceptor() {
            @Override
            public <T> Object handleTimeout(NativeWebRequest request, Callable<T> task) throws Exception {
                log.error("timeout!");
                return super.handleTimeout(request, task);
            }
        };
}

请注意,我还没有尝试过,请告诉我们是否可行

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章