Как создать запасной класс, когда методы интерфейса Feign возвращают HystrixCommands - PullRequest
0 голосов
/ 05 июня 2018

Чтобы создать асинхронный 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.приборная доска.Я бы предпочел не иметь там свои запасные варианты.Если вы знаете какой-либо другой способ сделать это, пожалуйста, просветите меня.

...