New options to control retry logic for transient failures (#4750)
* Add an option to control the number of automatic retries for transient failures. * Add SleepDurationProvider option for ElsaClientBuilderOptions --------- Co-authored-by: admin <admin@admin.com>
This commit is contained in:
parent
480b726c9d
commit
99dca9b1ba
|
|
@ -90,7 +90,13 @@ public static class DependencyInjectionExtensions
|
|||
{
|
||||
var builder = services.AddRefitClient<T>(CreateRefitSettings, typeof(T).Name).ConfigureHttpClient(ConfigureElsaApiHttpClient);
|
||||
httpClientBuilderOptions?.ConfigureHttpClientBuilder?.Invoke(builder);
|
||||
builder.AddTransientHttpErrorPolicy(p => p.WaitAndRetryAsync(3, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt))));
|
||||
|
||||
var retryCount = httpClientBuilderOptions?.TransientHttpErrorRetryCount ?? 0;
|
||||
var sleepDurationProvider = httpClientBuilderOptions?.SleepDurationProvider ?? (retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)));
|
||||
if (retryCount > 0)
|
||||
{
|
||||
builder.AddTransientHttpErrorPolicy(p => p.WaitAndRetryAsync(retryCount, sleepDurationProvider));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
|||
|
|
@ -33,4 +33,23 @@ public class ElsaClientBuilderOptions
|
|||
/// Gets or sets a delegate that can be used to configure the HTTP client builder.
|
||||
/// </summary>
|
||||
public Action<IHttpClientBuilder> ConfigureHttpClientBuilder { get; set; } = _ => { };
|
||||
|
||||
/// <summary>
|
||||
/// Number of automatic retries for transient failures, including following categories:
|
||||
/// <list type = "bullet" >
|
||||
/// <item><description> Network failures(as <see cref = "HttpRequestException" />)</description></item>
|
||||
/// <item><description>HTTP 5XX status codes(server errors)</description></item>
|
||||
/// <item><description>HTTP 408 status code(request timeout)</description></item>
|
||||
/// </list>
|
||||
/// Default value is 3.
|
||||
/// Set the value to 0 to disable automatic retry.
|
||||
/// </summary>
|
||||
public int TransientHttpErrorRetryCount { get; set; } = 3;
|
||||
|
||||
/// <summary>
|
||||
/// The function that provides the duration to wait for for each transient failure retry attempt.
|
||||
/// This option is useless if TransientHttpErrorRetryCount is set to 0.
|
||||
/// Default strategy is exponential backoff: TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)).
|
||||
/// </summary>
|
||||
public Func<int, TimeSpan> SleepDurationProvider = retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt));
|
||||
}
|
||||
Loading…
Reference in a new issue