gpt4 book ai didi

c# - Polly Policies 应该是单例吗?

转载 作者:太空狗 更新时间:2023-10-29 23:05:24 25 4
gpt4 key购买 nike

我有一个调用外部 API 的查询 IGetHamburgers。我已经在我的 DI 容器中将 IGetHamburgers 的实现注册为 Singleton。我使用 Polly 作为断路器,如果两个请求失败,电路将打开。

我的目标是所有对 Hamburger api 的调用都应该通过同一个断路器,如果 GetHamburgers 失败,那么所有其他调用也应该失败。

我应该如何使用我的保单?我是否应该将我的政策注册为这样的字段:

private Policy _policy;

private Policy Policy
{
get
{
if(this_policy != null)
{
return this_policy;
}

this._policy = Policy
.Handle<Exception>()
.CircuitBreaker(2, TimeSpan.FromMinutes(1));

return this._policy;
}
}

public object Execute(.......)
{
return Policy.Execute(() => this.hamburgerQuery.GetHamburgers());
}

public object Execute(.......)
{
var breaker = Policy
.Handle<Exception>()
.CircuitBreaker(2, TimeSpan.FromMinutes(1));
return breaker.Execute(() => this.hamburgerQuery.GetHamburgers());
}

我想第一个选项是正确的方法,因为从那时起,Policy 对象将始终相同,并且可以跟踪异常计数和类似的东西。我的问题是,第二个选项是否也有效?我在 Pollys Github 上找到了很多样本​​/示例,但我找不到任何将 Polly 与 DI 和类似东西一起使用的“真实世界”示例?

最佳答案

I guess that the first option is the correct way since then the Policy object will always be the same and can keep track of the exception count and stuff like that.

正确。这在 Polly wiki here 中有描述。 .简而言之:

  • 当您希望这些调用站点共同中断时,在这些调用站点之间共享相同的断路器策略实例 - 例如,它们具有共同的下游依赖项。
  • 如果您希望调用站点具有独立的电路状态并独立中断,请不要在调用站点之间共享断路器实例。

参见 this stackoverflow answer更广泛地讨论配置策略与它们的使用分开,通过 DI 将它们注入(inject)使用站点,以及在整个范围内重用相同实例(例如单例)与使用单独实例的效果(2017 年 6 月) ) 的 Polly 策略。

will option number two work as well?

否(相反的原因:每次调用都会创建一个单独的实例,因此不会与其他调用共享电路统计信息/状态)。

关于c# - Polly Policies 应该是单例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44638856/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com