JOS*_*Ftw 5 c# circuit-breaker polly
我有一个查询,IGetHamburgers它调用外部API.我IGetHamburgers在我的DI容器中注册了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());
}
Run Code Online (Sandbox Code Playgroud)
要么
public object Execute(.......)
{
var breaker = Policy
.Handle<Exception>()
.CircuitBreaker(2, TimeSpan.FromMinutes(1));
return breaker.Execute(() => this.hamburgerQuery.GetHamburgers());
}
Run Code Online (Sandbox Code Playgroud)
我想第一个选项是正确的方法,因为那时Policy对象将始终是相同的,并可以跟踪异常计数和类似的东西.我的问题是,第二种选择也会起作用吗?我在Pollys Github上发现了很多样本/例子,但是我找不到任何"现实世界"的例子,其中Polly与DI一起使用以及类似的东西?
我想第一个选项是正确的方法,因为那时Policy对象将始终是相同的,并可以跟踪异常计数和类似的东西.
正确.这在波利维基描述这里.简单来说:
请参阅此stackoverflow答案,以获得有关配置策略与其使用分开的更广泛讨论,通过DI将它们注入使用站点,以及在整个范围内重复使用相同实例(例如单个实例)与使用单独实例的效果(2017年6月)Polly政策.
第二个选项也会起作用吗?
否(因为相反的原因:每个调用创建一个单独的实例,因此不会与其他调用共享电路统计/状态).
| 归档时间: |
|
| 查看次数: |
1046 次 |
| 最近记录: |