Class: Fizzy::ResilienceConfig

Inherits:
Object
  • Object
show all
Defined in:
lib/fizzy/resilience.rb

Overview

Configuration container for resilience patterns.

Bundles circuit breaker, bulkhead, and rate limiter settings into a single configuration object.

Examples:

resilience = Fizzy::ResilienceConfig.new(
  circuit_breaker: { threshold: 5, timeout: 30 },
  bulkhead: { max_concurrent: 10, timeout: 5 },
  rate_limiter: { rate: 10, burst: 20 }
)

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(circuit_breaker: nil, bulkhead: nil, rate_limiter: nil) ⇒ ResilienceConfig

Returns a new instance of ResilienceConfig.

Parameters:

  • circuit_breaker (Hash, nil) (defaults to: nil)

    CircuitBreaker options

  • bulkhead (Hash, nil) (defaults to: nil)

    Bulkhead options

  • rate_limiter (Hash, nil) (defaults to: nil)

    RateLimiter options



28
29
30
31
32
# File 'lib/fizzy/resilience.rb', line 28

def initialize(circuit_breaker: nil, bulkhead: nil, rate_limiter: nil)
  @circuit_breaker = circuit_breaker ? CircuitBreaker.new(**circuit_breaker) : nil
  @bulkhead = bulkhead ? Bulkhead.new(**bulkhead) : nil
  @rate_limiter = rate_limiter ? RateLimiter.new(**rate_limiter) : nil
end

Instance Attribute Details

#bulkheadBulkhead? (readonly)

Returns:



20
21
22
# File 'lib/fizzy/resilience.rb', line 20

def bulkhead
  @bulkhead
end

#circuit_breakerCircuitBreaker? (readonly)

Returns:



17
18
19
# File 'lib/fizzy/resilience.rb', line 17

def circuit_breaker
  @circuit_breaker
end

#rate_limiterRateLimiter? (readonly)

Returns:



23
24
25
# File 'lib/fizzy/resilience.rb', line 23

def rate_limiter
  @rate_limiter
end

Instance Method Details

#call { ... } ⇒ Object

Wraps a block with all configured resilience patterns.

Execution order: rate_limiter -> bulkhead -> circuit_breaker -> block

Yields:

  • the operation to protect

Returns:

  • the result of the block



40
41
42
43
44
45
# File 'lib/fizzy/resilience.rb', line 40

def call(&block)
  block = wrap_with_circuit_breaker(block) if @circuit_breaker
  block = wrap_with_bulkhead(block) if @bulkhead
  @rate_limiter&.acquire
  block.call
end