在 Polly CircuitBreaker 中设置 durationOfBreak
Set durationOfBreak in Polly CircuitBreaker
我正在使用 Polly Circuit Breaker 作为 API 如果服务因维护而停机,它会抛出用户定义的异常。
异常将包含服务将关闭多长时间的值。
是否可以configure/update处理第一个用户异常后的断路器策略?
例如
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)
{
…
}
}
创建后无法更改现有 CircuitBreakerPolicy
实例上的 durationOfBreak
。
对于 general 在 运行 期间的动态重新配置,Polly 团队推荐 atomically updating a policy instance stored in the PolicyRegistry。
针对具体场景:
[the] API throws a user defined Exception if service is down for maintenance [which] will contain a value how long the service will be down
您可以更简单地使用断路器的 manual controls:
.Isolate()
手动强制电路断开;
.Reset()
手动复位电路。
您可以 .Isolate()
抛出给定异常时的电路;并设置 Timer
以在异常指示服务应该再次可用时调用 Reset()
。
我正在使用 Polly Circuit Breaker 作为 API 如果服务因维护而停机,它会抛出用户定义的异常。 异常将包含服务将关闭多长时间的值。
是否可以configure/update处理第一个用户异常后的断路器策略?
例如
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)
{
…
}
}
创建后无法更改现有 CircuitBreakerPolicy
实例上的 durationOfBreak
。
对于 general 在 运行 期间的动态重新配置,Polly 团队推荐 atomically updating a policy instance stored in the PolicyRegistry。
针对具体场景:
[the] API throws a user defined Exception if service is down for maintenance [which] will contain a value how long the service will be down
您可以更简单地使用断路器的 manual controls:
.Isolate()
手动强制电路断开;.Reset()
手动复位电路。
您可以 .Isolate()
抛出给定异常时的电路;并设置 Timer
以在异常指示服务应该再次可用时调用 Reset()
。