Ho un servizio REST di avvio di avvio che a volte richiama servizi di terze parti come parte di una richiesta. Vorrei impostare un timeout su tutte le mie risorse (diciamo 5 secondi), in modo tale che se una qualsiasi richiesta di gestione (l'intera catena, dall'arrivo alla risposta) impiega più di 5 secondi, i miei controller rispondono con HTTP 503 invece della risposta effettiva . Sarebbe fantastico se questo era solo una proprietà di Primavera, per l'impostazioneSpring REST API - richiesta timeout?
spring.mvc.async.request-timeout=5000
esempio, ma non ho avuto fortuna con quello. Ho anche provato estendere WebMvcConfigurationSupport e configureAsyncSupport prioritario:
@Override
public void configureAsyncSupport(final AsyncSupportConfigurer configurer) {
configurer.setDefaultTimeout(5000);
configurer.registerCallableInterceptors(timeoutInterceptor());
}
@Bean
public TimeoutCallableProcessingInterceptor timeoutInterceptor() {
return new TimeoutCallableProcessingInterceptor();
}
senza alcuna fortuna.
Sospetto di dover eseguire manualmente manualmente tutte le chiamate di terze parti e, se impiegano troppo tempo, lanciare un'eccezione di timeout. È giusto? O c'è una soluzione olistica più semplice che copre tutti i miei endpoint di richiesta?
Se si utilizza Java 8, può anche utilizzare l'espressione Lamba: 'return() -> {/ * fai le tue cose qui * /}'; – demaniak