.NET Core 3.0深入源码理解HttpClientFactory之实战
寫(xiě)在前面
前面兩篇文章透過(guò)源碼角度,理解了HttpClientFactory的內(nèi)部實(shí)現(xiàn),當(dāng)我們?cè)陧?xiàng)目中使用時(shí),總會(huì)涉及以下幾個(gè)問(wèn)題:
HttpClient超時(shí)處理以及重試機(jī)制
HttpClient熔斷器模式的實(shí)現(xiàn)
HttpClient日志記錄與追蹤鏈
接下來(lái)我們將從使用角度對(duì)上述問(wèn)題作出說(shuō)明。
詳細(xì)介紹
以下代碼參考了MSDN,因?yàn)榇a里展示的GitHub接口確實(shí)可以調(diào)通,省的我再寫(xiě)一個(gè)接口出來(lái)測(cè)試了。
HttpClient超時(shí)處理和重試機(jī)制
在此之前,我們需要了解一下Polly這個(gè)庫(kù),Polly是一款基于.NET的彈性及瞬間錯(cuò)誤處理庫(kù), 它允許開(kāi)發(fā)人員以順暢及線程安全的方式執(zhí)行重試(Retry),斷路器(Circuit),超時(shí)(Timeout),隔板隔離(Bulkhead Isolation)及后背策略(Fallback)。
以下代碼描述了在.NET Core 3.0中如何使用超時(shí)機(jī)制。
那么如何將其注冊(cè)到對(duì)應(yīng)的HttpClient實(shí)例呢,有很多種方式:
通過(guò)AddPolicyHandler注冊(cè)
聲明Policy注冊(cè)對(duì)象,并將超時(shí)策略對(duì)象添加進(jìn)去
調(diào)用方式
Polly重試也很簡(jiǎn)單
這里的重試設(shè)置是在第一次調(diào)用失敗后,還會(huì)有三次機(jī)會(huì)繼續(xù)重試,每個(gè)請(qǐng)求的時(shí)間間隔是指數(shù)級(jí)延遲。
重試功能除了可以使用Polly實(shí)現(xiàn)外,還可以使用DelegatingHandler,DelegatingHandler繼承自HttpMessageHandler,用于”處理請(qǐng)求、響應(yīng)回復(fù)“,本質(zhì)上就是一組HttpMessageHandler的有序組合,可以視為是一個(gè)“雙向管道”。
此處主要展示DelegatingHandler的使用方式,在實(shí)際使用中,仍然建議使用Polly重試。
注冊(cè)方式如下:
HttpClient熔斷器模式的實(shí)現(xiàn)
如果非常了解Polly庫(kù)的使用,那么熔斷器模式的實(shí)現(xiàn)也會(huì)非常簡(jiǎn)單,
這里的熔斷器設(shè)置規(guī)則是在連續(xù)10次請(qǐng)求失敗后,會(huì)暫停30秒。這個(gè)地方可以寫(xiě)個(gè)擴(kuò)展方法注冊(cè)到IServiceCollection中。
HttpClient日志記錄與追蹤鏈
日志記錄這塊與追蹤鏈,我們一般會(huì)通過(guò)request.Header實(shí)現(xiàn),而在微服務(wù)中,十分關(guān)注相關(guān)調(diào)用方的信息及其獲取,一般的做法是通過(guò)增加請(qǐng)求Id的方式來(lái)確定請(qǐng)求及其相關(guān)日志信息。
實(shí)現(xiàn)思路是增加一個(gè)DelegatingHandler實(shí)例,用以記錄相關(guān)的日志以及請(qǐng)求鏈路
我在查找相關(guān)資料的時(shí)候,發(fā)現(xiàn)有個(gè)老外使用CorrelationId組件實(shí)現(xiàn),作為一種實(shí)現(xiàn)方式,我決定要展示一下,供大家選擇:
參考鏈接:
https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/http-requests?view=aspnetcore-3.0
https://rehansaeed.com/optimally-configuring-asp-net-core-httpclientfactory/
總結(jié)
以上是生活随笔為你收集整理的.NET Core 3.0深入源码理解HttpClientFactory之实战的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 沃尔玛招聘.NET软件工程师
- 下一篇: 树莓派 + Windows IoT Co