2016-02-23 5 views
6

Я пытаюсь понять разницу между HystrixCommand и HystrixObservableCommand. Причина, по которой я запутался, - это метод HysterixCommand, также имеющий метод observ() или toObservable(), который испускает горячий и холодный наблюдаемые соответственно. Итак, в чем была необходимость создания HystrixObservableCommand. Если я буду работать полностью на неблокирующих вызовах, которые я должен использовать? Зачем?Разница между HystrixCommand и HystrixObservableCommand

ответ

9

Из Javadocs:

HystrixCommand

Эта команда по существу блокирует команду, но обеспечивает Observable фасад, если используется с наблюдать()

HystrixObservableCommand

Эта команда должна использоваться для чистки y неблокирующий шаблон вызова. Вызывающий этой команды будет подписан на Observable, возвращаемый методом run().

Разница заключается в том, что HystrixCommand по умолчанию поддерживает парадигму блокировки, но и обеспечивает нелипкое поведение путем наблюдаемых с помощью фасада, тогда как HystrixObservableCommand был реализован специально для неблокирующей установки. Я не совсем уверен, почему он разделен на две реализации, но я бы предположил, что причина в том, что изначально HystrixCommand не поддерживал неблокирование. Было добавлено около a year or so after the original implementation. Могло быть просто чище, чтобы написать чисто неблокирующий класс hystrix.

Если вы работаете только с неблокирующими вызовами, скорее всего, вы должны использовать HystrixObservableCommand. Бен Кристенсен, один из дэвов Hystrix, суммирует это красиво в this post:

Однако, если вы оберточной блокирующие вызовы, вы должны просто придерживаться с помощью HystrixCommand, как это то, что он построен для и он по умолчанию бега все в отдельном потоке. Используя , HystrixCommand.observe() предоставит вам подходящую, асинхронную композицию, которую вы ищете.

HystrixObservableCommand предназначен для обертывания вокруг асинхронных, неблокирующих наблюдений, которые не нуждаются в дополнительных потоках.

4

В дополнении к ответу Ник DeFazio, реализация HystrixObservableCommand обертывания наблюдаемых характеристик, которые могут испускать несколько элементов, в то время как HystrixCommand, никогда не будет излучать больше, чем один пункт, даже при вызове observe() или .toObservable()которые только оберточной сингл значение, перенастроенное методом run().

Смежные вопросы