国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - ASP.NET教程 - 如何利用HttpClientFactory實(shí)現(xiàn)簡單的熔斷降級

如何利用HttpClientFactory實(shí)現(xiàn)簡單的熔斷降級

2020-05-29 15:49Catcher8 ASP.NET教程

這篇文章主要給大家介紹了關(guān)于如何利用HttpClientFactory實(shí)現(xiàn)簡單的熔斷降級的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

在2.1之后,有不少新東西,其中HttpClientFactory算是一個。HttpClientFactory涉及的東西也不算少,三四種clients , 請求中間件,與Polly的結(jié)合,生命周期等。

Steeltoe的組件升級到2.1后,不少示例代碼已經(jīng)使用HttpClientFactory了。當(dāng)然這是個題外話。

這里主要講的是與Polly的結(jié)合,來完成簡單的熔斷降級。在這之前,還是先看看關(guān)于HttpClientFactory最簡單的用法。

HttpClientFactory的簡單使用

用個簡單的控制臺程序來演示

這里就只是獲取一下狀態(tài)碼,沒有獲取實(shí)際的內(nèi)容。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
static async Task<string> BasicUsage()
{
  var serviceCollection = new ServiceCollection();
  serviceCollection.AddHttpClient();
  var services = serviceCollection.BuildServiceProvider();
  var clientFactory = services.GetService<IHttpClientFactory>();
 
  var client = clientFactory.CreateClient();
  var request = new HttpRequestMessage(HttpMethod.Get, "https://www.github.com");
 
  var response = await client.SendAsync(request).ConfigureAwait(false);
 
  return response.StatusCode.ToString();
}

其實(shí)主要的操作就是AddHttpClient,然后通過HttpClientFactory創(chuàng)建一個HttpClient對象,有了HttpClient對象,下面的操作應(yīng)該就不用多說了。

然后在Main方法調(diào)用

?
1
Console.WriteLine($"BasicUsage, StatusCode = {BasicUsage().GetAwaiter().GetResult()}");

用法感覺并沒有太多的差別。下面來看看與Polly的結(jié)合。

HttpClientFactory和Polly的結(jié)合

Polly的wiki頁面已經(jīng)有了這兩者結(jié)合使用的文檔了。

https://github.com/App-vNext/Polly/wiki/Polly-and-HttpClientFactory

其實(shí)現(xiàn)在對于我們來說,要想對http請求使用Polly的一些特性已經(jīng)非常的簡單了。

我們在使用的時候要添加Microsoft.Extensions.Http.Polly的Nuget包。

先來看看使用Polly的三種擴(kuò)展方法

 

擴(kuò)展方法 說明
AddTransientHttpErrorPolicy 主要是處理Http請求的錯誤,如HTTP 5XX 的狀態(tài)碼,HTTP 408 的狀態(tài)碼 以及System.Net.Http.HttpRequestException異常。
AddPolicyHandler 自定義,和傳統(tǒng)定義Polly的方式保持一致
AddPolicyHandlerFromRegistry 從Policy集合(也是自定義的)里面選擇自己想要的。

后面的操作,是用的AddPolicyHandler。

由于我們要實(shí)現(xiàn)熔斷降級,所以,我們必不可少的要用到CircuitBreakerPolicy和FallbackPolicy,同時為了方便演示,再加個TimeoutPolicy。

由于涉及到多個Policy,所以我們必須要確定他們的執(zhí)行順序!

Polly的wiki頁面有個示例,還配了一幅很詳細(xì)的時序圖。

一句話來說就是最先起作用的,還是最后添加的那個。

下面就新建一個API項(xiàng)目,用來演示一下。

修改ConfigureServices方法,具體如下

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public void ConfigureServices(IServiceCollection services)
{
  var fallbackResponse = new HttpResponseMessage();
  fallbackResponse.Content = new StringContent("fallback");
  fallbackResponse.StatusCode = System.Net.HttpStatusCode.TooManyRequests;
 
  services.AddHttpClient("cb", x =>
  {
    x.BaseAddress = new Uri("http://localhost:8000");
    x.DefaultRequestHeaders.Add("User-Agent", "HttpClientFactory-Test");
  })
  //fallback
  .AddPolicyHandler(Policy<HttpResponseMessage>.Handle<Exception>().FallbackAsync(fallbackResponse, async b =>
  {
    Logger.LogWarning($"fallback here {b.Exception.Message}");
  }))
  //circuit breaker
  .AddPolicyHandler(Policy<HttpResponseMessage>.Handle<Exception>().CircuitBreakerAsync(2, TimeSpan.FromSeconds(4), (ex, ts) =>
  {
    Logger.LogWarning($"break here {ts.TotalMilliseconds}");
  }, () =>
  {       
    Logger.LogWarning($"reset here ");
  }))
  //timeout
  .AddPolicyHandler(Policy.TimeoutAsync<HttpResponseMessage>(1));
   
  services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}

然后是在控制器去使用。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
  private static int myCount = 0;
 
  private readonly IHttpClientFactory _clientFactory;
 
  public ValuesController(IHttpClientFactory clientFactory)
  {
    this._clientFactory = clientFactory;
  }
 
  // GET api/values/timeout
  [HttpGet("timeout")]
  public ActionResult<IEnumerable<string>> Timeout()
  {
    if (myCount < 3)//模擬超時
    {
      System.Threading.Thread.Sleep(3000);
    }
    myCount++;
 
    return new string[] { "value1", "value2" };
  }
 
  // GET api/values
  [HttpGet("")]
  public async Task<string> GetAsync()
  {
    var client = _clientFactory.CreateClient("cb");
    
    var request = new HttpRequestMessage(HttpMethod.Get, "/api/values/timeout");
    var response = await client.SendAsync(request);
    var content = await response.Content.ReadAsStringAsync();
 
    return content;
  }
}

效果如下

如何利用HttpClientFactory實(shí)現(xiàn)簡單的熔斷降級

前面幾次請求,會因?yàn)槌瑫r或熔斷,從而我們得到的結(jié)果是fallback。

過了4秒鐘后再請求,由于沒有超時,正常拿到了結(jié)果,所以熔斷器會被reset。

來看看日志

如何利用HttpClientFactory實(shí)現(xiàn)簡單的熔斷降級

比較清晰的看到了所有的操作。

總結(jié)

總體來說,HttpClientFactory還是很不錯的。尤其是它可以直接使用Polly相關(guān)的特性。

部分示例代碼: HttpClientFactoryDemo

好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對服務(wù)器之家的支持。

原文鏈接:https://www.cnblogs.com/catcher1994/p/9349618.html

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 黄色裸体网站 | 懂色av一区二区三区免费观看 | 91精品国产综合久久久蜜臀粉嫩 | 人人爱夜夜爽日日视频 | 免费黄色在线 | 亚洲高清视频一区二区 | 91免费视频观看 | 五月天婷婷免费视频 | 午夜视频在线观看网站 | 国产片在线观看 | 国产精品久久久爽爽爽麻豆色哟哟 | 中文字幕综合在线 | 曰韩免费视频 | 91新视频 | 国产成人综合一区二区三区 | 久久久久久免费精品 | 毛片免费在线 | 亚洲国产欧美日韩 | 久久精品电影网 | 91亚洲日本| 成人免费视频网站在线观看 | 国产综合精品一区二区三区 | 免费一级毛片网站 | 日本一级毛片免费看 | 337p日本粉嫩噜噜噜 | 五月婷婷婷婷 | 红杏首页| 欧美综合久久 | 欧美一区二区三区在线播放 | 在线观看免费黄色 | 五月婷婷激情网 | 亚洲国产精品久久久久婷婷老年 | 亚洲专区中文字幕 | 欧美一级内谢 | 99精品国产热久久91蜜凸 | 91视频免费在线 | 国产一区二区久久 | 欧美在线日韩 | 91精品国产综合久久久久久丝袜 | 国产黄a一级 | 91视视频在线观看入口直接观看 |