我必须在我的应用程序中实现断路器。一切正常,断路器正在工作,但我需要将其状态存储到数据库中。我怎样才能做到这一点?我在网上找不到任何可靠的东西。
以下是适用于断路的代码:
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;
}
谢谢!
答案 0 :(得分:0)
Polly没有提供将断路器状态存储在数据库中的机制。
Polly团队已经编写了一种耐用的(即持久性的)分布式断路器,可以在这里找到:https://github.com/Polly-Contrib/Polly.Contrib.AzureFunctions.CircuitBreaker
此耐用的分布式断路器作为持久实体功能托管在Azure Functions中。 (您可以获取代码并将其自己托管在自己的Azure Functions实例中。)
可以使用耐用的分布式断路器: