如何将断路器状态存储到数据库中?

时间:2020-03-03 14:40:39

标签: c# api polly circuit-breaker

我必须在我的应用程序中实现断路器。一切正常,断路器正在工作,但我需要将其状态存储到数据库中。我怎样才能做到这一点?我在网上找不到任何可靠的东西。

以下是适用于断路的代码:

public static IServiceCollection AddTenantService(this
IServiceCollection services, IConfiguration configuration)
        {
            var tenantServiceSettings = configuration?.GetSection("ApiEndpoints");
            var tenantServiceBaseUrl = tenantServiceSettings.GetValue<string>("TenantServiceApiLink");

            var advancedCircuitBreakerPolicy = Policy
                .HandleResult<HttpResponseMessage>(r => !r.IsSuccessStatusCode)
                .AdvancedCircuitBreakerAsync(0.5, TimeSpan.FromSeconds(30), 2, 
                    TimeSpan.FromSeconds(30), onBreak: (exception, context) => Console.WriteLine($"{exception}"), onReset: null);

            services.AddHttpClient<ITenantService, TenantService>(client => { client.BaseAddress = new
Uri(tenantServiceBaseUrl); })
                .SetHandlerLifetime(TimeSpan.FromMinutes(5))
                .AddPolicyHandler(advancedCircuitBreakerPolicy);
            return services;
        }

谢谢!

1 个答案:

答案 0 :(得分:0)

Polly没有提供将断路器状态存储在数据库中的机制。


Polly团队已经编写了一种耐用的(即持久性的)分布式断路器,可以在这里找到:https://github.com/Polly-Contrib/Polly.Contrib.AzureFunctions.CircuitBreaker

此耐用的分布式断路器作为持久实体功能托管在Azure Functions中。 (您可以获取代码并将其自己托管在自己的Azure Functions实例中。)

可以使用耐用的分布式断路器:

  • 在Azure功能应用程序中-通过普通的Azure功能或持久的业务流程功能;
  • 通过https API在任何地方