日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

asp.net core 使用HttpClientFactory Polly实现熔断降级

發布時間:2023/12/4 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 asp.net core 使用HttpClientFactory Polly实现熔断降级 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

NET Core2.1后也是增加更新了很多東西,當然HttpClientFactory更新中的一部分.雖然說HttpClient這個實現了disposable,但使用它的時候用using包裝塊的方式通常不是最好的選擇。處理HttpClient,底層socket套接字不會立即釋放。該HttpClient類是未多個請求重復使用而創建的。需要不同的基地址,不同的HTTP?標頭和其他對請求個性化操作的場景時,需要動手管理多個HttpClient實例,為了簡化HttpClient實例管理,.NET Core 2.1提供了一個新的HTTPClientFactory?- 它可以創建,緩存和處理HttpClient實例。

什么是HttpClientFactory

ASPNET Core開始,Polly與IHttpClientFastory集成。HttpClientFastory是一個簡化管理和使用的HttpClientory。用ASP.Net團隊的話說:“an opinionated factory for creating HttpClient instances”(一個用于創建HttpClient實例的最佳實踐的工廠)

  • 提供命名和配置邏輯HttpClient?對象的中心位置。例如,您可以配置預先配置為訪問特定微服務的客戶端(服務代理)。

  • 通過委派處理程序HttpClient?并實施基于Polly?的中間件來利用Polly?的彈性策略,對傳出中間件的概念進行編碼。

  • HttpClient?已經有了委托處理程序的概念,這些處理程序可以鏈接在一起用于傳出HTTP?請求。您將HTTP?客戶端注冊到工廠中,并且可以使用Polly處理程序將Polly策略用于Retry,CircuitBreakers?等。

  • 管理生命周期,HttpClientMessageHandlers?以避免在管理HttpClient?自己的生命周期時可能發生的上述問題/問題。

HttpClientFactory簡單使用

  • Startup添加

services.AddHttpClient();
  • 通過IHttpClientFactory創建一個HttpClient對象,后面操作如舊,但是不需要關心其資源釋放

using Microsoft.AspNetCore.Mvc; using System.Net.Http; using System.Threading.Tasks;namespace HttpClientFactoryPolly.Controllers {[Route("api/[controller]")][ApiController]public class ValuesController : ControllerBase{private readonly IHttpClientFactory _httpClientFactory;public ValuesController(IHttpClientFactory httpClientFactory){this._httpClientFactory = httpClientFactory;}[HttpGet]public async Task<ActionResult<string>> Get(){var client = _httpClientFactory.CreateClient();var result =await client.GetStringAsync("https://www.microsoft.com/zh-cn/");return result;}} }

配置HttpClientFactory Polly

這邊采用命名客戶端演示該栗子(如果應用需要有許多不同的?HttpClient?用法(每種用法的配置都不同),可以視情況使用命名客戶端。可以在?HttpClient?中注冊時指定命名 Startup.ConfigureServices 的配置。)

  • Package

PM> Install-package Microsoft.Extensions.Http.Polly

Startup

services.AddHttpClient("github",c=> {c.BaseAddress = new System.Uri("https://api.github.com/");c.DefaultRequestHeaders.Add("Accept", "application/vnd.github.v3+json");c.DefaultRequestHeaders.Add("User-Agent", "HttpClientFactory-Sample");});[HttpGet("{id}")] public async Task<ActionResult<string>> Get(int id) {var request = new HttpRequestMessage(HttpMethod.Get,"repos/aspnet/docs/pulls");var client = _httpClientFactory.CreateClient("github");var response = await client.SendAsync(request);var result =await response.Content.ReadAsStringAsync();return result; }
  • 重試機制

services.AddHttpClient("github", c =>{c.BaseAddress = new System.Uri("https://api.github.com/");c.DefaultRequestHeaders.Add("Accept", "application/vnd.github.v3+json");c.DefaultRequestHeaders.Add("User-Agent", "HttpClientFactory-Sample");}).AddTransientHttpErrorPolicy(p =>p.WaitAndRetryAsync(3, _ => TimeSpan.FromMilliseconds(600)));

效果如下

  • 熔斷降級超時

設置降級策略當出現任何異常返回fallback

設置熔斷策略當連續出現異常異常 2 次,熔斷 4s;

設置超時策略,請求超時為 1s,超時默認會拋出 TimeoutRejectedException;

效果如下

概要

示例地址:https://github.com/fhcodegit/HttpClientFactoryPolly

總結

以上是生活随笔為你收集整理的asp.net core 使用HttpClientFactory Polly实现熔断降级的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。