Когда кеш не определен, HystrixCommand определенно выполняет `run` или` fallback` - PullRequest
0 голосов
/ 29 января 2019

Мне нужно синхронно дождаться завершения некоторой логики 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 будет выполнен?Есть ли лучший способ?

1 Ответ

0 голосов
/ 07 февраля 2019

HystrixCommand работает асинхронно с использованием RxJava 1.x, но поддерживает синхронное выполнение.

Все, что вам нужно сделать, это просто вызвать метод execute() с вашей командой, как показано ниже.

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

Или вы можете самостоятельно подождать с Future или Observable в случае использования queue() или observe().

...