Чтобы создать асинхронный REST-клиент с помощью Spring Cloud, я определяю следующий интерфейс:
@FeignClient(name="RestClient", url="http://localhost:8081/v1", fallback=Fallback.class)
public interface RestClient {
@RequestMapping(method=RequestMethod.GET, path="/info/{id}")
HystrixCommand<Model> getInfo(@PathVariable("id") String id);
}
Мне нужно создать класс Fallback, но для этого я понимаю, чтокласс должен реализовывать интерфейс RestClient.
Проблема, с которой я сталкиваюсь, заключается в том, что метод getInfo (...) моего интерфейса возвращает HystrixCommand.Я пытался найти примеры или документацию для своего варианта использования, но все, что я смог найти до сих пор, не охватывает HystrixCommand как тип возврата.
Есть идеи, как мне это сделать?
=== Редактировать ===
Мое текущее решение:
public class Fallback implements RestClient {
public HystrixCommand<Domain> getInfo(String id) {
return new ConstantHystrixCommand(new Model("data"));
}
private static class ConstantHystrixCommand<R> extends HystrixCommand<R> {
private R fallbackData;
public ConstantHystrixCommand(R fallbackData) {
super(HystrixCommandGroupKey.Factory.asKey("uniqueName"));
this.fallbackData = fallbackData;
}
protected R run() { return fallbackData; }
}
}
Недостатком этого подхода является то, что любой экземпляр "HystrixCommand" регистрируется в Hystrix.приборная доска.Я бы предпочел не иметь там свои запасные варианты.Если вы знаете какой-либо другой способ сделать это, пожалуйста, просветите меня.