diff --git a/src/clients/Elsa.Api.Client/Extensions/DependencyInjectionExtensions.cs b/src/clients/Elsa.Api.Client/Extensions/DependencyInjectionExtensions.cs index 416962a0b..03c70efea 100644 --- a/src/clients/Elsa.Api.Client/Extensions/DependencyInjectionExtensions.cs +++ b/src/clients/Elsa.Api.Client/Extensions/DependencyInjectionExtensions.cs @@ -90,7 +90,13 @@ public static class DependencyInjectionExtensions { var builder = services.AddRefitClient(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)); + } } /// diff --git a/src/clients/Elsa.Api.Client/Options/ElsaClientBuilderOptions.cs b/src/clients/Elsa.Api.Client/Options/ElsaClientBuilderOptions.cs index 998b6d499..264fd0637 100644 --- a/src/clients/Elsa.Api.Client/Options/ElsaClientBuilderOptions.cs +++ b/src/clients/Elsa.Api.Client/Options/ElsaClientBuilderOptions.cs @@ -33,4 +33,23 @@ public class ElsaClientBuilderOptions /// Gets or sets a delegate that can be used to configure the HTTP client builder. /// public Action ConfigureHttpClientBuilder { get; set; } = _ => { }; + + /// + /// Number of automatic retries for transient failures, including following categories: + /// + /// Network failures(as ) + /// HTTP 5XX status codes(server errors) + /// HTTP 408 status code(request timeout) + /// + /// Default value is 3. + /// Set the value to 0 to disable automatic retry. + /// + public int TransientHttpErrorRetryCount { get; set; } = 3; + + /// + /// 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)). + /// + public Func SleepDurationProvider = retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)); } \ No newline at end of file