С feign builder я звоню на внешний URL. Я установил readTimeout как 2 секунды, я получаю исключение SocketTimeoutException, но оно не переходит в ErrorDecoder.
Конфигурация Feign Builder:
Options options = new Options(10000, TimeUnit.MILLISECONDS, 2000,
TimeUnit.MILLISECONDS, false);
return Feign.builder()
.logLevel(level)
.client(client)
.retryer(Retryer.NEVER_RETRY)
.options(options)
.errorDecoder(feignErrorDecoder())
.exceptionPropagationPolicy(UNWRAP);
private ErrorDecoder feignErrorDecoder() {
return (methodKey, response) -> {
return new MyCustomException("ERROR_TIMEOUT",
"Timeout Occurred: " + response.status());
};
}
Когда я вызываю сервисное исключение, не происходит ErrorDecoder. Приближается java.lang.reflect.UndeclaredThrowableException.
Решение проблемы
ErrorDecoder не вызывается при возникновении исключения IOException (SocketTimeoutException). См. SynchronousMethodHandler#executeAndDecode(...). Как правило, декодеры вызываются только тогда, когда ответ возвращается вызовом API. ErrorCoder вызывается только в том случае, если код ошибки http отличается от 2xx и 4xx.
Комментариев нет:
Отправить комментарий