国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

.NET彈性和瞬時處理庫Polly:理解并實現(xiàn)七種策略

這篇具有很好參考價值的文章主要介紹了.NET彈性和瞬時處理庫Polly:理解并實現(xiàn)七種策略。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Polly 是一個 .NET 彈性和瞬態(tài)故障處理庫,允許開發(fā)人員以 Fluent 和線程安全的方式來實現(xiàn)重試、斷路、超時、隔離和回退策略。

Polly 的七種策略介紹

重試(Retry): 當出現(xiàn)故障時自動進行重試
斷路(Circuit-breaker):當系統(tǒng)遇到嚴重問題時,快速回饋失敗比讓用戶/調(diào)用者等待要好,限制系統(tǒng)出錯的體量,有助于系統(tǒng)恢復。
超時(Timeout):當系統(tǒng)超過一定時間的等待,我們就幾乎可以判斷不可能會有成功的結(jié)果,直接去干別的事情。
隔離(Bulkhead Isolation):當系統(tǒng)的一處出現(xiàn)故障時,可能促發(fā)多個失敗的調(diào)用,很容易耗盡主機的資源(如 CPU)。下游系統(tǒng)出現(xiàn)故障可能導致上游的故障的調(diào)用,甚至可能蔓延到導致系統(tǒng)崩潰。所以要將可控的操作限制在一個固定大小的資源池中,以隔離有潛在可能相互影響的操作。
回退(Fallback):有些錯誤無法避免,就要有備用的方案。這個就像瀏覽器不支持一些新的 CSS 特性就要額外引用一個 polyfill 一樣。一般情況,當無法避免的錯誤發(fā)生時,我們要有一個合理的返回來代替失敗。
緩存(Cache):一般我們會把頻繁使用且不會怎么變化的資源緩存起來,以提高系統(tǒng)的響應(yīng)速度。如果不對緩存資源的調(diào)用進行封裝,那么我們調(diào)用的時候就要先判斷緩存中有沒有這個資源,有的話就從緩存返回,否則就從資源存儲的地方(比如數(shù)據(jù)庫)獲取后緩存起來,再返回,而且有時還要考慮緩存過期和如何更新緩存的問題。Polly 提供了緩存策略的支持,使得問題變得簡單。
策略包(Policy Wrap):一種操作會有多種不同的故障,而不同的故障處理需要不同的策略。這些不同的策略必須包在一起,作為一個策略包,才能應(yīng)用在同一種操作上。這就是文章開頭說的 Polly 的彈性,即各種不同的策略能夠靈活地組合起來。

通過NuGet安裝Polly類庫:

.NET,Polly,彈性處理,瞬時故障處理

官方項目地址: https://github.com/App-vNext/Polly 

代碼實現(xiàn)

    /// <summary>
    /// FallBack => 當出現(xiàn)故障,則進入降級動作
    /// </summary>
    public static void Case1()
    {
        ISyncPolicy policy = Policy.Handle<ArgumentException>()
            .Fallback(() =>
            {
                Console.WriteLine("Error occured");
            });

        policy.Execute(() =>
        {
            Console.WriteLine("Job Start");

            throw new ArgumentException("Hello Polly!");

            Console.WriteLine("Job End");
        });
    }

    /// <summary>
    /// Retry => 重試
    /// </summary>
    public static void Case2()
    {
        ISyncPolicy policy = Policy.Handle<Exception>().Retry(3);

        try
        {
            policy.Execute(() =>
            {
                Console.WriteLine("Job Start");
                if (DateTime.Now.Second % 10 != 0)
                {
                    throw new Exception("Special error occured");
                }
                Console.WriteLine("Job End");
            });
        }
        catch (Exception ex)
        {
            Console.WriteLine("There's one unhandled exception : " + ex.Message);
        }
    }

    /// <summary>
    /// CircuitBreaker => 短路保護
    /// </summary>
    public static void Case3()
    {
        // Stop for 10s after retry 6 times
        ISyncPolicy policy = Policy.Handle<Exception>()
            .CircuitBreaker(6, TimeSpan.FromSeconds(10));

        while (true)
        {
            try
            {
                policy.Execute(() =>
                {
                    Console.WriteLine("Job Start");
                    throw new Exception("Special error occured");
                    Console.WriteLine("Job End");
                });
            }
            catch (Exception ex)
            {
                Console.WriteLine("There's one unhandled exception : " + ex.Message);
            }

            Thread.Sleep(500);
        }
    }

    /// <summary>
    /// Timeout 與 Wrap => Wrap是指策略封裝,可以把多個ISyncPolicy合并到一起執(zhí)行。Timeout則是指超時處理,但是超時策略一般不能直接使用,而是其其他策略封裝到一起使用。
    /// </summary>
    public static void Case4()
    {
        try
        {
            ISyncPolicy policyException = Policy.Handle<TimeoutRejectedException>()
                .Fallback(() =>
                {
                    Console.WriteLine("Fallback");
                });
            ISyncPolicy policyTimeout = Policy.Timeout(3, Polly.Timeout.TimeoutStrategy.Pessimistic);
            ISyncPolicy mainPolicy = Policy.Wrap(policyTimeout, policyException);
            mainPolicy.Execute(() =>
            {
                Console.WriteLine("Job Start...");
                Thread.Sleep(5000);
                throw new Exception(); 
                Console.WriteLine("Job End...");
            });
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Unhandled exception : {ex.GetType()} : {ex.Message}");
        }
    }

    /// <summary>
    /// 異步方法
    /// </summary>
    public static async void Case5()
    {
        var policy = Policy<byte[]>.Handle<Exception>()
            .FallbackAsync(async c =>
            {
                Console.WriteLine("Executed Error!");
                return new byte[0];
            }, async r =>
            {
                Console.WriteLine(r.Exception);
            });

        policy.WrapAsync(Policy.TimeoutAsync(5, TimeoutStrategy.Pessimistic,
         async (context, timespan, task) =>
         {
             Console.WriteLine("Timeout!");
         }));

        var bytes = await policy.ExecuteAsync(async () =>
        {
            Console.WriteLine("Start Job");
            HttpClient httpClient = new HttpClient();
            var result = await httpClient.GetByteArrayAsync("https://img-blog.yssmx.com/img_convert/50f2b9069f40b88ea8348492d56abb87.png");
            Console.WriteLine("Finish Job");

            return result;
        });

        Console.WriteLine($"Length of bytes : {bytes.Length}");
    }

調(diào)用示例

Case1:

.NET,Polly,彈性處理,瞬時故障處理

Case2: 

.NET,Polly,彈性處理,瞬時故障處理 

 Case3:

.NET,Polly,彈性處理,瞬時故障處理文章來源地址http://www.zghlxwxcb.cn/news/detail-812069.html

到了這里,關(guān)于.NET彈性和瞬時處理庫Polly:理解并實現(xiàn)七種策略的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【微服務(wù)】04-Polly實現(xiàn)失敗重試和限流熔斷

    【微服務(wù)】04-Polly實現(xiàn)失敗重試和限流熔斷

    1.1 Polly組件包 Polly Polly.Extensions.Http Microsoft.Extensions.Http.Polly 1.2 Polly的能力 失敗重試 服務(wù)熔斷 ? 部分服務(wù)不可用時,可以快速響應(yīng)熔斷,避免持續(xù)請求不可用服務(wù)而導致整個應(yīng)用程序宕掉 超時處理 ? 請求響應(yīng)超過設(shè)置的時間,可按照預定的操作進行處理 艙壁隔離 ? 為服

    2024年02月11日
    瀏覽(26)
  • 彈性數(shù)據(jù)庫連接池探活策略調(diào)研(一)——HikariCP

    彈性數(shù)據(jù)庫連接池探活策略調(diào)研(一)——HikariCP

    數(shù)據(jù)庫連接建立是比較昂貴的操作(至少對于 OLTP),不僅要建立 TCP 連接外還需要進行連接鑒權(quán)操作,所以客戶端通常會把數(shù)據(jù)庫連接保存到連接池中進行復用。連接池維護到彈性數(shù)據(jù)庫(JED)的長連接,彈性數(shù)據(jù)庫默認不會主動關(guān)閉客戶端連接(除非報錯),但一般客戶端

    2024年02月10日
    瀏覽(15)
  • 微服務(wù)應(yīng)用視角解讀如何選擇K8S的彈性策略

    微服務(wù)應(yīng)用視角解讀如何選擇K8S的彈性策略

    微服務(wù)架構(gòu)的出現(xiàn),拆分了龐大的單體應(yīng)用,讓業(yè)務(wù)之間的開發(fā)與協(xié)作變得更加靈活。當面臨業(yè)務(wù)流量增加的場景時,往往需要對一些應(yīng)用組件進行擴容。K8S在應(yīng)用層面提供了HPA,圍繞HPA開源社區(qū)延伸出了KEDA這樣的彈性組件,為微服務(wù)應(yīng)用以業(yè)務(wù)指標執(zhí)行彈性策略提供了實現(xiàn)

    2024年02月02日
    瀏覽(16)
  • 機器學習之彈性網(wǎng)絡(luò)(Elastic Net)

    代碼原文 下面代碼參考scikit-learn中文社區(qū),鏈接在上面。 但是由于scikit-learn中文社區(qū)上的代碼有些地方跑不通,故對此代碼做了修改,輸出結(jié)果與社區(qū)中顯示的結(jié)果相同。 對彈性網(wǎng)絡(luò)進行簡單的介紹: ElasticNet是一個訓練時同時用?1和?2范數(shù)進行正則化的線性回歸模型,

    2024年02月14日
    瀏覽(23)
  • 【能量算子】評估 EEG 中的瞬時能量:非負、頻率加權(quán)能量算子(Python&Matlab代碼實現(xiàn))

    【能量算子】評估 EEG 中的瞬時能量:非負、頻率加權(quán)能量算子(Python&Matlab代碼實現(xiàn))

    ???????? 歡迎來到本博客 ???????? ??博主優(yōu)勢: ?????? 博客內(nèi)容盡量做到思維縝密,邏輯清晰,為了方便讀者。 ?? 座右銘: 行百里者,半于九十。 ?????? 本文目錄如下: ?????? 目錄 ??1 概述 ??2 運行結(jié)果 ??3?參考文獻 ??4 Python、Matlab代碼實現(xiàn)

    2024年02月08日
    瀏覽(15)
  • 一文理解云計算中的彈性伸縮

    作者:禪與計算機程序設(shè)計藝術(shù) “云計算”已經(jīng)成為熱門話題。從最早的小型機到現(xiàn)在的大型集群服務(wù)器、分布式系統(tǒng),云計算越來越受到青睞,對企業(yè)業(yè)務(wù)快速響應(yīng)和創(chuàng)新發(fā)展,帶動著新一代信息化服務(wù)的革命。但同時,云計算也面臨著新的挑戰(zhàn)。在面對海量數(shù)據(jù)時如何處

    2024年02月09日
    瀏覽(21)
  • 4.設(shè)計模式之后七種模式后11種模式命令訪問者迭代器發(fā)布訂閱中介者忘備錄解釋器狀態(tài)策略職責鏈和空模式

    4.設(shè)計模式之后七種模式后11種模式命令訪問者迭代器發(fā)布訂閱中介者忘備錄解釋器狀態(tài)策略職責鏈和空模式

    1.命令(command)模式 不知道命令接收者(對象)是誰,支持撤銷 (接受者 間接調(diào)用執(zhí)行 的具體行為) 命令調(diào)用者和接收者解耦 //只要實現(xiàn)命令接口即可 (就是客戶端給個命令,然后命令類傳給接收類執(zhí)行) 優(yōu)點和缺點 容易撤銷操作 命令隊列可以多線程操作 增加過多的命令類 空命令也

    2024年02月12日
    瀏覽(96)
  • 【騰訊云 TDSQL-C Serverless 產(chǎn)品測評】深度實測TDSQL-C Serverless 彈性伸縮策略及穩(wěn)定性

    【騰訊云 TDSQL-C Serverless 產(chǎn)品測評】深度實測TDSQL-C Serverless 彈性伸縮策略及穩(wěn)定性

    Serverless 數(shù)據(jù)庫作為近幾年云原生數(shù)據(jù)庫領(lǐng)域的重要發(fā)展方向,自 2018 年 AWS 率先推出 Aurora Serverless MySQL 服務(wù),打響 Serverless 數(shù)據(jù)庫之戰(zhàn)的第一槍以來,各大云平臺廠商一直在該領(lǐng)域不斷深耕探索。9 月 7 日,在 2023 騰訊全球數(shù)字生態(tài)大會云原生數(shù)據(jù)庫技術(shù)演進與實踐專場上,

    2024年02月08日
    瀏覽(19)
  • ASP.Net實現(xiàn)海鮮添加(三層架構(gòu),異常處理)

    ASP.Net實現(xiàn)海鮮添加(三層架構(gòu),異常處理)

    點擊啟動生成頁面 點擊添加跳轉(zhuǎn)新界面 ?此處設(shè)置文本框多行 點擊Button添加 下圖是三層架構(gòu)列表,Models里面有模擬數(shù)據(jù)庫中列的類,DAL中有DBHelper和service,BLL中有BllManager文件用于ui界面直接調(diào)用 建照片文件圖片,數(shù)據(jù)夾用于展示庫存地址? DAL引用Models文件,BLL引用DAL和Mode

    2024年02月03日
    瀏覽(12)
  • 阿里云彈性云桌面安裝失敗問題解決記錄(.net framework 4.6.2 or later:Error Code: 12029)

    阿里云彈性云桌面安裝失敗問題解決記錄(.net framework 4.6.2 or later:Error Code: 12029)

    1,問題 圖像顯示客戶端安裝錯誤 ? ? 然后我就手動下載了,這個文件 下載好之后是這個文件 ? ? 然后安裝一下就報了這個錯誤 .net framework 4.6.2 or later:Error Code: 12029 這個問題是.net framework 4.6.2文件有問題,把他重新安裝就好了 然后又發(fā)現(xiàn).net framework 4.6.2安裝不了 解決了這個

    2024年02月06日
    瀏覽(16)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包