HystrixObservableCommand

HystrixObservableCommand

我试图了解HystrixCommand和HystrixObservableCommand之间的区别。我感到困惑的原因是HysterixCommand也有一个observ()或toObservable()方法,它们分别发出可观察到的热和冷。因此,需要创建HystrixObservableCommand。如果我将完全处理非阻塞呼叫,我应该使用哪一个?为什么?

最佳答案

从Javadocs:

HystrixCommand

该命令本质上是一个阻塞命令,但如果与observe()一起使用,则可提供可观察的外观

HystrixObservableCommand

此命令应用于纯非阻塞的调用模式。该命令的调用方将订阅run()方法返回的Observable。

不同之处在于,默认情况下,HystrixCommand支持阻塞范例,但也可以通过立面通过Observables提供非阻塞行为,而HystrixObservableCommand是专门为非阻塞设置实现的。我不完全确定为什么将它分为两​​个实现,但是我想这是因为最初HystrixCommand不支持非阻塞。它是关于a year or so after the original implementation添加的。可以更干净地编写一个纯非阻塞的hystrix类。

如果仅使用非阻塞调用,则可能应该使用HystrixObservableCommand。 Hystrix开发人员之一Ben Christensen用this post:很好地总结了一下

但是,如果要包装阻止呼叫,则应坚持使用
使用HystrixCommand,因为它是为此而构建的
默认情况下,所有内容都在单独的线程中运行。使用
HystrixCommand.observe()将为您提供并发的,异步的
您想要的构图。

HystrixObservableCommand用于包装异步,
不需要额外线程的非阻塞可观察对象。

07-24 12:58