Documentation
¶
Overview ¶
Package http provides an HTTP client governance component built on top of Go net/http.
It focuses on timeout control, bounded retries, request classification, Consul-based dynamic configuration, and request-level observability.
The package is designed to preserve existing business calling patterns as much as possible while adding governance capabilities through the transport layer.
Index ¶
- Constants
- Variables
- func CallerServiceName() string
- func ClearRequestClassResolver()
- func ContextWithRetryConstraints(ctx context.Context, headers stdhttp.Header) (context.Context, context.CancelFunc)
- func Delete(ctx context.Context, url, contentType string, body any, expectedPtr any) error
- func DeleteWithHeaders(ctx context.Context, url, contentType string, body any, expectedPtr any, ...) error
- func Do(req *http.Request, expectedPtr any) error
- func Get(ctx context.Context, url string, expectedPtr any) error
- func GetInstance() *http.Client
- func GetWithHeaders(ctx context.Context, url string, expectedPtr any, ...) error
- func Head(ctx context.Context, url string, expectedPtr any) error
- func Instance() *http.Client
- func InternalDelete(ctx context.Context, url, contentType string, body any, expectedPtr any, ...) error
- func InternalGet(ctx context.Context, url string, expectedPtr any, ...) error
- func InternalMultipartForm(ctx context.Context, method, url string, mf MultipartFormData, expectedPtr any, ...) error
- func InternalPost(ctx context.Context, url, contentType string, body any, expectedPtr any, ...) error
- func InternalPostMultipartForm(ctx context.Context, url string, mf MultipartFormData, expectedPtr any, ...) error
- func InternalPut(ctx context.Context, url, contentType string, body any, expectedPtr any, ...) error
- func InternalPutMultipartForm(ctx context.Context, url string, mf MultipartFormData, expectedPtr any, ...) error
- func InternalWithMethod(ctx context.Context, url, method, contentType string, body any, ...) error
- func MultipartFormWithHeaders(ctx context.Context, method, url string, mf MultipartFormData, expectedPtr any, ...) error
- func NewClient() *http.Client
- func NewClientWithOptions(options ClientOptions) *http.Client
- func NoMoreRetryFromContext(ctx context.Context) bool
- func Post(ctx context.Context, url, contentType string, body any, expectedPtr any) error
- func PostMultipartForm(ctx context.Context, url string, mf MultipartFormData, expectedPtr any) error
- func PostMultipartFormWithHeaders(ctx context.Context, url string, mf MultipartFormData, expectedPtr any, ...) error
- func PostWithHeaders(ctx context.Context, url, contentType string, body any, expectedPtr any, ...) error
- func Put(ctx context.Context, url, contentType string, body any, expectedPtr any) error
- func PutMultipartForm(ctx context.Context, url string, mf MultipartFormData, expectedPtr any) error
- func PutMultipartFormWithHeaders(ctx context.Context, url string, mf MultipartFormData, expectedPtr any, ...) error
- func PutWithHeaders(ctx context.Context, url, contentType string, body any, expectedPtr any, ...) error
- func RespHandler(resp *http.Response, expectedPtr any) error
- func RetryConfigAutoReloadInterval() time.Duration
- func SendWithHeaders(ctx context.Context, method, url, contentType string, body any, ...) error
- func SetBodyLogLevel(level slog.Level)
- func SetBodyLogLimit(limit int64) error
- func SetCallerServiceName(name string)
- func SetHealthcheckSkipper()
- func SetRequestClassResolver(resolver RequestClassResolver)
- func SetRetryConfigAutoReloadInterval(interval time.Duration)
- func SetRetryConfigProvider(provider RetryConfigProvider)
- func SetRetryObserver(observer RetryObserver)
- func SetRetryPolicyResolver(resolver RetryPolicyResolver)
- func SetRetryResultObserver(observer RetryResultObserver)
- func SetSkipper(skipper SkipperFunc)
- func Setup() error
- func SetupWithOptions(options SetupOptions) error
- func StartRetryConfigAutoReloadFromConsul(provider *ManagedRetryConfigProvider, env, appName, endpoint string) error
- func StopRetryConfigAutoReload()
- func WithExternalRead(ctx context.Context) context.Context
- func WithExternalWrite(ctx context.Context) context.Context
- func WithInternalRead(ctx context.Context) context.Context
- func WithInternalWrite(ctx context.Context) context.Context
- func WithNoMoreRetry(ctx context.Context) context.Context
- func WithRequestClass(ctx context.Context, class RequestClass) context.Context
- func WithRetryConfigScope(ctx context.Context, scope RetryConfigScope) context.Context
- func WithRetryPolicy(ctx context.Context, policy RetryPolicy) context.Context
- type AuthorizationInHeaderSetter
- type AuthorizationInHeaderSetterFunc
- type ClientOptions
- type ManagedRetryConfigProvider
- func NewManagedRetryConfigProvider() *ManagedRetryConfigProvider
- func NewManagedRetryConfigProviderFromConsul(env, appName, endpoint string) (*ManagedRetryConfigProvider, error)
- func NewManagedRetryConfigProviderFromYAML(data []byte) (*ManagedRetryConfigProvider, error)
- func SetRetryConfigProviderFromConsul(env, appName, endpoint string) (*ManagedRetryConfigProvider, error)
- func SetRetryConfigProviderFromYAML(data []byte) (*ManagedRetryConfigProvider, error)
- func (p *ManagedRetryConfigProvider) ResolveRequestClass(req *http.Request) (RequestClass, bool)
- func (p *ManagedRetryConfigProvider) ResolveRetryConfigScope(req *http.Request, scope RetryConfigScope) RetryConfigScope
- func (p *ManagedRetryConfigProvider) ResolveRetryPolicy(ctx context.Context, scope RetryConfigScope, base RetryPolicy) RetryPolicy
- func (p *ManagedRetryConfigProvider) Update(file RetryConfigFile) error
- func (p *ManagedRetryConfigProvider) UpdateFromConsul(env, appName, endpoint string) error
- func (p *ManagedRetryConfigProvider) UpdateFromYAML(data []byte) error
- type MultipartFormData
- type RequestClass
- type RequestClassResolver
- type RequestHeaderSetter
- type RequestResultEvent
- type ResponsePtr
- type RetryBudgetFile
- type RetryClassPolicyFile
- type RetryConfigFile
- type RetryConfigMatchFile
- type RetryConfigProvider
- type RetryConfigProviderFunc
- type RetryConfigRuleFile
- type RetryConfigScope
- type RetryConfigScopeDefaultsResolver
- type RetryDownstreamFile
- type RetryEvent
- type RetryObserver
- type RetryOperationRuleFile
- type RetryPolicy
- type RetryPolicyPatch
- type RetryPolicyPatchFile
- type RetryPolicyResolver
- type RetryResultObserver
- type SetupOptions
- type SkipperFunc
- type Transport
Constants ¶
const ( // HeaderRetryAttempt carries the zero-based attempt number for the current request. HeaderRetryAttempt = "X-Retry-Attempt" // HeaderNoMoreRetry tells downstream callers not to relax the current retry budget. HeaderNoMoreRetry = "X-No-More-Retry" // HeaderRequestDeadline carries the overall request deadline as a Unix millisecond timestamp. HeaderRequestDeadline = "X-Request-Deadline" // HeaderRetryReason records the reason for the latest retry decision. HeaderRetryReason = "X-Retry-Reason" )
const (
// RetrySuppressedReasonBudgetExhausted reports a retry denied by the local downstream budget.
RetrySuppressedReasonBudgetExhausted = "budget_exhausted"
)
Variables ¶
var ( // ErrUrlNotFound reports an outgoing request without a URL. ErrUrlNotFound = errors.New("request URL not found") )
var HealthcheckSkipper = SkipperFunc(func(req *http.Request) bool { if req == nil || req.URL == nil { return false } return strings.Contains(req.URL.Path, "/healthcheck") })
HealthcheckSkipper bypasses retry governance for health-check paths.
Functions ¶
func CallerServiceName ¶
func CallerServiceName() string
CallerServiceName returns the process-level caller service name that is used as the default caller identity for outgoing requests.
func ClearRequestClassResolver ¶
func ClearRequestClassResolver()
ClearRequestClassResolver removes the currently registered request class resolver.
func ContextWithRetryConstraints ¶
func ContextWithRetryConstraints(ctx context.Context, headers stdhttp.Header) (context.Context, context.CancelFunc)
ContextWithRetryConstraints imports chain-wide retry constraints from headers.
func DeleteWithHeaders ¶ added in v0.5.0
func DeleteWithHeaders(ctx context.Context, url, contentType string, body any, expectedPtr any, setHeaders RequestHeaderSetter) error
DeleteWithHeaders sends a DELETE request after applying setHeaders.
func GetInstance ¶
GetInstance returns the shared HTTP client instance. Deprecated: use Instance instead.
func GetWithHeaders ¶ added in v0.5.0
func GetWithHeaders(ctx context.Context, url string, expectedPtr any, setHeaders RequestHeaderSetter) error
GetWithHeaders sends a GET request after applying setHeaders.
func Instance ¶
Instance returns the shared HTTP client used by the helper functions in this package.
func InternalDelete ¶
func InternalDelete(ctx context.Context, url, contentType string, body any, expectedPtr any, authorizationInHeaderSetter AuthorizationInHeaderSetter) error
InternalDelete sends a DELETE request with an optional authorization-header setter through the shared client.
func InternalGet ¶
func InternalGet(ctx context.Context, url string, expectedPtr any, setAuthorizationInHeader func(request *http.Request) error) error
InternalGet sends a GET request with an optional authorization-header setter through the shared client.
func InternalMultipartForm ¶
func InternalMultipartForm(ctx context.Context, method, url string, mf MultipartFormData, expectedPtr any, authorizationInHeaderSetter AuthorizationInHeaderSetter) error
InternalMultipartForm sends a multipart request with an optional authorization-header setter through the shared client.
func InternalPost ¶
func InternalPost(ctx context.Context, url, contentType string, body any, expectedPtr any, authorizationInHeaderSetter AuthorizationInHeaderSetter) error
InternalPost sends a POST request with an optional authorization-header setter through the shared client.
func InternalPostMultipartForm ¶
func InternalPostMultipartForm(ctx context.Context, url string, mf MultipartFormData, expectedPtr any, authorizationInHeaderSetter AuthorizationInHeaderSetter) error
InternalPostMultipartForm sends a multipart POST request with an optional authorization-header setter through the shared client.
func InternalPut ¶
func InternalPut(ctx context.Context, url, contentType string, body any, expectedPtr any, authorizationInHeaderSetter AuthorizationInHeaderSetter) error
InternalPut sends a PUT request with an optional authorization-header setter through the shared client.
func InternalPutMultipartForm ¶
func InternalPutMultipartForm(ctx context.Context, url string, mf MultipartFormData, expectedPtr any, authorizationInHeaderSetter AuthorizationInHeaderSetter) error
InternalPutMultipartForm sends a multipart PUT request with an optional authorization-header setter through the shared client.
func InternalWithMethod ¶
func InternalWithMethod(ctx context.Context, url, method, contentType string, body any, expectedPtr any, authorizationInHeaderSetter AuthorizationInHeaderSetter) error
InternalWithMethod sends a request with the supplied HTTP method and an optional authorization-header setter through the shared client.
func MultipartFormWithHeaders ¶ added in v0.5.0
func MultipartFormWithHeaders(ctx context.Context, method, url string, mf MultipartFormData, expectedPtr any, setHeaders RequestHeaderSetter) error
MultipartFormWithHeaders sends a multipart request after applying setHeaders.
func NewClient ¶
NewClient returns an independently instantiated HTTP client with the package defaults.
func NewClientWithOptions ¶
func NewClientWithOptions(options ClientOptions) *http.Client
NewClientWithOptions returns an independently configured HTTP client without mutating the package-level shared client.
func NoMoreRetryFromContext ¶
NoMoreRetryFromContext reports whether an upstream caller disabled retries.
func PostMultipartForm ¶
func PostMultipartForm(ctx context.Context, url string, mf MultipartFormData, expectedPtr any) error
PostMultipartForm sends a multipart POST request through the shared client.
func PostMultipartFormWithHeaders ¶ added in v0.5.0
func PostMultipartFormWithHeaders(ctx context.Context, url string, mf MultipartFormData, expectedPtr any, setHeaders RequestHeaderSetter) error
PostMultipartFormWithHeaders sends a multipart POST request after applying setHeaders.
func PostWithHeaders ¶ added in v0.5.0
func PostWithHeaders(ctx context.Context, url, contentType string, body any, expectedPtr any, setHeaders RequestHeaderSetter) error
PostWithHeaders sends a POST request after applying setHeaders.
func PutMultipartForm ¶
PutMultipartForm sends a multipart PUT request through the shared client.
func PutMultipartFormWithHeaders ¶ added in v0.5.0
func PutMultipartFormWithHeaders(ctx context.Context, url string, mf MultipartFormData, expectedPtr any, setHeaders RequestHeaderSetter) error
PutMultipartFormWithHeaders sends a multipart PUT request after applying setHeaders.
func PutWithHeaders ¶ added in v0.5.0
func PutWithHeaders(ctx context.Context, url, contentType string, body any, expectedPtr any, setHeaders RequestHeaderSetter) error
PutWithHeaders sends a PUT request after applying setHeaders.
func RespHandler ¶
RespHandler closes the response body and decodes it into expectedPtr.
func RetryConfigAutoReloadInterval ¶
RetryConfigAutoReloadInterval returns the current retry config auto reload interval.
func SendWithHeaders ¶ added in v0.5.0
func SendWithHeaders(ctx context.Context, method, url, contentType string, body any, expectedPtr any, setHeaders RequestHeaderSetter) error
SendWithHeaders sends a request with the supplied method after applying setHeaders.
func SetBodyLogLevel ¶
SetBodyLogLevel configures the log level used for request/response body logging. The default level is slog.LevelDebug.
func SetBodyLogLimit ¶ added in v0.3.0
SetBodyLogLimit configures, in bytes, the maximum request or response body size that can be captured for logging. The default is 64 KiB.
func SetCallerServiceName ¶
func SetCallerServiceName(name string)
SetCallerServiceName sets the process-level caller service name used to fill RetryConfigScope.Caller when business code does not provide it explicitly.
In normal startup flow this value is injected by Setup() from the `--name` or `-n` command-line flag.
func SetHealthcheckSkipper ¶
func SetHealthcheckSkipper()
SetHealthcheckSkipper skips requests whose URL path contains `/healthcheck`.
func SetRequestClassResolver ¶
func SetRequestClassResolver(resolver RequestClassResolver)
SetRequestClassResolver registers a resolver that can classify requests as internal/external read/write before method-based defaults are applied.
func SetRetryConfigAutoReloadInterval ¶
SetRetryConfigAutoReloadInterval sets the wait interval used by retry config auto reload. For blocking-query mode, it is the maximum wait time for each Consul watch request. For fallback/polling mode, it is the reload interval.
Call this before Setup() or before StartRetryConfigAutoReloadFromConsul() if you want the current process to use the new value immediately.
If interval <= 0, auto reload will be disabled for newly started watchers.
func SetRetryConfigProvider ¶
func SetRetryConfigProvider(provider RetryConfigProvider)
SetRetryConfigProvider installs a dynamic retry-config provider on the shared transport.
func SetRetryObserver ¶
func SetRetryObserver(observer RetryObserver)
SetRetryObserver registers a retry observer on the shared transport.
func SetRetryPolicyResolver ¶
func SetRetryPolicyResolver(resolver RetryPolicyResolver)
SetRetryPolicyResolver configures the baseline retry policy resolver for the shared transport.
func SetRetryResultObserver ¶
func SetRetryResultObserver(observer RetryResultObserver)
SetRetryResultObserver registers a transport-result observer on the shared transport.
func SetSkipper ¶
func SetSkipper(skipper SkipperFunc)
SetSkipper configures a request skipper on the shared transport.
func Setup ¶
func Setup() error
Setup initializes caller identity and retry configuration from the current process arguments. It recognizes `--env`/`-e`, `--name`/`-n` and `--consul`/`-c`.
func SetupWithOptions ¶
func SetupWithOptions(options SetupOptions) error
SetupWithOptions initializes caller identity and retry configuration from the provided options instead of reading os.Args.
func StartRetryConfigAutoReloadFromConsul ¶
func StartRetryConfigAutoReloadFromConsul(provider *ManagedRetryConfigProvider, env, appName, endpoint string) error
StartRetryConfigAutoReloadFromConsul starts a background task that watches Consul and refreshes the provider when retry configuration changes.
func StopRetryConfigAutoReload ¶
func StopRetryConfigAutoReload()
StopRetryConfigAutoReload stops the background retry-config reload task if it is currently running.
func WithExternalRead ¶
WithExternalRead forces the current request context to use the external read classification.
func WithExternalWrite ¶
WithExternalWrite forces the current request context to use the external write classification.
func WithInternalRead ¶
WithInternalRead forces the current request context to use the internal read classification.
func WithInternalWrite ¶
WithInternalWrite forces the current request context to use the internal write classification.
func WithNoMoreRetry ¶
WithNoMoreRetry marks all downstream calls derived from ctx as non-retryable.
func WithRequestClass ¶
func WithRequestClass(ctx context.Context, class RequestClass) context.Context
WithRequestClass stores an explicit request class in context.
func WithRetryConfigScope ¶
func WithRetryConfigScope(ctx context.Context, scope RetryConfigScope) context.Context
WithRetryConfigScope stores explicit scope values in the request context. Callers can use it as an escape hatch when automatic scope inference is not precise enough for a particular request.
func WithRetryPolicy ¶
func WithRetryPolicy(ctx context.Context, policy RetryPolicy) context.Context
WithRetryPolicy stores an explicit baseline retry policy in context.
Types ¶
type AuthorizationInHeaderSetter ¶
type AuthorizationInHeaderSetter interface {
SetAuthorizationInHeader(request *http.Request) error
}
AuthorizationInHeaderSetter adds authorization data to an outgoing request.
type AuthorizationInHeaderSetterFunc ¶
AuthorizationInHeaderSetterFunc adapts a function to AuthorizationInHeaderSetter.
func (AuthorizationInHeaderSetterFunc) SetAuthorizationInHeader ¶
func (fn AuthorizationInHeaderSetterFunc) SetAuthorizationInHeader(request *http.Request) error
SetAuthorizationInHeader calls fn when it is non-nil.
type ClientOptions ¶
type ClientOptions struct {
RoundTripper http.RoundTripper
Skipper SkipperFunc
ResolvePolicy RetryPolicyResolver
ConfigProvider RetryConfigProvider
Observer RetryObserver
ResultObserver RetryResultObserver
RequestTimeout time.Duration
CheckRedirect func(req *http.Request, via []*http.Request) error
Jar http.CookieJar
}
ClientOptions configures independently instantiated clients and transports.
type ManagedRetryConfigProvider ¶
type ManagedRetryConfigProvider struct {
// contains filtered or unexported fields
}
ManagedRetryConfigProvider atomically serves validated retry configuration.
func NewManagedRetryConfigProvider ¶
func NewManagedRetryConfigProvider() *ManagedRetryConfigProvider
NewManagedRetryConfigProvider returns an empty managed provider.
func NewManagedRetryConfigProviderFromConsul ¶
func NewManagedRetryConfigProviderFromConsul(env, appName, endpoint string) (*ManagedRetryConfigProvider, error)
NewManagedRetryConfigProviderFromConsul creates a managed provider from Consul without installing it into the shared HTTP client.
func NewManagedRetryConfigProviderFromYAML ¶
func NewManagedRetryConfigProviderFromYAML(data []byte) (*ManagedRetryConfigProvider, error)
NewManagedRetryConfigProviderFromYAML validates YAML and creates a provider.
func SetRetryConfigProviderFromConsul ¶
func SetRetryConfigProviderFromConsul(env, appName, endpoint string) (*ManagedRetryConfigProvider, error)
SetRetryConfigProviderFromConsul loads retry configuration from Consul, installs the provider into the shared HTTP client and starts background reload for subsequent configuration changes.
func SetRetryConfigProviderFromYAML ¶
func SetRetryConfigProviderFromYAML(data []byte) (*ManagedRetryConfigProvider, error)
SetRetryConfigProviderFromYAML loads retry configuration from YAML and installs the resulting provider into the shared transport.
func (*ManagedRetryConfigProvider) ResolveRequestClass ¶
func (p *ManagedRetryConfigProvider) ResolveRequestClass(req *http.Request) (RequestClass, bool)
ResolveRequestClass classifies a request using the configured internal hosts.
func (*ManagedRetryConfigProvider) ResolveRetryConfigScope ¶
func (p *ManagedRetryConfigProvider) ResolveRetryConfigScope(req *http.Request, scope RetryConfigScope) RetryConfigScope
ResolveRetryConfigScope fills missing caller, downstream and operation values.
func (*ManagedRetryConfigProvider) ResolveRetryPolicy ¶
func (p *ManagedRetryConfigProvider) ResolveRetryPolicy(ctx context.Context, scope RetryConfigScope, base RetryPolicy) RetryPolicy
ResolveRetryPolicy applies the first matching rule to the class-adjusted policy.
func (*ManagedRetryConfigProvider) Update ¶
func (p *ManagedRetryConfigProvider) Update(file RetryConfigFile) error
Update validates and atomically replaces the current configuration.
func (*ManagedRetryConfigProvider) UpdateFromConsul ¶
func (p *ManagedRetryConfigProvider) UpdateFromConsul(env, appName, endpoint string) error
UpdateFromConsul reloads the provider from Consul immediately.
func (*ManagedRetryConfigProvider) UpdateFromYAML ¶
func (p *ManagedRetryConfigProvider) UpdateFromYAML(data []byte) error
UpdateFromYAML validates and atomically replaces the current configuration.
type MultipartFormData ¶
type MultipartFormData struct {
FileName string
File *multipart.FileHeader
Form interface{}
}
MultipartFormData describes a multipart form with an optional file.
type RequestClass ¶
type RequestClass string
RequestClass describes whether a request is internal/external and read/write.
const ( RequestClassInternalRead RequestClass = "internal_read" RequestClassInternalWrite RequestClass = "internal_write" RequestClassExternalRead RequestClass = "external_read" RequestClassExternalWrite RequestClass = "external_write" )
type RequestClassResolver ¶
type RequestClassResolver interface {
ResolveRequestClass(req *http.Request) (RequestClass, bool)
}
RequestClassResolver classifies outgoing requests for policy selection.
type RequestHeaderSetter ¶ added in v0.5.0
RequestHeaderSetter adds or overrides headers before a request is sent.
type RequestResultEvent ¶
type RequestResultEvent struct {
Method string
URL string
Caller string
Downstream string
Operation string
Class RequestClass
AttemptCount int
RetryCount int
MaxRetries int
StatusCode int
FinalReason string
FinalError string
RetrySuppressedReason string
Retried bool
RetrySucceeded bool
FinalFailed bool
TimedOut bool
Duration time.Duration
}
RequestResultEvent records the transport-level outcome after all retries. It does not include response-body decoding performed by helper functions.
type ResponsePtr ¶
type ResponsePtr struct {
// ExpectedPtr receives the decoded response body.
ExpectedPtr any
// Deprecated: use ExpectedPtr. ExceptPtr is retained for compatibility.
ExceptPtr any
// StatusCode receives the HTTP response status code.
StatusCode int
}
ResponsePtr captures both a decoded response body and its HTTP status code.
type RetryBudgetFile ¶ added in v0.8.0
type RetryBudgetFile struct {
Enabled *bool `yaml:"enabled" json:"enabled"`
Capacity *int `yaml:"capacity" json:"capacity"`
RetryCost *int `yaml:"retry_cost" json:"retry_cost"`
SuccessIncrement *int `yaml:"success_increment" json:"success_increment"`
}
RetryBudgetFile configures the local retry budget shared by one Transport.
type RetryClassPolicyFile ¶
type RetryClassPolicyFile struct {
InternalRead *RetryPolicyPatchFile `yaml:"internal_read" json:"internal_read"`
InternalWrite *RetryPolicyPatchFile `yaml:"internal_write" json:"internal_write"`
ExternalRead *RetryPolicyPatchFile `yaml:"external_read" json:"external_read"`
ExternalWrite *RetryPolicyPatchFile `yaml:"external_write" json:"external_write"`
}
RetryClassPolicyFile defines policy patches for the four request classes.
type RetryConfigFile ¶
type RetryConfigFile struct {
Version string `yaml:"version" json:"version"`
RetryBudget *RetryBudgetFile `yaml:"retry_budget" json:"retry_budget"`
InternalHosts []string `yaml:"internal_hosts" json:"internal_hosts"`
Downstreams []RetryDownstreamFile `yaml:"downstreams" json:"downstreams"`
Operations []RetryOperationRuleFile `yaml:"operations" json:"operations"`
Policies RetryClassPolicyFile `yaml:"policies" json:"policies"`
Rules []RetryConfigRuleFile `yaml:"rules" json:"rules"`
}
RetryConfigFile is the versioned YAML/JSON model for retry governance.
type RetryConfigMatchFile ¶
type RetryConfigMatchFile struct {
Callers []string `yaml:"callers" json:"callers"`
Downstreams []string `yaml:"downstreams" json:"downstreams"`
Operations []string `yaml:"operations" json:"operations"`
Methods []string `yaml:"methods" json:"methods"`
Hosts []string `yaml:"hosts" json:"hosts"`
Paths []string `yaml:"paths" json:"paths"`
Classes []string `yaml:"classes" json:"classes"`
}
RetryConfigMatchFile contains the match dimensions for a configuration rule.
type RetryConfigProvider ¶
type RetryConfigProvider interface {
ResolveRetryPolicy(ctx context.Context, scope RetryConfigScope, base RetryPolicy) RetryPolicy
}
RetryConfigProvider resolves the effective retry policy for the current request scope after combining defaults and dynamic configuration.
type RetryConfigProviderFunc ¶
type RetryConfigProviderFunc func(ctx context.Context, scope RetryConfigScope, base RetryPolicy) RetryPolicy
RetryConfigProviderFunc adapts a function to RetryConfigProvider.
func (RetryConfigProviderFunc) ResolveRetryPolicy ¶
func (fn RetryConfigProviderFunc) ResolveRetryPolicy(ctx context.Context, scope RetryConfigScope, base RetryPolicy) RetryPolicy
ResolveRetryPolicy calls fn.
type RetryConfigRuleFile ¶
type RetryConfigRuleFile struct {
Name string `yaml:"name" json:"name"`
Priority int `yaml:"priority" json:"priority"`
Disabled bool `yaml:"disabled" json:"disabled"`
Match RetryConfigMatchFile `yaml:"match" json:"match"`
Policy RetryPolicyPatchFile `yaml:"policy" json:"policy"`
}
RetryConfigRuleFile defines a named conditional policy override.
type RetryConfigScope ¶
type RetryConfigScope struct {
Caller string
Downstream string
Operation string
Method string
Host string
Path string
Class RequestClass
}
RetryConfigScope describes the dimensions used to resolve retry policies for an outgoing request.
type RetryConfigScopeDefaultsResolver ¶
type RetryConfigScopeDefaultsResolver interface {
ResolveRetryConfigScope(req *http.Request, scope RetryConfigScope) RetryConfigScope
}
RetryConfigScopeDefaultsResolver fills missing scope fields such as caller, downstream and operation before policy matching runs.
type RetryDownstreamFile ¶
type RetryDownstreamFile struct {
Name string `yaml:"name" json:"name"`
Hosts []string `yaml:"hosts" json:"hosts"`
}
RetryDownstreamFile maps one logical downstream name to host patterns.
type RetryEvent ¶
type RetryEvent struct {
Method string
URL string
Class RequestClass
Attempt int
MaxRetries int
Delay time.Duration
StatusCode int
Reason string
WillRetry bool
}
RetryEvent records a scheduled retry attempt.
type RetryObserver ¶
type RetryObserver interface {
ObserveRetry(ctx context.Context, event RetryEvent)
}
RetryObserver receives retry scheduling events.
type RetryOperationRuleFile ¶
type RetryOperationRuleFile struct {
Name string `yaml:"name" json:"name"`
Priority int `yaml:"priority" json:"priority"`
Methods []string `yaml:"methods" json:"methods"`
Hosts []string `yaml:"hosts" json:"hosts"`
Paths []string `yaml:"paths" json:"paths"`
Downstreams []string `yaml:"downstreams" json:"downstreams"`
}
RetryOperationRuleFile maps request attributes to a logical operation name.
type RetryPolicy ¶
type RetryPolicy struct {
MaxRetries int
PerAttemptTimeout time.Duration
MaxElapsedTime time.Duration
InitialBackoff time.Duration
MaxBackoff time.Duration
RetryOnStatuses map[int]struct{}
RetryOn429 bool
}
RetryPolicy describes retry, timeout and backoff controls for a request.
func DefaultRetryPolicyResolver ¶
func DefaultRetryPolicyResolver(req *http.Request) RetryPolicy
DefaultRetryPolicyResolver returns the built-in baseline policy: read requests retry once by default while write requests do not retry automatically.
type RetryPolicyPatch ¶
type RetryPolicyPatch struct {
DisableRetry *bool
MaxRetries *int
PerAttemptTimeout *time.Duration
MaxElapsedTime *time.Duration
InitialBackoff *time.Duration
MaxBackoff *time.Duration
RetryOnStatuses []int
RetryOn429 *bool
}
RetryPolicyPatch describes the fields that should override a base retry policy. Nil values keep the base policy unchanged.
func (RetryPolicyPatch) Apply ¶
func (p RetryPolicyPatch) Apply(base RetryPolicy) RetryPolicy
Apply merges the patch into the provided base policy and returns the normalized result.
type RetryPolicyPatchFile ¶
type RetryPolicyPatchFile struct {
DisableRetry *bool `yaml:"disable_retry" json:"disable_retry"`
MaxRetries *int `yaml:"max_retries" json:"max_retries"`
PerAttemptTimeout string `yaml:"per_attempt_timeout" json:"per_attempt_timeout"`
MaxElapsedTime string `yaml:"max_elapsed_time" json:"max_elapsed_time"`
InitialBackoff string `yaml:"initial_backoff" json:"initial_backoff"`
MaxBackoff string `yaml:"max_backoff" json:"max_backoff"`
RetryOnStatuses []int `yaml:"retry_on_statuses" json:"retry_on_statuses"`
RetryOn429 *bool `yaml:"retry_on_429" json:"retry_on_429"`
}
RetryPolicyPatchFile is the serialized form of a partial retry policy.
type RetryPolicyResolver ¶
type RetryPolicyResolver func(req *http.Request) RetryPolicy
RetryPolicyResolver resolves the baseline retry policy before dynamic configuration is applied.
type RetryResultObserver ¶
type RetryResultObserver interface {
ObserveRequestResult(ctx context.Context, event RequestResultEvent)
}
RetryResultObserver receives the final transport-level request outcome event.
type SetupOptions ¶
SetupOptions contains the explicit initialization parameters used by SetupWithOptions.
type SkipperFunc ¶
SkipperFunc reports whether retry governance should be bypassed for a request.
type Transport ¶
type Transport struct {
http.RoundTripper
Skipper SkipperFunc
ResolvePolicy RetryPolicyResolver
ConfigProvider RetryConfigProvider
Observer RetryObserver
ResultObserver RetryResultObserver
// contains filtered or unexported fields
}
Transport is the retry-aware RoundTripper used by the shared HTTP client.
func NewTransport ¶
func NewTransport() *Transport
NewTransport returns a retry-aware transport with the package defaults.
func NewTransportWithOptions ¶
func NewTransportWithOptions(options ClientOptions) *Transport
NewTransportWithOptions returns an independently configured retry-aware transport without mutating the package-level shared client.
Source Files
¶
Directories
¶
| Path | Synopsis |
|---|---|
|
Package ginmiddleware imports retry-governance chain constraints from Gin requests into the standard request context.
|
Package ginmiddleware imports retry-governance chain constraints from Gin requests into the standard request context. |
|
metrics
|
|
|
prometheus
Package prometheus exposes HTTP governance client metrics to Prometheus.
|
Package prometheus exposes HTTP governance client metrics to Prometheus. |