Как работает синхронный откат для асинхронных вызовов в Hystrix? - PullRequest
0 голосов
/ 03 марта 2019

Допустим, у меня есть следующий фрагмент кода с включенным автоматическим выключателем Hystrix и аварийным переключением:

@Component
public class MyServiceProxy {

 @HystrixCommand(fallbackMethod = "syncFallback")
 public Future <MyClass> asyncCall() {

  return new AsyncResult <MyClass> () {
   @Override
   public MyClass invoke() {
    return new MyClass();
   }
  };
 }

 private MyClass syncFallback() {
  return new MyClass();
 }
}

Класс обслуживания выглядит примерно так:

@Service
public class UseMyService {

 @Inject
 public MyServiceProxy myServiceProxy;

 public void getResults() {

/* 

 In the case of a fallback the fallback method will
 return a non future result and how does this piece of code not fail ?
 I expected the below call to fail when fallback method is called.

*/

Future <MyClass> myClassFutureResponse = myServiceProxy.asyncCall();

  try {

   MyClass actualResponse = myClassFutureResponse.get();

  } catch (Exception e) {

  }

 }
}

Это мой вопрос:

  1. Как откат синхронизации для асинхронных вызовов в Hystrix работает должным образом?Я знаю, что это разрешено, и это работает.

В моем понимании вызывающий метод будет ожидать асинхронного результата (Future), но резервный возврат будет возвращать ответ не в будущем, и вызов get не должен быть разрешен, а код должен выдавать исключение, но, очевидно, это неэтого не происходит, и все работает как положено (без приведения).

Любые подробности / понимание того, как помочь мне понять эту концепцию, было бы здорово!

...