Polly CircuitBreaker 不处理非成功状态代码

问题描述 投票:0回答:0

我正在使用 HttpClient 和 Polly 的 CircuitBreaker 来处理异常和非成功状态代码。
出于某种原因,CircuitBreaker 不会将非成功状态代码(例如 404)计为失败,即使它应该。

我的设置:

public class SomeExternalClientClass
{
    private readonly HttpClient _httpClient;

    public SomeExternalClientClass(IHttpClientFactory httpClientFactory)
    {
        _httpClient = httpClientFactory.CreateClient("HttpClientName");
    }

    public async Task Send()
    {
        try
        {
            ...
            var response = await _httpClient.SendAsync(request, cancellationToken);
            ...
        }
        catch (BrokenCircuitException brokenCircuitEx)
        {
        }
        catch (Exception e)
        {
        }
    }
}
        services
            .AddSingleton<..., SomeExternalClientClass>()
            .AddHttpClient("HttpClientName")
            .AddPolicyHandler(...)
        return Policy<HttpResponseMessage>
            .HandleResult(httpResponse => !httpResponse.IsSuccessStatusCode)
            .Or<Exception>()
            .CircuitBreakerAsync(
                handledEventsAllowedBeforeBreaking: 3
                durationOfBreak: TimeSpan.FromSeconds(180),
                onBreak: (exception, span) => 
                {
                },
                onReset: () =>
                {
                },
                onHalfOpen: () =>
                {
                });

当抛出 Exception 时,CircuitBreaker 将其视为失败(并在相关时移动到 Open 状态,但是当返回 404 时,它可以一直发生而不会影响 CircuitBreaker。

有什么想法吗?
谢谢!

asp.net-core .net-core dotnet-httpclient polly circuit-breaker
© www.soinside.com 2019 - 2024. All rights reserved.