0

我正在使用 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

最终,目标只是确保任何现有的回调/日志记录功能不会丢失,方法是将它们包装providersHystrixCommand. 我无法理解如何HystrixCommand管理提供者及其上下文,以及您何时/何地可以访问或无法访问它们。您可以提供的任何建议或方向将不胜感激!干杯!

4

1 回答 1

0

Hystrix 命令可以添加到服务容器中,也可以是“新的”(即 new MyHystrixCommand(...) ,无论哪种情况最适合您的情况。

请记住,Hystrix 命令不能重复使用.. 即,一旦您创建并执行了命令,您就不能尝试重复使用它。

显然,如果您是新的 HystrixCommand,那么您可以在构造函数中定义您想要的任何参数,并为其提供它需要执行的正确参数(即状态)。

如果您将其注入控制器或其他服务......那么在使用它之前......您可以使用属性将其初始化为您想要的任何状态,然后执行它。

于 2020-04-02T19:29:40.893 回答