我需要同步等待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,如果没有定义缓存,可以猬保证run
或fallback
将被执行?有没有更好的办法?
HystrixCommand作品异步使用RxJava 1.x中,但它支持同步执行。
所有您需要做的仅仅是调用execute()
方法在命令中像下面。
Object result = new YourHystrixCommand().execute()`
或者你可以用Future
或Observable
自己使用queue()
或observe()
的情况下等待。