Я работаю над добавлением шаблона Hystrix CircuitBreaker в существующий микросервис ASP.NET Core, используя Steeltoe CircuitBreaker , сохраняя при этом существующую функциональность ведения журналов с минимальным рефакторингом (или так мало, как я могу надеяться) ,
В настоящее время входящий HTTP-запрос проходит через следующие слои:
Controller -> Service -> DerivedProvider -> AbstractProvider (and out to downstream service)
с Hystrix, я бы хотел, чтобы это было:
Controller -> Service -> HystrixCommand<> -> DerviedProvider (via HystrixCommand's ExecuteAsync) -> AbstractProvider
В провайдерах хранится много контекста, который передается через слои через конструкторы, и затем в AbstractProvider
с использованием этого контекста ведется запись в журнал, независимо от результата исходящего вызова. AbstractProvider
также поддерживает достаточное количество настраиваемой логики, такой как необязательные обратные вызовы до и после выполнения. Почтовый обратный вызов вызывается, когда возвращается неуспешное ответное сообщение. Излишне говорить, что радикальное изменение слоев не кажется мне легким, с моим нынешним пониманием.
После просмотра документации Hystrix и Steeltoe CircuitBreaker Мне неясно, могу ли я поддерживать и получать доступ к провайдеру и его контексту в HystrixCommand<>.RunFallbackAsync()
.
Возможно, ответ может касаться хуков жизненного цикла, которые вы можете переопределить? Как <a href="https://netflix.github.io/Hystrix/javadoc/com/netflix/hystrix/strategy/executionhook/HystrixCommandExecutionHook.html#onFallbackStart-com.netflix.hystrix.HystrixInvokable-" rel="nofollow noreferrer">onFallbackStart(HystrixInvokable commandInstance</a>
?
В конечном счете, цель состоит в том, чтобы просто убедиться, что любая существующая функция обратного вызова / регистрации не потеряна, обернув эти существующие providers
в HystrixCommand
. Я не понимаю, как HystrixCommand
управляет поставщиками и их контекстом, и когда / где у вас есть или нет доступа к ним. Любые предложения или направления, которые вы можете предложить, будут очень благодарны! Ура!