32 lines
1.0 KiB
Go
32 lines
1.0 KiB
Go
// Package retry provides configurable HTTP request retry as client middleware.
|
|
//
|
|
// The retry middleware wraps an http.RoundTripper and automatically retries
|
|
// failed requests based on a configurable policy, with exponential backoff
|
|
// and optional jitter.
|
|
//
|
|
// # Usage
|
|
//
|
|
// mw := retry.Transport(
|
|
// retry.WithMaxAttempts(3),
|
|
// retry.WithBackoff(retry.ExponentialBackoff(100*time.Millisecond, 5*time.Second)),
|
|
// )
|
|
// transport := mw(http.DefaultTransport)
|
|
//
|
|
// # Retry-After
|
|
//
|
|
// The retry middleware respects the Retry-After response header. If a server
|
|
// returns 429 or 503 with Retry-After, the delay from the header overrides
|
|
// the backoff strategy.
|
|
//
|
|
// # Request bodies
|
|
//
|
|
// For requests with bodies to be retried, the request must have GetBody set.
|
|
// Use httpx.NewJSONRequest or httpx.NewFormRequest which set GetBody
|
|
// automatically.
|
|
//
|
|
// # Sentinel errors
|
|
//
|
|
// ErrRetryExhausted is returned when all attempts fail. The original error
|
|
// is wrapped and accessible via errors.Unwrap.
|
|
package retry
|