2025-07-24 17:13:17 +08:00
|
|
|
package priority
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"time"
|
|
|
|
|
|
2025-10-04 20:44:16 +08:00
|
|
|
"github.com/google/uuid"
|
2025-07-24 17:13:17 +08:00
|
|
|
"github.com/yuninks/timerx/logger"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type Options struct {
|
2025-09-18 15:34:01 +08:00
|
|
|
getInterval time.Duration // 查询周期
|
2025-07-24 17:13:17 +08:00
|
|
|
updateInterval time.Duration // 更新间隔
|
2025-07-25 22:58:45 +08:00
|
|
|
expireTime time.Duration // 有效时间
|
2025-10-04 20:44:16 +08:00
|
|
|
logger logger.Logger // 日志
|
|
|
|
|
source string // 来源服务
|
|
|
|
|
instanceId string // 实例ID
|
2025-07-24 17:13:17 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func defaultOptions() Options {
|
2025-10-04 20:44:16 +08:00
|
|
|
|
|
|
|
|
u, _ := uuid.NewV7()
|
|
|
|
|
|
2025-07-24 17:13:17 +08:00
|
|
|
return Options{
|
2025-09-18 15:34:01 +08:00
|
|
|
getInterval: time.Second * 2,
|
|
|
|
|
updateInterval: time.Second * 4,
|
|
|
|
|
expireTime: time.Second * 8,
|
2025-07-24 17:13:17 +08:00
|
|
|
logger: logger.NewLogger(),
|
2025-10-04 20:44:16 +08:00
|
|
|
instanceId: u.String(),
|
2025-07-24 17:13:17 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type Option func(*Options)
|
|
|
|
|
|
|
|
|
|
func newOptions(opts ...Option) Options {
|
|
|
|
|
o := defaultOptions()
|
|
|
|
|
for _, opt := range opts {
|
|
|
|
|
opt(&o)
|
|
|
|
|
}
|
|
|
|
|
return o
|
|
|
|
|
}
|
|
|
|
|
|
2025-09-24 14:50:30 +08:00
|
|
|
func WithLogger(log logger.Logger) Option {
|
2025-07-24 17:13:17 +08:00
|
|
|
return func(o *Options) {
|
|
|
|
|
o.logger = log
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-09-18 15:34:01 +08:00
|
|
|
// 更新周期
|
2025-09-24 14:50:30 +08:00
|
|
|
func WithUpdateInterval(d time.Duration) Option {
|
2025-07-24 17:13:17 +08:00
|
|
|
if d.Abs() < time.Second {
|
2025-09-18 15:34:01 +08:00
|
|
|
d = time.Second * 5
|
2025-07-24 17:13:17 +08:00
|
|
|
}
|
|
|
|
|
return func(o *Options) {
|
|
|
|
|
o.updateInterval = d
|
2025-09-18 15:34:01 +08:00
|
|
|
o.expireTime = d*2 + time.Second
|
|
|
|
|
o.getInterval = d / 3
|
2025-07-24 17:13:17 +08:00
|
|
|
}
|
|
|
|
|
}
|
2025-10-04 20:44:16 +08:00
|
|
|
|
|
|
|
|
func WithInstanceId(instanceId string) Option {
|
|
|
|
|
return func(o *Options) {
|
|
|
|
|
o.instanceId = instanceId
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func WithSource(s string) Option {
|
|
|
|
|
return func(o *Options) {
|
|
|
|
|
o.source = s
|
|
|
|
|
}
|
|
|
|
|
}
|