【问题标题】:Access Service Provider Context in HystrixCommand's RunFallbackAsync在 HystrixCommand 的 RunFallbackAsync 中访问服务提供者上下文
【发布时间】: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 documentationSteeltoe CircuitBreaker documentation 之后,我不清楚是否可以在HystrixCommand<>.RunFallbackAsync() 中维护和访问提供程序及其上下文。

也许答案可能与您可以覆盖的生命周期挂钩有关?喜欢@987654324@

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

【问题讨论】:

    标签: asp.net-core asp.net-core-mvc hystrix circuit-breaker steeltoe


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-03-25
      • 1970-01-01
      • 2019-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-31
      • 2020-12-10
      • 2023-03-06
      相关资源
      最近更新 更多