gpt4 book ai didi

c# - 使用 Polly 断路器处理多项服务的正确方法

转载 作者:行者123 更新时间:2023-11-30 12:19:25 26 4
gpt4 key购买 nike

我有一个应用程序,我们在其中与数百个 HTTPs 端点进行通信。该应用程序是某种代理。

当使用 polly 进行测试时,我注意到如果一个端点,比如 api.endpoint1.com 失败,调用 api.endpoint2.comapi.endpoint3.com 也将处于打开/阻止状态。

这是有道理的,因为我只定义了一个策略,但是处理这种情况的推荐方法是什么,这样对不相关端点的调用就不会因为另一个端点出现性能问题而被阻止?

我是否创建一组策略,每个端点一个,或者有没有办法提供各种上下文键(即主机名)以将故障范围限定到给定的主机端点?

我已经查看了 Polly's docs关于上下文键,这些似乎是一种来回交换数据的方式,而不是我在这里寻找的方式。

var policy = Policy
.Handle<TimeoutException>()
.CircuitBreaker(1, TimeSpan.FromSeconds(1));

//dynamic, large list of endpoints.
var m = new HttpRequestMessage(HttpMethod.Post, "https://api.endpoint1.com")
{
Content = new StringContent("some JSON data here", Encoding.UTF8,"application/json")
};


policy.Execute(() => HTTPClientWrapper.PostAsync(message));

最佳答案

是的,最好的办法是为每个端点创建一个单独的策略。这比针对每个主机执行此操作要好,因为端点可能由于特定于该端点的原因(例如,存储过程很慢)而响应缓慢。

我用过 Dictionary<string, Policy>以端点 URL 作为键。

if (!_circuitBreakerPolices.ContainsKey(url))
{
CircuitBreakerPolicy policy = Policy.Handle<Exception>().AdvancedCircuitBreakerAsync(
onBreak: ...
);
_circuitBreakerPolicies.Add(url, policy);
}
await _circuitBreakerPolicies[url].ExecuteAsync(async () => ... );

关于c# - 使用 Polly 断路器处理多项服务的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58438204/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com