package priority import ( "time" "github.com/google/uuid" "github.com/yuninks/timerx/logger" ) type Options struct { getInterval time.Duration // 查询周期 updateInterval time.Duration // 更新间隔 expireTime time.Duration // 有效时间 logger logger.Logger // 日志 source string // 来源服务 instanceId string // 实例ID } func defaultOptions() Options { u, _ := uuid.NewV7() return Options{ getInterval: time.Second * 2, updateInterval: time.Second * 4, expireTime: time.Second * 8, logger: logger.NewLogger(), instanceId: u.String(), } } type Option func(*Options) func newOptions(opts ...Option) Options { o := defaultOptions() for _, opt := range opts { opt(&o) } return o } func WithLogger(log logger.Logger) Option { return func(o *Options) { o.logger = log } } // 更新周期 func WithUpdateInterval(d time.Duration) Option { if d.Abs() < time.Second { d = time.Second * 5 } return func(o *Options) { o.updateInterval = d o.expireTime = d*2 + time.Second o.getInterval = d / 3 } } func WithInstanceId(instanceId string) Option { return func(o *Options) { o.instanceId = instanceId } } func WithSource(s string) Option { return func(o *Options) { o.source = s } }