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

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

這篇具有很好參考價值的文章主要介紹了【微服務】04-Polly實現(xiàn)失敗重試和限流熔斷。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1. Polly實現(xiàn)失敗重試

1.1 Polly組件包

  • Polly
  • Polly.Extensions.Http
  • Microsoft.Extensions.Http.Polly

1.2 Polly的能力

  • 失敗重試
  • 服務熔斷 ? 部分服務不可用時,可以快速響應熔斷,避免持續(xù)請求不可用服務而導致整個應用程序宕掉
  • 超時處理 ? 請求響應超過設置的時間,可按照預定的操作進行處理
  • 艙壁隔離 ? 為服務定義最大流量和隊列,避免服務應請求量過大而被壓崩
  • 緩存策略 ? 類似AOP為應用嵌入緩存機制,當緩存命中時可以快速響應緩存
  • 失敗降級 ? 當服務不可用時可以響應一個更友好的結果而非報錯
  • 組合策略 ? 將上面的策略組合在一起

1.3 Polly使用步驟

  • 定義要處理的異常類型或返回值
  • 定義要處理動作(重試、熔斷、降級響應等)
  • 使用定義的策略來執(zhí)行代碼

1.4 適合失敗重試的場景

  • 服務“失敗”是暫時的,可自愈的
  • 服務是冪等的,重復調用不會有副作用

場景舉例

  • 網(wǎng)絡閃斷
  • 部分服務節(jié)點異常

1.5 最佳實踐

  • 設置失敗重試次數(shù)
  • 設置帶有步長策略的失敗等待間隔 ? 防止持續(xù)不斷的重試,出現(xiàn)類似DDOS的情況
  • 設置降級響應 ? 重試達到上限時,需要為服務設置降級響應
  • 設置斷路器
 public void ConfigureServices(IServiceCollection services)
 {
 	// HttpClientFactory Polly內(nèi)置的重試策略
	services.AddGrpcClient<OrderGrpc.OrderGrpcClient>(options =>
   {
       options.Address = new Uri("https://localhost:5001");
   })
   .ConfigurePrimaryHttpMessageHandler(provider =>
   {
       var handler = new SocketsHttpHandler();
       handler.SslOptions.RemoteCertificateValidationCallback = (a, b, c, d) => true; //允許無效、或自簽名證書
       return handler;
   }).AddTransientHttpErrorPolicy(p => p.WaitAndRetryForeverAsync(i => TimeSpan.FromSeconds(i * 3)));// 設置響應500或408時重試,不指定次數(shù)直到成功

	// 定義個性化策略
	var reg = services.AddPolicyRegistry();
	
	reg.Add("retryforever", Policy.HandleResult<HttpResponseMessage>(message =>
	{
	    return message.StatusCode == System.Net.HttpStatusCode.Created;
	}).RetryForeverAsync());
	
	// 應用策略
	services.AddHttpClient("orderclient").AddPolicyHandlerFromRegistry("retryforever");
	services.AddHttpClient("orderclientv2").AddPolicyHandlerFromRegistry((registry, message) =>
    {
         return message.Method == HttpMethod.Get ? registry.Get<IAsyncPolicy<HttpResponseMessage>>("retryforever") : Policy.NoOpAsync<HttpResponseMessage>();
     });
 }

2.Polly實現(xiàn)熔斷限流避免雪崩效應

2.1 策略類型

  • 被動策略(異常處理,結果處理)
  • 主動策略(超時處理,斷路器,艙壁隔離,緩存)

被動策略:當服務響應出現(xiàn)一些異?;蚪Y果時進行處理
主動策略:根據(jù)策略實例去判斷是否超時或異常等情況,這是由策略進行主動觸發(fā)的一些操作

2.2 組合策略

  • 降級響應
  • 失敗重試
  • 斷路器
  • 艙壁隔離
    【微服務】04-Polly實現(xiàn)失敗重試和限流熔斷,微服務,NetCore,微服務,.netcore,后端,開發(fā)語言

限流、熔斷策略都是有狀態(tài)的,這指的是在策略中設置的并發(fā)數(shù),隊列數(shù),還有熔斷的采樣時間和吞吐量,錯誤數(shù)這些計數(shù)器的狀態(tài),這些是由一個策略的實例去承載。在對不同服務進行不同的策略定義,單獨計算它的熔斷限流數(shù)值時,就需要單獨定義不同的策略的實例,去完成不同服務之間的定義的隔離

// startup
public void ConfigureServices(IServiceCollection services)
{
	// 熔斷策略
	services.AddHttpClient("orderclientv3").AddPolicyHandler(Policy<HttpResponseMessage>.Handle<HttpRequestException>().CircuitBreakerAsync(
                handledEventsAllowedBeforeBreaking: 10,// 報錯10次后熔斷服務
                durationOfBreak: TimeSpan.FromSeconds(10), // 熔斷時間
                onBreak: (r, t) => { }, // 發(fā)生熔斷后觸發(fā)事件
                onReset: () => { }, // 熔斷恢復后觸發(fā)事件
                onHalfOpen: () => { }// 當熔斷恢復之前進行驗證服務是否可用的請求
                ));
}

//更高級設置
services.AddHttpClient("orderclientv3").AddPolicyHandler(Policy<HttpResponseMessage>.Handle<HttpRequestException>().AdvancedCircuitBreakerAsync(
				// 請求失敗比例占80%時熔斷
                failureThreshold: 0.8,
                
                // 計算請求失敗比例的時間范圍,當前為10秒內(nèi)80%請求失敗
                samplingDuration: TimeSpan.FromSeconds(10),
                
                // 最小吞吐量,在達到100個請求的時候再去計算上去失敗比例,用于請求量小的時候不進行熔斷
                minimumThroughput: 100,
                durationOfBreak: TimeSpan.FromSeconds(20),// 熔斷時長
                onBreak: (r, t) => { }, // 發(fā)生熔斷后觸發(fā)事件
                onReset: () => { },// 熔斷恢復后觸發(fā)事件
                onHalfOpen: () => { }));// 當熔斷恢復之前進行驗證服務是否可用的請求

// 服務降級
var message = new HttpResponseMessage()
{
    Content = new StringContent("{}")
};
var fallback = Policy<HttpResponseMessage>.Handle<BrokenCircuitException>().FallbackAsync(message);

// 重試機制,重試3次,每次等1秒鐘
var retry = Policy<HttpResponseMessage>.Handle<Exception>().WaitAndRetryAsync(3, i => TimeSpan.FromSeconds(1));

// 組合策略
//執(zhí)行順序breakPolicy -> retry -> fallback
var fallbackBreak = Policy.WrapAsync(fallback, retry, breakPolicy);
services.AddHttpClient("httpv3").AddPolicyHandler(fallbackBreak);

// 限流
var bulk = Policy.BulkheadAsync<HttpResponseMessage>(
	// 最大請求數(shù)
	maxParallelization: 30, 
	
	// 最大隊列數(shù),指的是達到最大請求數(shù)后又多少個請求可以被放到隊列中;
	// 若不設置這個值,達到最大請求數(shù)后程序會拋出異常,如果隊列數(shù)超出最大隊列數(shù),也會拋出異常
    maxQueuingActions: 20, 
    // 請求被限流時執(zhí)行的處理方式
    onBulkheadRejectedAsync: contxt => Task.CompletedTask
   );

// 限流出現(xiàn)異常時,響應降級
var message2 = new HttpResponseMessage()
{
   Content = new StringContent("{}")
};
var fallback2 = Policy<HttpResponseMessage>.Handle<BulkheadRejectedException>().FallbackAsync(message);
// 組合策略
var fallbackbulk = Policy.WrapAsync(fallback2, bulk);
services.AddHttpClient("httpv4").AddPolicyHandler(fallbackbulk);


當服務發(fā)生熔斷時,策略會拋出CircuitBreakerException異常,也就是熔斷異常文章來源地址http://www.zghlxwxcb.cn/news/detail-675985.html

到了這里,關于【微服務】04-Polly實現(xiàn)失敗重試和限流熔斷的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關文章

  • 封裝axios請求重試和路由切換時請求取消

    封裝axios請求重試和路由切換時請求取消

    請求重試函數(shù):這里注意兩個變量__retryCount 和retry分別代表當前次數(shù)和重試次數(shù)。如果請求中沒有配置retry則正常進行不會進行重試。 請求取消我這里的場景是路由切換時,將上次路由全部取消也可以配置部分取消。注意變量noCancel,他來控制那些不需要被取消。 回顧axios請

    2024年02月21日
    瀏覽(24)
  • RocketMQ教程-(5)-功能特性-消息發(fā)送重試和流控機制

    本文為您介紹 Apache RocketMQ 的消息發(fā)送重試機制和消息流控機制。 消息發(fā)送重試 Apache RocketM Q的消息發(fā)送重試機制主要為您解答如下問題: 部分節(jié)點異常是否影響消息發(fā)送? 請求重試是否會阻塞業(yè)務調用? 請求重試會帶來什么不足? 消息流控 Apache RocketMQ 的流控機制主要為

    2024年02月15日
    瀏覽(26)
  • 1 vue防抖和限流

    1 vue防抖和限流

    防抖(Debouncing)是一種前端開發(fā)中常用的技術,用于限制函數(shù)的執(zhí)行頻率。在防抖的機制下,一個函數(shù)在一定時間內(nèi)只會執(zhí)行一次,即使它被頻繁地調用。 具體來說,防抖的實現(xiàn)方式是設置一個定時器,在每次函數(shù)被調用時,先清除之前的定時器,然后重新設置一個新的定

    2024年01月19日
    瀏覽(13)
  • 淺談RabbitMQ消費端ACK和限流

    淺談RabbitMQ消費端ACK和限流

    消費者 ACK 和 消費端限流 ack指? Acknowledge ,確認。 表示消費端收到消息后的確認方式。 有三種確認方式: ? 自動確認:acknowledge=\\\" none \\\" ? 手動確認:acknowledge=\\\" manual \\\" ? 根據(jù)異常情況確認:acknowledge=\\\" auto \\\",(這種方式使用麻煩,不作講解) 其中自動確認是指,當消息一

    2024年02月19日
    瀏覽(20)
  • 服務高可用保障:服務限流,Nginx實現(xiàn)服務限流

    服務高可用保障:服務限流,Nginx實現(xiàn)服務限流

    一、前言 1.1什么是限流? 限流存在于高可用服務中。 用于高可用的保護手段,主要包括:緩存,降級,限流 限流:只允許指定的事件進入系統(tǒng),超過的部分將被拒絕服務,排隊或者降級處理。 1.2為什么需要限流? 一:服務扛不住壓力了 二:因為資源的稀缺或者處于安全防

    2024年02月08日
    瀏覽(19)
  • RabbitMQ的消費者處理消息失敗后可以重試,重試4次仍然失敗發(fā)送到死信隊列。

    RabbitMQ的消費者處理消息失敗后可以重試,重試4次仍然失敗發(fā)送到死信隊列。

    生產(chǎn)者發(fā)送消息時采用雪花算法給消息設置唯一的消息id,消費者接收消息處理失敗時,根據(jù)消息的唯一id統(tǒng)計失敗次數(shù),若沒有達到失敗次數(shù)限制,則讓消息重回隊列(在開啟手動簽收的前提),此時隊列會再次給消費者發(fā)送消息;若達到失敗次數(shù)限制,則讓消息不重回隊列,

    2024年02月07日
    瀏覽(92)
  • kafka消費失敗重試機制

    1.kafka批量消費消息,使用containerFactory 監(jiān)聽消費失敗消息? 2.使用RetryingBatchErrorHandler 指定批量消費時失敗消息的重試次數(shù)和時間,如果不是批量消費,則使用RetryingErrorHandler來指定重試次數(shù)和間隔時間

    2024年02月11日
    瀏覽(20)
  • 服務限流實現(xiàn)方案

    服務限流怎么做 限流算法 計數(shù)器 每個單位時間能通過的請求數(shù)固定,超過閾值直接拒絕。 通過維護一個單位時間內(nèi)的計數(shù)器,每次請求計數(shù)器加1,當單位時間內(nèi)計數(shù)器累加到大于設定的閾值,則之后的請求都被絕,直到單位時間已經(jīng)過去,再將計數(shù)器重置為零。但可能會

    2024年01月23日
    瀏覽(21)
  • 手寫服務限流6種實現(xiàn)方式

    手寫服務限流6種實現(xiàn)方式

    ImportNew? 2023-05-29 11:31 ? 發(fā)表于上海 以下文章來源于碼農(nóng)參上?,作者Dr Hydra 碼農(nóng)參上. 專注后端技術分享,有趣、深入、直接,與你聊聊技術。 今天來和大家聊聊服務的限流。 服務限流,是指通過控制請求的速率或次數(shù)來達到保護服務的目的,在微服務中,我們通常會將它

    2024年02月07日
    瀏覽(18)
  • ubuntu22.04 服務器 SSH 密鑰登錄失敗

    SSH密鑰登錄,是將SSH公鑰寫入服務端的 ~/.ssh/authorized_keys 文件中。 今天裝了ubuntu22.04的系統(tǒng),按照以往操作,在服務端配置了SSH公鑰之后,發(fā)現(xiàn)竟然無法登錄。 首先查看OpenSSH版本: 查看 /var/log/auth.log 文件,發(fā)現(xiàn)有如下錯誤信息: 通過錯誤信息來看,填入 authorized_keys 文件的

    2024年01月18日
    瀏覽(21)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包