日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

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

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

前言

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

什么是HttpClientFactory

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

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

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

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

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

HttpClientFactory簡單使用

  • Startup添加

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

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

這邊采用命名客戶端演示該栗子(如果應(yīng)用需要有許多不同的?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; }
  • 重試機(jī)制

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)));

效果如下

  • 熔斷降級超時

設(shè)置降級策略當(dāng)出現(xiàn)任何異常返回fallback

設(shè)置熔斷策略當(dāng)連續(xù)出現(xiàn)異常異常 2 次,熔斷 4s;

設(shè)置超時策略,請求超時為 1s,超時默認(rèn)會拋出 TimeoutRejectedException;

效果如下

概要

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

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。