Резервный метод Hystrix возвращает значение null - PullRequest
0 голосов
/ 02 августа 2020

Я реализовал imign client и hystrix в моем приложении микросервиса весенней загрузки. Сначала я попытался протестировать связь users service с albums service с фальшивым клиентом, поэтому я вызвал исключение на albums service, чтобы проверить, может ли users service Error Decoder перехватить исключение, а затем запустить резервный метод.

Это сработало, но cause всегда имеет значение null только в первый раз, а после этого я вижу сообщение об ошибке, которое я хотел увидеть.

Может ли кто-нибудь сказать мне, что что-то не так или не. Это мой код.

  1. Клиент службы поддержки пользователей
@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

...