micro--go-micro
42a12fe429
Implement rate limiting mechanism to protect etcd when: - Cache is empty (no stale data available) - Registry is failing/overloaded - Multiple sequential requests arrive Changes: - Add MinimumRetryInterval option (default 5s) - Track last failed attempt time per service - Throttle requests within retry interval when no cache exists - Clear throttling on successful lookup - Add comprehensive tests validating throttling behavior Co-authored-by: asim <17530+asim@users.noreply.github.com>
30 行
593 B
Go
30 行
593 B
Go
package cache
|
|
|
|
import (
|
|
"time"
|
|
|
|
"go-micro.dev/v5/logger"
|
|
)
|
|
|
|
// WithTTL sets the cache TTL.
|
|
func WithTTL(t time.Duration) Option {
|
|
return func(o *Options) {
|
|
o.TTL = t
|
|
}
|
|
}
|
|
|
|
// WithLogger sets the underline logger.
|
|
func WithLogger(l logger.Logger) Option {
|
|
return func(o *Options) {
|
|
o.Logger = l
|
|
}
|
|
}
|
|
|
|
// WithMinimumRetryInterval sets the minimum retry interval for failed lookups.
|
|
// This prevents cache penetration when registry is failing and there's no stale cache.
|
|
func WithMinimumRetryInterval(d time.Duration) Option {
|
|
return func(o *Options) {
|
|
o.MinimumRetryInterval = d
|
|
}
|
|
}
|