Пользовательские условия ошибки для запуска отката в Hystrix
Исходя из понимания, резервная логика Hystrix запускается при возникновении определенных условий, таких как время ожидания запроса, пул потоков, работающий с емкостью 100%, или исключение при возникновении зависимости. Помимо этих 3 факторов, можно ли добавить дополнительные условия, которые также рассматриваются как сбои, например, какой-либо конкретный код ошибки HTTP, например 413 (слишком большая полезная нагрузка)?
1 ответ
Резервный метод Hystrix будет вызван при следующем условии
- разомкнутая цепь
- отклонение семафора / пула потоков
- сбой выполнения (любое исключение, сгенерированное вашим методом, за исключением HystrixBadRequestException)
- тайм-аут вашего метода (тайм-аут Hystrix)
Только часть, которая непосредственно связана с кодом пользователя, является ошибкой выполнения.
В этом случае откат будет вызван любым исключением run()
метод. То же самое для чистой Hystrix через HystrixCommand и Hystrix Javanica через аннотацию.
Только одно исключение, которое не вызывает HystrixBadRequestException
Поэтому, если вы хотите активировать свой запасной вариант и для кода состояния HTTP 413, все, что вам нужно, это просто выбросить любое исключение внутри вашего метода.
Если вы используете какую-либо библиотеку со встроенной поддержкой Hystrix, например Spring Cloud Feign, вам нужно реализовать что-то, что требуется этой библиотеке. В случае Spring Cloud Feign вы можете реализовать свой собственный ErrorDecoder
, Декодер ошибок по умолчанию вызовет откат для всех ошибок 4XX,5XX. Если вы не хотите вызывать какие-либо ошибки 4XX, кроме 413, вы можете бросить HystrixBadRequestException
внутри него.