2

我正在将 Polly Circuit Breaker 用于 API,如果服务因维护而停机,则会引发用户定义的异常。Exception 将包含一个值,服务将关闭多长时间。

是否可以在处理第一个用户异常后配置/更新断路器策略?

例如

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)
    {
        …
    }
}
4

1 回答 1

1

创建后无法更改durationOfBreak现有CircuitBreakerPolicy实例的 。

对于运行期间的一般动态重新配置,Polly 团队建议自动更新存储在 PolicyRegistry 中的策略实例

针对具体场景:

[the] 如果服务因维护而关闭,API 会抛出用户定义的异常 [which] 将包含一个值,服务将关闭多长时间

您可以更简单地使用断路器的手动控制

  • .Isolate()手动强制电路打开;
  • .Reset()手动复位电路。

.Isolate()当抛出给定的异常时,您可以使用电路;并设置 a在异常指示服务应该再次可用时Timer调用它。Reset()

于 2018-12-09T20:14:12.343 回答