HystrixCommand和HystrixObservableCommand之间的区别

Sha*_*riq 7 java hystrix

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

Nic*_*zio 12

来自Javadocs:

HystrixCommand

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

HystrixObservableCommand

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

不同之处在于HystrixCommand默认支持阻塞范例,但也通过Facade通过Observables提供非阻塞行为,而HystrixObservableCommand专门用于非阻塞设置.我不完全确定为什么它分成两个实现,但我猜它的原因是因为最初的HystrixCommand不支持非阻塞.在原始实施后大约一年左右添加了它.写一个纯粹的非阻塞的hystrix类可能更干净了.

如果您只使用非阻塞调用,则应该使用HystrixObservableCommand.Hystrix开发者之一Ben Christensen在这篇文章中总结得很好:

但是,如果你正在包装阻塞调用,你应该坚持使用HystrixCommand,因为它是为它构建的,它默认在一个单独的线程中运行所有东西.使用HystrixCommand.observe()将为您提供您正在寻找的并发异步组合.

HystrixObservableCommand用于包装不需要额外线程的异步,非阻塞Observable.


Bri*_*ice 5

除了 Nick Defazio 的回答之外,HystrixObservableCommand包装 Observables的实现可以发出多个项目,而HystrixCommand, 永远不会发出超过一个项目,即使在调用observe().toObservable() 仅包装由run()方法重新调整的单个值时也是如此