簡體   English   中英

如何處理 spring 啟動中的異步請求超時?

[英]How to handle async request timed out in spring boot?

我正在為 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]

如果你想簡單地處理異常,那么你可以為它編寫一個異常處理程序,如下所示

@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);
            }
        };
}

注意我還沒有嘗試過,讓我們知道它是否有效

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM