Как обработать тайм-аут асинхронного запроса при весенней загрузке? - PullRequest
0 голосов
/ 30 октября 2019

Я пишу конфигурацию для приложения весенней загрузки. Я использую 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]

1 Ответ

0 голосов
/ 30 октября 2019

Если вы хотите просто обработать исключение, вы можете написать обработчик исключений для него, что-то вроде ниже

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

Примечание Я не пробовал это, дайте нам знать, если это работает

...