Шаблоны выполнения Hystrix

Я пытаюсь понять Hystrix и после прочтения их документов , все еще есть вопрос о его шаблонах использования.

Во-первых, я не понимаю вариант использования для когда использовать их асинхронное выполнение по сравнению с их реактивным исполнение. Единственная разница, которую я вижу, заключается в том, что асинхронное выполнение всегда неблокируется, тогда как реактивное может быть либо блокирующим, либо неблокирующим. Итак, я думаю, мой настоящий вопрос:

  • В чем разница между синхронным и блокирующим реактивным выполнением?; а также
  • В чем разница между асинхронным и неблокирующим реактивным выполнением?

person smeeb    schedule 21.11.2014    source источник


Ответы (1)


Предположим, вы обернули два служебных вызова A и B как HystrixCommand. Теперь у вас есть три варианта:

используйте .execute(): чистый синхронный вызов. Вы вызываете метод и продолжаете свою программу после получения результата. Общее время выполнения вашей программы равно сумме обоих вызовов. Основной поток вашей программы очень линейный.

используйте .queue(): немедленно получите Future для обеих команд. Оба служебных вызова выполняются параллельно. Затем используйте .get() для получения результатов. Эти вызовы с блокировкой до тех пор, пока не будет получен результат. Ваше общее время выполнения быстрее, чем раньше: ваше время выполнения будет равно продолжительности самого длинного вызова службы. Используйте это, когда вы, например, хотите объединить результаты двух сервисов. Основной поток вашей программы по-прежнему линейный, хотя оба вызова выполняются параллельно.

используйте .subscribe(): немедленно получите Observable для обеих команд. Оба служебных вызова выполняются параллельно. Затем используйте .subscribe(), чтобы зарегистрировать обратный вызов для обработки результата, как только он будет доступен. Это очень полезно, если вы не хотите объединять результаты и хотите независимо реагировать на результаты службы A и B после их поступления. Основной поток вашей программы не линейный, а реактивный: поток программы будет продолжаться внутри обратного вызова для каждой команды.

Я надеюсь, что это помогает.

person ahus1    schedule 23.11.2014