Documentation
¶
Index ¶
Constants ¶
View Source
const ( DefaultMaxAttempts = 3 DefaultInitialInterval = 100 * time.Millisecond DefaultMaxInterval = 10 * time.Second DefaultMultiplier = 2.0 DefaultRandomFactor = 0.1 )
View Source
const ( DefaultFailureThreshold = 5 DefaultResetTimeout = 10 * time.Second DefaultHalfOpenSuccess = 2 DefaultServerErrorThreshold = 500 )
Variables ¶
View Source
var ( // ErrCircuitOpen is returned when the circuit breaker is open. ErrCircuitOpen = errors.New("circuit breaker is open") // ErrMaxRetries is returned when max retries are exceeded. ErrMaxRetries = errors.New("max retries exceeded") // ErrRequestBodyNotRetriable is returned when request body cannot be retried. ErrRequestBodyNotRetriable = errors.New( "request body cannot be retried, implement GetBody to enable retries", ) // ErrAllRetryAttemptsFailed is returned when all retry attempts fail. ErrAllRetryAttemptsFailed = errors.New("all retry attempts failed") // ErrTransportError is returned when the underlying transport fails. ErrTransportError = errors.New("transport error") // ErrRequestContextError is returned when request context is cancelled. ErrRequestContextError = errors.New("request context error") )
Functions ¶
This section is empty.
Types ¶
type CircuitBreaker ¶
type CircuitBreaker struct {
Config CircuitBreakerConfig
// contains filtered or unexported fields
}
func NewCircuitBreaker ¶
func NewCircuitBreaker(config CircuitBreakerConfig) *CircuitBreaker
func (*CircuitBreaker) IsAllowed ¶
func (cb *CircuitBreaker) IsAllowed() bool
func (*CircuitBreaker) OnFailure ¶
func (cb *CircuitBreaker) OnFailure()
func (*CircuitBreaker) OnSuccess ¶
func (cb *CircuitBreaker) OnSuccess()
func (*CircuitBreaker) State ¶
func (cb *CircuitBreaker) State() CircuitState
type CircuitBreakerConfig ¶
type CircuitBreakerConfig struct {
Enabled bool `conf:"enabled" default:"true"`
FailureThreshold uint `conf:"failure_threshold" default:"5"`
ResetTimeout time.Duration `conf:"reset_timeout" default:"10s"`
HalfOpenSuccessNeeded uint `conf:"half_open_success_needed" default:"2"`
ServerErrorThreshold int `conf:"server_error_threshold" default:"500"`
}
type CircuitState ¶
type CircuitState int
const ( StateClosed CircuitState = iota StateHalfOpen StateOpen )
func (CircuitState) String ¶ added in v0.7.0
func (i CircuitState) String() string
type Client ¶
Client is a drop-in replacement for http.Client with built-in circuit breaker and retry mechanisms.
func DefaultClient ¶
func DefaultClient() *Client
DefaultClient creates a new http client with default circuit breaker and retry settings.
func NewClient ¶
func NewClient(cb *CircuitBreaker, rs *RetryStrategy) *Client
NewClient creates a new http client with the specified circuit breaker and retry strategy.
func (*Client) CircuitBreaker ¶
func (c *Client) CircuitBreaker() *CircuitBreaker
CircuitBreaker returns the underlying circuit breaker.
func (*Client) RetryStrategy ¶
func (c *Client) RetryStrategy() *RetryStrategy
RetryStrategy returns the underlying retry strategy.
type Config ¶
type Config struct {
CircuitBreaker CircuitBreakerConfig `conf:"circuit_breaker"`
Retry RetryConfig `conf:"retry"`
}
type ResilientTransport ¶
type ResilientTransport struct {
// contains filtered or unexported fields
}
func NewResilientTransport ¶
func NewResilientTransport( transport http.RoundTripper, cb *CircuitBreaker, rs *RetryStrategy, ) *ResilientTransport
func (*ResilientTransport) CancelRequest ¶
func (t *ResilientTransport) CancelRequest(req *http.Request)
CancelRequest implements the optional CancelRequest method for http.RoundTripper.
type RetryConfig ¶
type RetryConfig struct {
Enabled bool `conf:"enabled" default:"true"`
MaxAttempts uint `conf:"max_attempts" default:"3"`
InitialInterval time.Duration `conf:"initial_interval" default:"100ms"`
MaxInterval time.Duration `conf:"max_interval" default:"10s"`
Multiplier float64 `conf:"multiplier" default:"2"`
RandomFactor float64 `conf:"random_factor" default:"0.1"`
}
type RetryStrategy ¶
type RetryStrategy struct {
Config RetryConfig
}
func DefaultRetryStrategy ¶
func DefaultRetryStrategy() *RetryStrategy
func NewRetryStrategy ¶
func NewRetryStrategy(config RetryConfig) *RetryStrategy
NewRetryStrategy creates a new retry strategy with the specified parameters.
func (*RetryStrategy) NextBackoff ¶
func (r *RetryStrategy) NextBackoff(attempt uint) time.Duration
Click to show internal directories.
Click to hide internal directories.