ResiliencePipelineBuilder
The ResiliencePipelineBuilder
class provides a fluent API for constructing resilience pipelines with multiple strategies.
Overview
The builder pattern allows you to chain multiple resilience strategies together in a readable and intuitive way. Each strategy is applied in the order it's added to the builder.
class ResiliencePipelineBuilder {
ResiliencePipelineBuilder();
ResiliencePipelineBuilder addRetry(RetryStrategyOptions options);
ResiliencePipelineBuilder addCircuitBreaker(CircuitBreakerStrategyOptions options);
ResiliencePipelineBuilder addTimeout(Duration timeout);
ResiliencePipelineBuilder addTimeoutStrategy(TimeoutStrategyOptions options);
ResiliencePipelineBuilder addFallback(FallbackStrategyOptions options);
ResiliencePipelineBuilder addHedging(HedgingStrategyOptions options);
ResiliencePipelineBuilder addRateLimiter(RateLimiterStrategyOptions options);
ResiliencePipelineBuilder addStrategy(ResilienceStrategy strategy);
ResiliencePipeline build();
}
Constructor
ResiliencePipelineBuilder()
Creates a new resilience pipeline builder instance.
final builder = ResiliencePipelineBuilder();
Methods
addRetry(RetryStrategyOptions options)
Adds a retry strategy to the pipeline.
Parameters:
options
- Configuration options for the retry strategy
Returns: ResiliencePipelineBuilder
for method chaining
builder.addRetry(RetryStrategyOptions(
maxRetryAttempts: 3,
delay: Duration(seconds: 1),
backoffType: DelayBackoffType.exponential,
));
addCircuitBreaker(CircuitBreakerStrategyOptions options)
Adds a circuit breaker strategy to the pipeline.
Parameters:
options
- Configuration options for the circuit breaker strategy
Returns: ResiliencePipelineBuilder
for method chaining
builder.addCircuitBreaker(CircuitBreakerStrategyOptions(
failureRatio: 0.5,
minimumThroughput: 10,
samplingDuration: Duration(seconds: 30),
breakDuration: Duration(seconds: 60),
));
addTimeout(Duration timeout)
Adds a timeout strategy to the pipeline with the specified duration.
Parameters:
timeout
- Maximum duration to allow for execution
Returns: ResiliencePipelineBuilder
for method chaining
builder.addTimeout(Duration(seconds: 30));
addTimeoutStrategy(TimeoutStrategyOptions options)
Adds a timeout strategy to the pipeline with advanced configuration.
Parameters:
options
- Configuration options for the timeout strategy
Returns: ResiliencePipelineBuilder
for method chaining
builder.addTimeoutStrategy(TimeoutStrategyOptions(
timeout: Duration(seconds: 30),
onTimeout: (context, args) {
print('Operation timed out after ${args.timeout}');
},
));
addFallback(FallbackStrategyOptions options)
Adds a fallback strategy to the pipeline.
Parameters:
options
- Configuration options for the fallback strategy
Returns: ResiliencePipelineBuilder
for method chaining
builder.addFallback(FallbackStrategyOptions<String>(
shouldHandle: (outcome) => outcome.hasException,
fallbackAction: (context, args) async => 'fallback-value',
));
addHedging(HedgingStrategyOptions options)
Adds a hedging strategy to the pipeline.
Parameters:
options
- Configuration options for the hedging strategy
Returns: ResiliencePipelineBuilder
for method chaining
builder.addHedging(HedgingStrategyOptions(
maxHedgedAttempts: 2,
delay: Duration(milliseconds: 100),
));
addRateLimiter(RateLimiterStrategyOptions options)
Adds a rate limiter strategy to the pipeline.
Parameters:
options
- Configuration options for the rate limiter strategy
Returns: ResiliencePipelineBuilder
for method chaining
builder.addRateLimiter(RateLimiterStrategyOptions(
permitLimit: 100,
window: Duration(seconds: 60),
));
addStrategy(ResilienceStrategy strategy)
Adds a custom resilience strategy to the pipeline.
Parameters:
strategy
- A custom resilience strategy implementation
Returns: ResiliencePipelineBuilder
for method chaining
final customStrategy = MyCustomStrategy();
builder.addStrategy(customStrategy);
build()
Builds and returns the configured resilience pipeline.
Returns: ResiliencePipeline
- The constructed resilience pipeline
final pipeline = builder.build();
Usage Examples
Basic Pipeline
final pipeline = ResiliencePipelineBuilder()
.addRetry(RetryStrategyOptions(maxRetryAttempts: 3))
.addTimeout(Duration(seconds: 30))
.build();
Complex Pipeline
final pipeline = ResiliencePipelineBuilder()
.addRetry(RetryStrategyOptions(
maxRetryAttempts: 3,
delay: Duration(seconds: 1),
backoffType: DelayBackoffType.exponential,
shouldHandle: (outcome) => outcome.hasException,
))
.addCircuitBreaker(CircuitBreakerStrategyOptions(
failureRatio: 0.5,
minimumThroughput: 10,
onOpened: (context, args) => print('Circuit breaker opened'),
onClosed: (context, args) => print('Circuit breaker closed'),
))
.addTimeout(Duration(seconds: 30))
.addFallback(FallbackStrategyOptions<String>(
shouldHandle: (outcome) => outcome.hasException,
fallbackAction: (context, args) async => 'Service unavailable',
))
.build();
Pipeline with Rate Limiting
final pipeline = ResiliencePipelineBuilder()
.addRateLimiter(RateLimiterStrategyOptions(
permitLimit: 100,
window: Duration(minutes: 1),
))
.addRetry(RetryStrategyOptions(maxRetryAttempts: 2))
.addTimeout(Duration(seconds: 10))
.build();
Strategy Execution Order
Strategies are executed in the order they are added to the builder:
- Rate Limiter - Controls request rate
- Retry - Handles transient failures
- Circuit Breaker - Prevents cascading failures
- Timeout - Limits execution time
- Hedging - Parallel execution for latency
- Fallback - Provides alternative responses
Choose the order carefully based on your resilience requirements and the nature of failures you want to handle.