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 ( DefaultServerErrorThreshold = 500 DefaultFailureThreshold = 5 DefaultResetTimeout = 10 * time.Second DefaultHalfOpenSuccess = 2 )
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 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 ¶
type Client struct {
*http.Client
Config *Config
Transport *ResilientTransport
TLSClientConfig *tls.Config
}
Client is a drop-in replacement for http.Client with built-in circuit breaker and retry mechanisms.
func NewClient ¶
func NewClient(options ...NewClientOption) *Client
NewClient creates a new http client with the specified circuit breaker and retry strategy.
type Config ¶
type Config struct {
CircuitBreaker CircuitBreakerConfig `conf:"circuit_breaker"`
RetryStrategy RetryStrategyConfig `conf:"retry_strategy"`
ServerErrorThreshold int `conf:"server_error_threshold" default:"500"`
}
type NewClientOption ¶ added in v0.7.2
type NewClientOption func(*Client)
func WithConfig ¶ added in v0.7.2
func WithConfig(config *Config) NewClientOption
func WithTLSClientConfig ¶ added in v0.7.4
func WithTLSClientConfig(tlsConfig *tls.Config) NewClientOption
type ResilientTransport ¶
type ResilientTransport struct {
Transport http.RoundTripper
Config *Config
CircuitBreaker *CircuitBreaker
RetryStrategy *RetryStrategy
}
func NewResilientTransport ¶
func NewResilientTransport( transport *http.Transport, config *Config, ) *ResilientTransport
func (*ResilientTransport) CancelRequest ¶
func (t *ResilientTransport) CancelRequest(req *http.Request)
CancelRequest implements the optional CancelRequest method for http.RoundTripper.
type RetryStrategy ¶
type RetryStrategy struct {
Config *RetryStrategyConfig
}
func NewRetryStrategy ¶
func NewRetryStrategy(config *RetryStrategyConfig) *RetryStrategy
NewRetryStrategy creates a new retry strategy with the specified parameters.
func (*RetryStrategy) NextBackoff ¶
func (r *RetryStrategy) NextBackoff(attempt uint) time.Duration
type RetryStrategyConfig ¶ added in v0.7.2
type RetryStrategyConfig 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"`
}
Click to show internal directories.
Click to hide internal directories.