Mam usługę REST usługi Spring Boot, która czasami wywołuje usługi stron trzecich jako część żądania. Chciałbym ustawić limit czasu dla wszystkich moich zasobów (powiedzmy 5 sekund), więc jeśli jakakolwiek obsługa żądań (cały łańcuch, od przychodzących do odpowiedzi) trwa dłużej niż 5 sekund, moje kontrolery odpowiadają za pomocą HTTP 503 zamiast rzeczywistej odpowiedzi . Byłoby świetnie, gdyby była to tylko własność Spring, na przykład ustawienieSpring Boot REST API - czas oczekiwania na żądanie?
spring.mvc.async.request-timeout=5000
, ale nie miałem z tym szczęścia. Próbowałem również rozciągający WebMvcConfigurationSupport i przesłanianie configureAsyncSupport:
@Override
public void configureAsyncSupport(final AsyncSupportConfigurer configurer) {
configurer.setDefaultTimeout(5000);
configurer.registerCallableInterceptors(timeoutInterceptor());
}
@Bean
public TimeoutCallableProcessingInterceptor timeoutInterceptor() {
return new TimeoutCallableProcessingInterceptor();
}
bez powodzenia.
Podejrzewam, że muszę ręcznie wyrejestrować wszystkie połączenia z osobami trzecimi, a jeśli trwają zbyt długo, wyrzucić wyjątek limitu czasu. Czy to prawda? Czy istnieje jakieś łatwiejsze, całościowe rozwiązanie, które obejmuje wszystkie moje punkty końcowe żądania?
W przypadku korzystania z Java 8, można również użyć wyrażenia Lamba: 'return() -> {/ * rób swoje rzeczy tutaj * /}'; – demaniak