我有一个IGetHamburgers
调用外部 API 的查询。我已将IGetHamburgers
DI 容器中的实现注册为单例。我使用 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 以及类似的东西一起使用的“真实世界”示例?