Mamy (1.4.x) polecenie hystrix że wygląda następująco (przy użyciu wiosna):Jak prawidłowo obsłużyć oczekiwane błędy w cofnięciu hystrix?
@HystrixCommand(groupKey = "GroupKey", commandKey = "CommandKey", fallbackMethod = "myFallback")
public List<X> findXs(long xId) {
return externalService.findXsExternally(xId);
}
My faktycznie nie chce powrócić a (pusty) List
od sposobu awaryjnej ale raczej wyjątek abyśmy zadzwonili pod numer findXs
wie, że externalService
nie działa i może podjąć odpowiednie działania. Ale jednocześnie chcielibyśmy skorzystać z funkcjonalności, jaką zapewnia Hystrix. W naszym przypadku chcemy, aby wywołujący zwrócił komunikat o błędzie zamiast zwracania listy. Na wiosnę awaryjna jest realizowany tak:
public List<X> myFallback(long xId) {
// What to do?? Throw exception!?
}
Throwing wyjątek od myFallback
„działa”, ale Hystrix nas ostrzec, że:
commandKey zawiodły i awaryjnej nie powiodło się.
tj. zinterpretuje to jako awarię awaryjną. W naszym przypadku wyjątek powinien być interpretowany jako niepowodzenie awaryjne, ale raczej jako oczekiwane zachowanie. Próbowaliśmy także zawinąć wyrzucony wyjątek w HystrixBadRequestException
, ale nie działa on w przypadku błędów zwrotnych (zgodnie z docs działałoby to w przypadku metody "uruchom").
W jaki sposób można wdrożyć metodę awaryjną polegającą na odrzuceniu w Hystrix? Czy możemy bezpiecznie zignorować ostrzeżenie lub czy Hystrix nie jest zaprojektowana w ten sposób?
Ale jak odróżnić, skąd pochodzi wyjątek HystrixRuntimeException, biorąc pod uwagę fakt, że masz wiele metod opatrzonych komentarzem @HystrixCommand? Mam problem, że chciałbym zachowywać się inaczej w zależności od tego, który klient ma np. limit czasu, ale jedyne co wiem to to, że wystąpił wyjątek HystrixRuntimeException. – woezelmann
W adnotacji znajduje się atrybut ** commandKey **. Możesz wyłączyć to. Właśnie przetestowałem go, ustawiając go jako ** ckey **, a tutaj jest wiadomość, która była w wyjątku ... ** Ckey nie powiodło się i nie powiodło się awarie **. Prawdopodobnie jest jeszcze więcej metod wewnątrz samego wyjątku, wypróbuj go i przekonaj się sam – hyness