Abbiamo un comando di Hystrix (1.4.x) che assomiglia a questo (utilizzando Spring):Come gestire correttamente gli errori previsti in hystrix fallback?
@HystrixCommand(groupKey = "GroupKey", commandKey = "CommandKey", fallbackMethod = "myFallback")
public List<X> findXs(long xId) {
return externalService.findXsExternally(xId);
}
Noi in realtà non vogliamo restituire un (vuoto) List
dal metodo di ripiego, ma piuttosto un'eccezione cosicché il nostro chiamante di findXs
sa che lo externalService
non funziona e può agire di conseguenza. Ma allo stesso tempo vorremmo sfruttare le funzionalità offerte da Hystrix. Nel nostro caso vogliamo che il chiamante restituisca un messaggio di errore invece di restituire una lista. In primavera un ripiego è implementata in questo modo:
public List<X> myFallback(long xId) {
// What to do?? Throw exception!?
}
un'eccezione da myFallback
"funziona", ma Hystrix ci avvertono che:
commandKey fallito e fallito di ripiego.
I.e. interpreterà questo come un errore di fallback. Nel nostro caso l'eccezione dovrebbe non essere interpretata come errore di fallback ma piuttosto come comportamento previsto. Abbiamo anche provato a racchiudere l'eccezione generata in un HystrixBadRequestException
ma non sembra funzionare per fallback (in base allo docs ciò funzionerebbe per il metodo "run").
Come implementare un metodo di fallback di lancio di eccezioni in Hystrix? Possiamo tranquillamente ignorare l'avviso o Hystrix non è stato progettato in questo modo?
Ma come si differenzia da dove proviene HystrixRuntimeException, se si dispone di più metodi annotati con @HystrixCommand? Ho il problema che mi piacerebbe comportarmi diversamente a seconda del cliente, ad es. un timeout, ma l'unica cosa che so è che si è verificata una HystrixRuntimeException. – woezelmann
C'è un attributo chiamato ** commandKey ** nell'annotazione. Puoi cancellarlo. L'ho appena testato impostandolo come ** ckey **, e qui c'è il messaggio che era nell'eccezione ... ** ckey fallito e fallback fallito **. Probabilmente ci sono ancora più metodi dentro l'eccezione stessa, provalo e vedi di persona – hyness