Код см. В моем крошечном проекте github, состоящем из четырех классов.
Я использую Spring FeignClients для подключения к сервису отдыха. Вот как выглядит клиент Feign в его базовой (неасинхронной) форме:
@FeignClient(value="localhost:8080/products", decode404 = true)
public interface ProductClient {
@RequestMapping(value="/{id}")
Product getById(@PathVariable("id") String id);
}
Теперь я хотел сделать это асинхронно, используя Observable. Информация об этом сильно отсутствует в документации Spring, есть только небольшой абзац, который говорит вам использовать HystrixCommand. Все, без объяснений, без кода сампе.
В другом сообщении в блоге мне сказали использовать вместо этого HystrixObservable. Итак, я попробовал это:
@FeignClient(value="localhost:8080/products", decode404 = true)
public interface ProductClient {
@RequestMapping(value="/{id}")
HystrixObservable<Product> getById(@PathVariable("id") String id);
}
В любом случае, при использовании HystrixCommand или HystrixObservable возникает ошибка: com.fasterxml.jackson.databind.JsonMappingException: не удается создать экземпляр com.netflix.hystrix.HystrixObservable
Я понимаю, почему он выдает эту ошибку, поскольку Spring Boot автоматически подключает декодер к FeignClient для десериализации ответа с помощью Джексона. И тип, в который будет десериализоваться ответ, является производным от возвращаемого значения.
Я мог бы попытаться сконфигурировать индивидуальный декодер или вручную создать клиентов Feign, но такой вид противоречит всей цели Spring Boot: он работает автоматически (хотя и с небольшой конфигурацией здесь и там).
Итак, мой вопрос: как это должно работать?
HystrixFeign
). - person Tassos Bassoukos   schedule 18.02.2017