Мне нужно синхронно дождаться завершения некоторой логики HystrixCommand, поэтому я добавил CountDownLatch и выпустил его при запуске и откат.
public class AsyncHystrixCommand extends HystrixCommand implements SofaHystrixInvokable {
@Override
protected Object run() throws Exception {
// part1 sync
this.syncCall();
lock.countDown();
// part2 async
return this.asyncCall();
}
@Override
protected Object getFallback() {
if (lock.getCount() > 0) {
lock.countDown();
}
}
}
Тогда основной поток будет блокироваться через lock.wait
, но если run
или fallback
не выполняется, это будет длиться вечно.
В блок-схеме Hystrix , если кэш не определен, может ли Hystrix гарантировать, что run
или fallback
будет выполнен?Есть ли лучший способ?