È possibile impostare RetryPolicy in spring retry (https://github.com/spring-projects/spring-retry) in base al codice di stato errore? per esempio. Voglio riprovare su HttpServerErrorException
con codice di stato HttpStatus.INTERNAL_SERVER_ERROR
, che è 503. Pertanto dovrebbe ignorare tutti gli altri codici di errore - [500 - 502] e [504 - 511].È possibile impostare RetryPolicy in spring-retry in base al codice di stato HttpStatus?
7
A
risposta
5
L'RestTemplate
ha l'opzione setErrorHandler
e DefaultResponseErrorHandler
è quella predefinita.
Il suo codice assomiglia:
public void handleError(ClientHttpResponse response) throws IOException {
HttpStatus statusCode = getHttpStatusCode(response);
switch (statusCode.series()) {
case CLIENT_ERROR:
throw new HttpClientErrorException(statusCode, response.getStatusText(),
response.getHeaders(), getResponseBody(response), getCharset(response));
case SERVER_ERROR:
throw new HttpServerErrorException(statusCode, response.getStatusText(),
response.getHeaders(), getResponseBody(response), getCharset(response));
default:
throw new RestClientException("Unknown status code [" + statusCode + "]");
}
}
Quindi, è in grado di fornire una propria implementazione per quel metodo per semplificare la RetryPolicy
codici di stato in giro desiderati.
Problemi correlati
- 1. È possibile modificare i colori IntelliJ in base al progetto?
- 2. È possibile avere più supporto APK in base al Paese?
- 3. In base al codice, come è possibile inviare un'unità disco fisso per sospendere
- 4. Come impostare l'altezza di UIWebView in base al contenuto HTML?
- 5. È possibile l'iniezione di codice in Java?
- 6. È possibile impostare la priorità BroadcastReceiver al livello di programmazione?
- 7. È possibile riscrivere un codice di stato con Charles Proxy?
- 8. Impostare uiCulture automaticamente in base al browser accetta la lingua
- 9. È possibile creare un servizio Web di stato in C#?
- 10. È possibile impostare l'attributo href di un tag base in AngularJs?
- 11. È possibile impostare MasterType in modo programmatico?
- 12. È possibile definire gli aggiornamenti del layout di Magento in base al negozio
- 13. Come impostare l'indice selezionato JComboBox in base al valore
- 14. Come inviare una notifica al thread in base al suo nome o id? È possibile?
- 15. È possibile cambiare il colore di sfondo in base al livello annidato?
- 16. È possibile utilizzare i modelli per accedere alle variabili struct in base al nome?
- 17. Come impostare il fuso orario del sistema per iOS in base al codice?
- 18. È possibile impostare Seleziona larghezza elemento in percentuale?
- 19. Utilizzo delle funzioni di archivio EF6 per Entity Framework in base al codice, è possibile restituire un tipo personalizzato?
- 20. È possibile caricare un Enum in base al nome di una stringa?
- 21. In primavera 3 è possibile impostare dinamicamente il motivo di @ResponseStatus?
- 22. È possibile impostare ProgressIndicator?
- 23. Webpy: come impostare il codice di stato http su 300
- 24. L'attributo del controller OutputCache varia in base al ruolo dell'utente? È possibile in .net MVC?
- 25. È possibile impostare un calendario c uguale al calendario c2?
- 26. In ICS è possibile impostare l'impostazione "Limita dati in background" dal codice (programmaticamente)?
- 27. JavaScript Non in grado di impostare lo stato attivo al primo elemento li entro ul
- 28. Come impostare urlpatterns in base al nome di dominio o TLD, in Django?
- 29. È possibile caricare solo righe di codice specifiche in base alla versione del sistema operativo Android?
- 30. È possibile impostare le intestazioni in modo condizionale?
Non direttamente, ma se è possibile fornire un contesto molto più dettagliato di come si sta richiamando il server (ad esempio, se si utilizza un gateway in uscita Spring Integration o se si utilizza 'RestTemplate' direttamente dal codice), è possibile che essere in grado di suggerire una soluzione. –
Ho esteso RestTemplate e ho eseguito l'override di alcuni metodi che lo circondano con RetryTemplate. Sto seguendo un esempio dato sul link github sopra, simile a ... policy SimpleRetryPolicy = new SimpleRetryPolicy(); policy.setMaxAttempts (5); policy.setRetryableExceptions (new Class [] {HttpServerErrorException.class}); Rapporti SpringTemplate 'HttpServerErrorException.class' per i codici di errore dello stato http 500 - 511 ma, voglio riprovare su 503 e 504. –
Per ora, sto tirando gettato da RetryContext in doWithRetry (contesto RetryContext) e leggendo il messaggio di errore - context.getLastThrowable(). getMessage(), quindi cercando 503 o 504. Ci deve essere un modo migliore per farlo, credo. –