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添加
通過IHttpClientFactory創建一個HttpClient對象,后面操作如舊,但是不需要關心其資源釋放
配置HttpClientFactory Polly
這邊采用命名客戶端演示該栗子(如果應用需要有許多不同的?HttpClient?用法(每種用法的配置都不同),可以視情況使用命名客戶端??梢栽?HttpClient?中注冊時指定命名 Startup.ConfigureServices 的配置。)
Package
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; }重試機制
效果如下
熔斷降級超時
設置降級策略當出現任何異常返回fallback
設置熔斷策略當連續出現異常異常 2 次,熔斷 4s;
設置超時策略,請求超時為 1s,超時默認會拋出 TimeoutRejectedException;
效果如下
概要
示例地址:https://github.com/fhcodegit/HttpClientFactoryPolly
總結
以上是生活随笔為你收集整理的asp.net core 使用HttpClientFactory Polly实现熔断降级的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AutoMapper多个对象映射到一个D
- 下一篇: .NET生态系统概览