【发布时间】:2019-10-19 12:26:53
【问题描述】:
我正在努力将 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 还支持相当多的自定义逻辑,例如可选的执行前和执行后回调。当返回不成功的响应消息时调用 post 回调。不用说,以我目前的理解,彻底改变层对我来说并不容易。
在查看了Hystrix documentation 和Steeltoe CircuitBreaker documentation 之后,我不清楚是否可以在HystrixCommand<>.RunFallbackAsync() 中维护和访问提供程序及其上下文。
也许答案可能与您可以覆盖的生命周期挂钩有关?喜欢@987654324@?
最终,目标只是通过将这些现有的providers 包装在HystrixCommand 中来确保不会丢失任何现有的回调/日志记录功能。我无法理解HystrixCommand 如何管理提供程序及其上下文,以及您何时/何地可以访问或不可以访问它们。您可以提供的任何建议或方向将不胜感激!干杯!
【问题讨论】:
标签: asp.net-core asp.net-core-mvc hystrix circuit-breaker steeltoe