Я реализовал imign client и hystrix в моем приложении микросервиса весенней загрузки. Сначала я попытался протестировать связь users service
с albums service
с фальшивым клиентом, поэтому я вызвал исключение на albums service
, чтобы проверить, может ли users service
Error Decoder перехватить исключение, а затем запустить резервный метод.
Это сработало, но cause
всегда имеет значение null только в первый раз, а после этого я вижу сообщение об ошибке, которое я хотел увидеть.
Может ли кто-нибудь сказать мне, что что-то не так или не. Это мой код.
- Клиент службы поддержки пользователей
@FeignClient(name = "albums-ws", fallbackFactory = AlbumsFallbackFactory.class)
public interface AlbumServiceClient {
@GetMapping(path = "users/{userId}/albums")
List<AlbumDetailResponse> getAlbums(@PathVariable("userId") String userId);
}
Заводской запасной вариант
@Component
public class AlbumsFallbackFactory implements FallbackFactory<AlbumServiceClient> {
@Override
public AlbumServiceClient create(Throwable cause) {
return new AlbumServiceClientFallback(cause);
}
}
public class AlbumServiceClientFallback implements AlbumServiceClient {
private final Throwable cause;
private final Logger logger = LoggerFactory.getLogger(this.getClass());
public AlbumServiceClientFallback(Throwable cause) {
this.cause = cause;
}
@Override
public List<AlbumDetailResponse> getAlbums(String userId) {
logger.error("An exception took place: " + cause.getMessage());
return new ArrayList<>();
}
}
Декодер симулирования ошибки
@Component
public class FeignErrorDecoder implements ErrorDecoder {
@Override
public Exception decode(String methodKey, Response response) {
switch(response.status()) {
case 400:
break;
case 404:
if(methodKey.contains("getAlbums")) {
return new ResponseStatusException(HttpStatus.valueOf(response.status()), response.reason());
}
break;
default:
return new Exception(response.reason());
}
return null;
}
}
Сработал первый откат
2020-08-02 12:42:27.836 ERROR 24772 --- [ HystrixTimer-1] c.a.p.a.u.P.f.AlbumServiceClientFallback : An exception took place: null
После
2020-08-02 12:43:07.672 DEBUG 24772 --- [rix-albums-ws-2] c.a.p.a.u.P.feign.AlbumServiceClient : [AlbumServiceClient#getAlbums] User not found with id: f5b313e2-411f-4fc3-95e7-9aa5c43c286c