Автоматический выключатель Java работает в потоке запроса

Я рассматривал решение для автоматического выключателя Netflix OSS - Hystrix.

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

Это потому, что работа, выполняемая моим обработчиком запросов, требует очень небольшого количества вычислений перед вызовом удаленной службы. Кроме того, пока я жду ответа, я ничего не могу сделать.

Пример в псевдокоде:

@post ("/ token") token (@body authResult) {Проверить authResult Получить идентификатор от authResult Вызвать удаленную службу, чтобы получить токен authz Вернуть токен authz}

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

Какие-либо предложения? Можно ли запустить команду hystrix в том же потоке, что и вызывающий?


person phil91    schedule 04.04.2018    source источник
comment
Можете ли вы показать нам, какой код вы пытались использовать?   -  person markspace    schedule 04.04.2018
comment
Просто пройдя быстрое прочтение страницы Netflix / Hystrix, то, что они описывают, похоже на очереди сообщений Java. Однако я недостаточно знаю ни о том, ни о другом, чтобы быть действительно уверенным. docs.oracle.com/cd/E19435-01/819- 0069 / intro.html   -  person markspace    schedule 04.04.2018
comment
Существует 2600 вилок github.com/Netflix/Hystrix/wiki/How-it -Работает. Я бы попробовал найти что-нибудь на гитхабе. Также в spring.io есть пример: spring.io/guides/gs/circuit-breaker   -  person Witold Kaczurba    schedule 04.04.2018
comment
@WitoldKaczurba Либо ты не понял мой вопрос, либо я не получил твоего ответа. Я не спрашиваю, как работает Hystrix. Я спрашиваю, может ли он работать без изоляции потоков, то есть работать в том же потоке, что и тот, который обслуживает запрос.   -  person phil91    schedule 04.04.2018
comment
Привет, phil91. Согласен. Не совсем понял ваш кестоин. Возможно, стоит отредактировать его или хотя бы показать код, на который вы ссылаетесь.   -  person Witold Kaczurba    schedule 04.04.2018
comment
Вопрос кажется немного неясным. Зачем нужно отключать пул потоков? Также рекомендации для других сторонних библиотек обычно не по теме для SO. Вам нужно отредактировать это, сделав более ясным изложение проблемы.   -  person jontro    schedule 04.04.2018
comment
Я добавил пример и переформулировал вопрос. надеюсь, это поможет   -  person phil91    schedule 05.04.2018


Ответы (1)


Команда Hystrix может выполняться в вызывающем потоке, если вы используете SEMAPHORE в качестве стратегии изоляции выполнения.

https://github.com/Netflix/Hystrix/wiki/How-it-Works#semaphores https://github.com/Netflix/Hystrix/wiki/Configuration#thread-or-semaphore

person Davin    schedule 04.04.2018
comment
да. И здесь пример того, как это сделать. Раньше я неправильно понимал документацию. - person phil91; 05.04.2018