ASP.NETコアHttpClientFactory +ポリーは、[ターン]ブローダウングレードを実現しました

本論文では、説明HttpClientFactoryの統合ポリーは、タイムアウトのHTTP要求の再試行、融着、降格操作を実装するために使用します。

HttpClientFactory統合ポリー

  1. (ここでは、.NETのコア2.2を使用して).NETのコアAPIプロジェクトを作成します。

  2. インストールMicrosoft.Extensions.Http.PollyNuGetパッケージ。

  3. 関連のHttpClientコードConfigureServices方法Startup.csのを追加します。

    public void ConfigureServices(IServiceCollection services) { var fallbackResponse = new HttpResponseMessage { Content = new StringContent("Fallback"), StatusCode = HttpStatusCode.GatewayTimeout }; services.AddHttpClient("github", client => { client.BaseAddress = new Uri("https://www.github.com"); }) // 降级 .AddPolicyHandler(Policy<HttpResponseMessage>.Handle<Exception>().FallbackAsync(fallbackResponse, async b => { await Task.CompletedTask; _logger.LogWarning($"Fallback: {b.Exception.Message}"); })) // 熔断 .AddPolicyHandler(Policy<HttpResponseMessage>.Handle<TimeoutRejectedException>().CircuitBreakerAsync(5, TimeSpan.FromSeconds(3), (ex, ts) => { _logger.LogWarning($"Open Circuit Breaker:{ts.TotalMilliseconds}"); }, () => { _logger.LogWarning($"Closed Circuit Breaker"); }, () => { _logger.LogWarning($"HalfOpen Circuit Breaker"); })) // 重试 .AddPolicyHandler(Policy<HttpResponseMessage> .Handle<TimeoutRejectedException>() .WaitAndRetryAsync( new[] { TimeSpan.FromMilliseconds(100), TimeSpan.FromMilliseconds(200) } ) ) // 超时 .AddPolicyHandler(Policy.TimeoutAsync<HttpResponseMessage>(TimeSpan.FromSeconds(0.5))); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); } 

    説明(このコードは、実際の使用時に再カプセル化することが提案され、現在のように、各時刻を定義すべきではないHttpClient重複コードの設定束):

    • services.AddHttpClient命名定義のHttpClientのHttpリクエストを送信するには、このオブジェクトが取得し、その後の名前を。githubHttpClient
    • AddPolicyHandler他の拡張子参考:ポリーとHttpClientFactory AddTransientHttpErrorPolicyAddPolicyHandlerFromRegistry使用上の)は、この目的のためのHttpClient追加Pollyの戦略。
    • ダウングレードポリシー設定、異常リターンが存在する場合fallbackResponse
    • セットヒューズ政策、連続してTimeoutRejectedException異常に5回、吹き3S;
    • そこセット再試行戦略、TimeoutRejectedException200msの再試行の後、それぞれ100ミリ秒を待っています。
    • 設定したタイムアウトポリシー、要求タイムアウト0.5秒、デフォルトのタイムアウトがスローされますTimeoutRejectedException
    • 場合は、複数のオーバーレイ戦略は、最初の行為は最後に追加されます。
  4. HttpClientをを使用してください

    public class ValuesController : ControllerBase { private readonly IHttpClientFactory _httpClientFactory; public ValuesController(IHttpClientFactory httpClientFactory) { _httpClientFactory = httpClientFactory; } [HttpGet] public async Task<ActionResult> Get() { var client = _httpClientFactory.CreateClient("github"); var request = new HttpRequestMessage(HttpMethod.Get, "/"); var response = await client.SendAsync(request); var result = await response.Content.ReadAsStringAsync(); return Ok(result); } } 

    説明:からHttpClientFactoryで命名のget-定義されたオブジェクト、および一般的な、これはということです違いの様々な定義されている戦略、他の人がどんな違いがありませんでした。githubHttpClientHttpClientHttpClientPolly


電源を入れます。https://www.jianshu.com/p/f4444c04b05c

おすすめ

転載: www.cnblogs.com/fanfan-90/p/12151684.html