我需要同步等待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
,它将永远等待。
在flowchart of Hystrix中,如果未定义缓存,Hystrix是否可以保证将执行run
或fallback
?有什么更好的方法吗?
答案 0 :(得分:0)
HystrixCommand使用RxJava 1.x异步工作,但它支持同步执行。
您需要做的只是使用您的命令调用execute()
方法,如下所示。
Object result = new YourHystrixCommand().execute()`
或者在使用Future
或Observable
的情况下,您可以自己等待queue()
或observe()
。