diff --git a/CHANGELOG.md b/CHANGELOG.md index bc991a5..eb8fd75 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## v1.0.17 + +- 优化任务 + ## v1.0.16 - 增加驱动 \ No newline at end of file diff --git a/etcd.go b/etcd.go index 6f99795..6edb7aa 100644 --- a/etcd.go +++ b/etcd.go @@ -7,9 +7,12 @@ import ( // EtcdConfig etcd配置 type EtcdConfig struct { - Endpoints []string // 接口 []string{"http://127.0.0.1:2379"} - DialTimeout time.Duration // time.Second * 5 - LocalIP string // 本机IP + Endpoints []string // 接口 []string{"http://127.0.0.1:2379"} + DialTimeout time.Duration // time.Second * 5 + LocalIP string // 本机IP + Username string // 用户名 + Password string // 密码 + CustomDirectory string // 自定义目录,后面不需要/ } // Etcd etcd @@ -33,12 +36,28 @@ const ( JobWorkerDir = "/cron/workers/" ) +func getJobSaveDir(e Etcd) string { + if e.CustomDirectory == "" { + return JobSaveDir + } else { + return JobSaveDir + e.CustomDirectory + "/" + } +} + +func getJobWorkerDir(e Etcd) string { + if e.CustomDirectory == "" { + return JobWorkerDir + } else { + return JobWorkerDir + e.CustomDirectory + "/" + } +} + // GetWatchKey 监听的key func (e Etcd) GetWatchKey() string { - return JobSaveDir + e.LocalIP + return getJobSaveDir(e) + e.LocalIP } // IssueWatchKey 下发的key func (e Etcd) IssueWatchKey(ip string) string { - return JobSaveDir + ip + return getJobSaveDir(e) + ip } diff --git a/etcd_server.go b/etcd_server.go index 5049c06..f480160 100644 --- a/etcd_server.go +++ b/etcd_server.go @@ -19,11 +19,22 @@ func NewEtcdServer(config *EtcdConfig) (*Etcd, error) { e.Endpoints = config.Endpoints e.DialTimeout = config.DialTimeout e.LocalIP = config.LocalIP + e.Username = config.Username + e.Password = config.Password + e.CustomDirectory = config.CustomDirectory - e.Client, err = clientv3.New(clientv3.Config{ + v3Config := clientv3.Config{ Endpoints: e.Endpoints, DialTimeout: e.DialTimeout, - }) + } + + // 判断有没有配置用户信息 + if e.Username != "" { + v3Config.Username = e.Username + v3Config.Password = e.Password + } + + e.Client, err = clientv3.New(v3Config) if err != nil { return nil, errors.New("连接失败:" + err.Error()) } @@ -49,20 +60,20 @@ func (e Etcd) ListWorkers() (workerArr []string, err error) { workerArr = make([]string, 0) // 获取目录下所有Kv - if getResp, err = e.Kv.Get(context.TODO(), JobWorkerDir, clientv3.WithPrefix()); err != nil { + if getResp, err = e.Kv.Get(context.TODO(), getJobWorkerDir(e), clientv3.WithPrefix()); err != nil { return } // 解析每个节点的IP for _, kv = range getResp.Kvs { // kv.Key : /cron/workers/192.168.2.1 - workerIP = ExtractWorkerIP(string(kv.Key)) + workerIP = e.ExtractWorkerIP(string(kv.Key)) workerArr = append(workerArr, workerIP) } return } // ExtractWorkerIP 提取worker的IP -func ExtractWorkerIP(regKey string) string { - return strings.TrimPrefix(regKey, JobWorkerDir) +func (e Etcd) ExtractWorkerIP(regKey string) string { + return strings.TrimPrefix(regKey, getJobWorkerDir(e)) } diff --git a/etcd_worker.go b/etcd_worker.go index 9498e39..5591ae8 100644 --- a/etcd_worker.go +++ b/etcd_worker.go @@ -24,11 +24,22 @@ func NewEtcdWorker(config *EtcdConfig) (*Etcd, error) { config.LocalIP = goip.GetOutsideIp() } e.LocalIP = config.LocalIP + e.Username = config.Username + e.Password = config.Password + e.CustomDirectory = config.CustomDirectory - e.Client, err = clientv3.New(clientv3.Config{ + v3Config := clientv3.Config{ Endpoints: e.Endpoints, DialTimeout: e.DialTimeout, - }) + } + + // 判断有没有配置用户信息 + if e.Username != "" { + v3Config.Username = e.Username + v3Config.Password = e.Password + } + + e.Client, err = clientv3.New(v3Config) if err != nil { return nil, errors.New("连接失败:" + err.Error()) } @@ -59,7 +70,7 @@ func (e Etcd) RegisterWorker() { for { // 注册路径 - regKey = JobWorkerDir + e.LocalIP + regKey = getJobWorkerDir(e) + e.LocalIP log.Println("租约:", regKey) cancelFunc = nil diff --git a/version.go b/version.go index a1e1e59..c73ea3c 100644 --- a/version.go +++ b/version.go @@ -1,3 +1,3 @@ package gojobs -const Version = "1.0.16" +const Version = "1.0.17"