Допустим, у меня есть следующий фрагмент кода с включенным автоматическим выключателем 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) {
}
}
}
Это мой вопрос:
- Как откат синхронизации для асинхронных вызовов в Hystrix работает должным образом?Я знаю, что это разрешено, и это работает.
В моем понимании вызывающий метод будет ожидать асинхронного результата (Future), но резервный возврат будет возвращать ответ не в будущем, и вызов get не должен быть разрешен, а код должен выдавать исключение, но, очевидно, это неэтого не происходит, и все работает как положено (без приведения).
Любые подробности / понимание того, как помочь мне понять эту концепцию, было бы здорово!