HystrixCommand和HystrixObservableCommand之间的区别

时间:2016-02-23 05:29:45

标签: java hystrix

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

2 个答案:

答案 0 :(得分:12)

来自Javadocs:

HystrixCommand

  

此命令本质上是一个阻塞命令,但如果与observe()

一起使用,则提供一个Observable外观

HystrixObservableCommand

  

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

不同之处在于HystrixCommand默认支持阻塞范例,但也通过Facade通过Observables提供非阻塞行为,而HystrixObservableCommand专门用于非阻塞设置。我不完全确定为什么它分成两个实现,但我猜它的原因是因为最初的HystrixCommand不支持非阻塞。它被添加了a year or so after the original implementation。写一个纯粹的非阻塞的hystrix类可能更干净。

如果您只使用非阻塞调用,则应该使用HystrixObservableCommand。 Hystrix开发者之一Ben Christensen在this post:

中总结得很好
  

但是,如果要打包阻止调用,则应该坚持下去   使用HystrixCommand,因为它是为它而构建的   默认在单独的线程中运行所有内容。运用   HystrixCommand.observe()将为您提供并发,异步   你正在寻找的作文。

     

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

答案 1 :(得分:4)

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