Skip to content

Commit a1fd2fb

Browse files
committed
Enhanced default resilient producer options
1 parent 53aa3db commit a1fd2fb

File tree

2 files changed

+16
-3
lines changed

2 files changed

+16
-3
lines changed

src/DotPulsar.Extensions.Resiliency/Extensions/PulsarResilientExtensions.cs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using DotPulsar.Internal;
44
using Polly;
55
using Polly.Retry;
6+
using Polly.Timeout;
67

78
namespace DotPulsar.Extensions;
89

@@ -37,7 +38,19 @@ public static ValueTask Process<TMessage>(
3738
CancellationToken cancellationToken = default)
3839
=> Process(consumer, processor, resiliencePipeline, new ProcessingOptions(), failureHandler, cancellationToken);
3940

40-
public static ResiliencePipelineBuilder AddRetryProducer(this ResiliencePipelineBuilder pipelineBuilder, Action<RetryStrategyOptions>? configure = null) {
41+
public static ResiliencePipelineBuilder AddResilientProducer(this ResiliencePipelineBuilder pipelineBuilder, Action<RetryStrategyOptions>? configureRetry = null, Action<TimeoutStrategyOptions>? configureTimeout = null) {
42+
return pipelineBuilder.AddProducerRetry(configureRetry).AddProducerTimeout(configureTimeout);
43+
}
44+
45+
public static ResiliencePipelineBuilder AddProducerTimeout(this ResiliencePipelineBuilder pipelineBuilder, Action<TimeoutStrategyOptions>? configure = null) {
46+
var options = new TimeoutStrategyOptions {
47+
Timeout = TimeSpan.FromSeconds(30)
48+
};
49+
configure?.Invoke(options);
50+
return pipelineBuilder.AddTimeout(options);
51+
}
52+
53+
public static ResiliencePipelineBuilder AddProducerRetry(this ResiliencePipelineBuilder pipelineBuilder, Action<RetryStrategyOptions>? configure = null) {
4154
var options = new RetryStrategyOptions {
4255
MaxRetryAttempts = 10,
4356
Delay = TimeSpan.FromMilliseconds(100),
@@ -76,7 +89,7 @@ public static IProducer<TMessage> CreateResilient<TMessage>(this IProducerBuilde
7689
if (configurePipelineBuilder != null) {
7790
configurePipelineBuilder(pipelineBuilder);
7891
} else {
79-
pipelineBuilder.AddRetryProducer();
92+
pipelineBuilder.AddResilientProducer();
8093
}
8194

8295
return CreateResilient(producerBuilder, pipelineBuilder.Build());

src/DotPulsar.Extensions.Resiliency/Internal/ResilientProducer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

1919
namespace DotPulsar.Internal;
2020

21-
internal sealed class ResilientProducer<TMessage> : IProducer<TMessage>
21+
public sealed class ResilientProducer<TMessage> : IProducer<TMessage>
2222
{
2323
private readonly IProducerBuilder<TMessage> producerBuilder;
2424
private readonly ResiliencePipeline resiliencePipeline;

0 commit comments

Comments
 (0)