Polly组件对微服务场景的价值
Polly是一個開源框架,在github上可以找到,被善友大哥收錄,也是.App vNext的一員!
App vNext:https://github.com/App-vNext
GitHub:https://github.com/App-vNext/Polly
NanoFabric是一個開源的微服務架構(gòu),也是善友大哥推薦的:https://github.com/geffzhang/NanoFabric
對于NanoFabric來說,它集成了很多.net core開源項目,其中包括了Consul + .NET Core + Polly + Ocelot + Exceptionless + IdentityServer,你是否聞到了某種味道!
Polly給我們帶來了什么
對http請求提供重試機制
對指定異常進行特殊的處理
提供了多種策略
程序中的使用
封裝一個方法,對外提供一個委托的參數(shù),把需要進行polly的代碼段輸入進來即可,對于http,數(shù)據(jù)庫,網(wǎng)絡通訊等非常必要,因為這些場景可能存在不穩(wěn)定的因素!polly正好可以幫我們非常友好的解決它,下面的代碼主要實現(xiàn)了對所有異常的跟蹤,然后每1秒重新執(zhí)行一次,可以重試5次!
/// <summary>
? ? ? ? /// polly重試機制
? ? ? ? /// </summary>
? ? ? ? private static HttpResponseMessage retryTwoTimesPolicy(Func<HttpResponseMessage> action)
? ? ? ? {
? ? ? ? ? ? var policy = Policy
? ? ? ? ? ? ? ? .Handle<Exception>()
? ? ? ? ? ? ? ? .WaitAndRetry(
? ? ? ? ? ? ? ? ?5,
? ? ? ? ? ? ? ? ?retryAttempt => TimeSpan.FromSeconds(Math.Pow(1, retryAttempt)),
? ? ? ? ? ? ? ? ?(ex, timer, c, i) =>
? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ?logger.Logger_Info($"執(zhí)行失敗! 重試次數(shù) {c}");
? ? ? ? ? ? ? ? ? ? ?logger.Logger_Info($"異常來自 {ex.GetType().Name}");
? ? ? ? ? ? ? ? ?});
? ? ? ? ? ? return policy.Execute(action);
? ? ? ? }
我們之前的httpHelper請求對象,也可以引入polly機制,全局進行控制!
/// <summary>
? ? ? ? /// GET請求
? ? ? ? /// </summary>
? ? ? ? /// <param name="requestUri">服務地址</param>
? ? ? ? /// <param name="nv">參數(shù)鍵值</param>
? ? ? ? /// <returns></returns>
? ? ? ? public static HttpResponseMessage Get(
? ? ? ? ? ? string requestUri,
? ? ? ? ? ? NameValueCollection nv)
? ? ? ? {
? ? ? ? ? ? try
? ? ? ? ? ? {
? ? ? ? ? ? ? ? return retryTwoTimesPolicy(() =>
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? var result = httpClient.GetAsync(GeneratorUri(requestUri, nv)).Result;
? ? ? ? ? ? ? ? ? ? UnGZip(result);
? ? ? ? ? ? ? ? ? ? return result;
? ? ? ? ? ? ? ? });
? ? ? ? ? ? }
? ? ? ? ? ? catch (Exception ex)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? throw ex;
? ? ? ? ? ? }
? ? ? ? }
自己開兩個api進程,一個是對外提供服務,別一個作為主服務器,被其它進行訪問,當它掛了之后,其實進行可以通過polly進行重試!
感謝各位的閱讀!
微服務來了,但需要我們關(guān)注的點多了!
相關(guān)文章:
API網(wǎng)關(guān)Ocelot 使用Polly 處理部分失敗問題
彈性和瞬態(tài)故障處理庫Polly介紹
原文地址:http://www.cnblogs.com/lori/p/8387205.html
.NET社區(qū)新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com
總結(jié)
以上是生活随笔為你收集整理的Polly组件对微服务场景的价值的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP.NETCore的Kestrel服
- 下一篇: 微软高管解读财报:努力创新云基础架构