Akka Http Автоматический выключатель

Можно ли при использовании шаблона прерывателя цепи обернуть все вызовы внешних служб в метод, который передается в .withCircuitBreaker(), или каждый вызов сам по себе следует передавать в .withCircuitBreaker()? например.

// wrapped
def  wrapper(param: T) : Future[Option[T]] = {
     externalCall1(param)
     externalCall2(param)
}

circuitBreaker.withCircuitBreaker(wrapper(someParam))

// one-by-one
circuitBreaker.withCircuitBreaker(externalCall1(param))
circuitBreaker.withCircuitBreaker(externalCall2(param))

Обновление: в случае веб-службы можно ли зарегистрировать автоматический выключатель в mainActorSystem или мне следует использовать отдельный circuitBreakerActorSystem?


person Lucian Enache    schedule 25.01.2016    source источник


Ответы (1)


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

Если вы сильно зависите от обоих вызовов, перенос обоих - хорошая идея. Нет смысла звонить externalCall1, если externalCall2 не удается, и вам нужно и то, и другое. Здесь предлагается иметь какой-то резервный / резервный вариант, когда цепь разомкнута.

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

Возможный откат / резервное копирование - использовать кеш и возвращать кэшированное значение, когда цепь разомкнута. ScalaCache здесь - хороший вариант. Он может работать с внутренним кешем процесса, например Ehcache или с Redis, и иметь асинхронные / синхронизирующие API.

person marcospereira    schedule 26.01.2016
comment
В моем сценарии вызовы зависимы, что вы предлагаете использовать в качестве кеша? - person Lucian Enache; 26.01.2016
comment
Я отредактировал ответ, чтобы добавить дополнительную информацию о кешировании. - person marcospereira; 26.01.2016