我正在使用 Steeltoe CircuitBreaker将 Hystrix CircuitBreaker 模式添加到现有的 ASP.NET Core 微服务中,同时以最少的重构(或尽可能少的重构)维护现有的日志记录功能。
目前,传入的 HTTP 请求经过以下层:
Controller -> Service -> DerivedProvider -> AbstractProvider (and out to downstream service)
使用 Hystrix,我希望它是:
Controller -> Service -> HystrixCommand<> -> DerviedProvider (via HystrixCommand's ExecuteAsync) -> AbstractProvider
许多上下文存储在提供程序中,通过构造函数通过层向下传递,然后在AbstractProvider
使用该上下文时发生日志记录,而不管传出调用的结果如何。AbstractProvider
还支持大量自定义逻辑,例如可选的执行前和执行后回调。当返回不成功的响应消息时调用 post 回调。不用说,以我目前的理解,彻底改变图层对我来说并不容易。
在查看了Hystrix 文档和Steeltoe CircuitBreaker 文档后,我不清楚我是否可以在HystrixCommand<>.RunFallbackAsync()
.
也许答案可能与您可以覆盖的生命周期挂钩有关?喜欢onFallbackStart(HystrixInvokable commandInstance
?
最终,目标只是确保任何现有的回调/日志记录功能不会丢失,方法是将它们包装providers
在HystrixCommand
. 我无法理解如何HystrixCommand
管理提供者及其上下文,以及您何时/何地可以访问或无法访问它们。您可以提供的任何建议或方向将不胜感激!干杯!