You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gojobs/operation_attr.go

57 lines
1.6 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package gojobs
import (
"github.com/go-redis/redis/v8"
"go.dtapp.net/goip"
"go.etcd.io/etcd/client/v3"
"gorm.io/gorm"
)
const (
lockTypeRedis = "redis"
lockTypeEtcd = "etcd"
)
// OperationAttr 操作属性
type OperationAttr struct {
gormClient *gorm.DB // 数据库驱动
redisClient *redis.Client // 缓存数据库驱动
etcdClient *clientv3.Client // 分布式缓存驱动
lockPrefix string // 锁Key前缀
ipService *goip.Client // ip服务
lockType string // 锁驱动类型
outsideIp string // 外网ip
}
// WithGormClient 设置数据库驱动
func WithGormClient(client *gorm.DB) *OperationAttr {
return &OperationAttr{gormClient: client}
}
// WithRedisClient 设置缓存数据库驱动
func WithRedisClient(redisClient *redis.Client) *OperationAttr {
return &OperationAttr{redisClient: redisClient, lockType: lockTypeRedis}
}
// WithEtcdClient 设置分布式缓存驱动
func WithEtcdClient(etcdClient *clientv3.Client) *OperationAttr {
return &OperationAttr{etcdClient: etcdClient, lockType: lockTypeEtcd}
}
// WithLockPrefix 设置锁Key前缀
// redisfmt.Sprintf("cron:lock:%v:%v", info.Type, id)
// etcdfmt.Sprintf("cron/lock/%v/%v", info.Type, id)
func WithLockPrefix(lockPrefix string) *OperationAttr {
return &OperationAttr{lockPrefix: lockPrefix}
}
// WithOutsideIp 设置外网ip
func WithOutsideIp(outsideIp string) *OperationAttr {
return &OperationAttr{outsideIp: outsideIp}
}
// WithIpService 设置ip服务
func WithIpService(ipService *goip.Client) *OperationAttr {
return &OperationAttr{ipService: ipService}
}