当未定义缓存时,HystrixCommand是否肯定执行`run`或`fallback`

时间:2019-01-29 10:14:22

标签: java hystrix

我需要同步等待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进行阻塞,但是如果未执行runfallback,它将永远等待。

flowchart of Hystrix中,如果未定义缓存,Hystrix是否可以保证将执行runfallback?有什么更好的方法吗?

1 个答案:

答案 0 :(得分:0)

HystrixCommand使用RxJava 1.x异步工作,但它支持同步执行。

您需要做的只是使用您的命令调用execute()方法,如下所示。

Object result = new YourHystrixCommand().execute()`

或者在使用FutureObservable的情况下,您可以自己等待queue()observe()