Hystrix:在getFallBack中进行网络调用()

Hystrix:在getFallBack中进行网络调用()

问题描述:

我一直在玩Netflix OSS Hystrix,我正在探索不同的配置和可能性,以将其包含在我的项目中。除此之外,我的应用程序需要在HystrixCommand.getFallBack()中执行网络调用...Hystrix:在getFallBack中进行网络调用()

现在,确实需要这样做,应该使用HystrixCommandHystrixObservableCommand

我的问题是,如果我使用HystrixCommand我应该调用它,例如,与HystrixCommand.run()HysrixCommand.queue()或其他一些选项?

此外,在我的日志中,我注意到getFallBack()可以有不同的调用线程(例如,Hystrix-Timer,我猜这取决于谁中断了运行方法)。在这里,我想知道如何从fallback调用HystrixCommand.run()影响我的性能,因为调用线程将一直处于活动状态并被阻塞,直到该命令结束为止?

编辑:用这个问题的新眼光,我现在认为“通用答案”(上面提到的)可以是某种形式的Promise,即用Java术语的CompletableFuture<T>。因此,返回HystrixCommand.run()的承诺将允许调用线程(Hystrix内部)立即返回,从而释放它。但是现在我坚持实施这种行为。有任何想法吗?

非常感谢您的帮助!

使用HystrixCommand的execute方法。例如:

@Override 
protected YourReturnType getFallback() { 
    return new MyHystrixFallbackCommand().execute(); 
} 

如果你想与异步“承诺”的工作,那么你或许应该实现一个HystrixObservableCommand。