簡體   English   中英

如何使用polly在.Net核心中等待和重試的動態抖動退避

[英]How to have dynamic Jittered Back-off for wait and retry in .Net core using polly

我正在使用抖動實現等待並重試,見下文。 在下面的示例中,延遲是相同的。

如何使延遲動態化?

var delay = Backoff.DecorrelatedJitterBackoffV2(medianFirstRetryDelay: TimeSpan.FromSeconds(1), retryCount: 3);
var retryPolicy = Policy.Handle<FooException>().WaitAndRetryAsync(delay);

在我的項目中,我有 Azure function https://docs.microsoft.com/en-us/azure/azure-jection/functions-

public class Startup : FunctionsStartup
{
    public override void Configure(IFunctionsHostBuilder builder)
    {
        var configuration = builder.GetContext().Configuration;
        builder.Services.RegisterService(configuration);
    }
}
public static IHttpClientBuilder RegisterService(this IServiceCollection serviceCollection,IConfiguration configuration)
{
    return serviceCollection.AddHttpClient<IService, Service()
               .AddPolicyHandler(RetryPolicyHandler.GetRetryPolicy())
}

public static IAsyncPolicy<HttpResponseMessage> GetRetryPolicy(IConfiguration configuration)
{
    var delay =Backoff.DecorrelatedJitterBackoffV2(medianFirstRetryDelay: TimeSpan.FromSeconds(1), retryCount: 3);
    return HttpPolicyExtensions.HandleTransientHttpError().WaitAndRetryAsync(delay);
}

不,延遲一樣。

DecorrelatedJitterBackoffV2將返回一個IEnumerable<TimeSpan>所以,請發出這個命令:

var sleepDurations = delay.ToArray();

並使用調試可視化器查看它們的不同之處。 如果你多次運行這個實驗,延遲總是不同的。

第一次運行 第二輪

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM