我将Polly Circuit Breaker用于API,如果维修服务中断,则会引发用户定义的异常。 异常将包含一个值,指示服务将关闭多长时间。
在处理了第一个用户异常之后是否可以配置/更新断路器策略?
例如
CircuitBreakerPolicy breaker = Policy.Handle<UserException>()
.CircuitBreaker(
exceptionsAllowedBeforeBreaking: 1,
durationOfBreak: TimeSpan.FromMinutes(1));
Example()
{
try
{
string response = await breaker.ExecuteAsync<String>(() =>
{
return client.GetStringAsync("/api/values/");
});
}
catch (UserException ex)
{
var downtime = GetDowntime(ex);
//how to update the duration of break ?
breaker.durationOfBreak = downtime;
}
catch (Exception ex)
{
…
}
}
答案 0 :(得分:0)
创建后,无法在现有durationOfBreak
实例上更改CircuitBreakerPolicy
。
对于运行期间 general 的动态重新配置,Polly团队建议使用atomically updating a policy instance stored in the PolicyRegistry。
对于特定情况:
[the] API会抛出用户定义的异常,如果服务因维护而中断[该值将包含服务将中断多长时间的值
您可以更简单地使用断路器的manual controls:
.Isolate()
手动强制断开电路; .Reset()
手动重置电路。 当抛出给定异常时,您可以.Isolate()
进行电路;并设置一个Timer
以在异常指示该服务应该再次可用时调用Reset()
。