-
Notifications
You must be signed in to change notification settings - Fork 0
/
Register.go
101 lines (82 loc) · 1.89 KB
/
Register.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
package img_worker
import (
"context"
"encoding/json"
"fmt"
"go.etcd.io/etcd/clientv3"
"time"
)
// 注册节点到etcd: /cron/workers/worker名
type Register struct {
client *clientv3.Client
kv clientv3.KV
lease clientv3.Lease
}
var (
G_register *Register
)
// 注册到/cron/workers/IP, 并自动续租
func (register *Register) keepOnline() {
var (
regKey string
leaseGrantResp *clientv3.LeaseGrantResponse
err error
cancelCtx context.Context
cancelFunc context.CancelFunc
registerInfo []byte
)
for {
// 注册路径
regKey = JOB_WORKER_DIR + G_config.WorkerName
cancelFunc = nil
// 创建租约
if leaseGrantResp, err = register.lease.Grant(context.TODO(), 10); err != nil {
goto RETRY
}
cancelCtx, cancelFunc = context.WithCancel(context.TODO())
if registerInfo, err = json.Marshal(G_config.WorkerConfig) ; err != nil{
goto RETRY
}
// 注册到etcd
if _, err = register.kv.Put(cancelCtx, regKey, string(registerInfo), clientv3.WithLease(leaseGrantResp.ID)); err != nil {
fmt.Println(err)
goto RETRY
}
time.Sleep(7 * time.Second) // 休眠7秒,重新注册
RETRY:
time.Sleep(1 * time.Second)
if cancelFunc != nil {
cancelFunc()
}
}
}
func InitRegister() (err error) {
var (
config clientv3.Config
client *clientv3.Client
kv clientv3.KV
lease clientv3.Lease
)
// 初始化配置
config = clientv3.Config{
Endpoints: G_config.EtcdEndpoints, // 集群地址
DialTimeout: time.Duration(G_config.EtcdDialTimeout) * time.Millisecond, // 连接超时
Username: G_config.EtcdUser,
Password: G_config.EtcdPasswd,
}
// 建立连接
if client, err = clientv3.New(config); err != nil {
return
}
// 得到KV和Lease的API子集
kv = clientv3.NewKV(client)
lease = clientv3.NewLease(client)
G_register = &Register{
client: client,
kv: kv,
lease: lease,
}
// 服务注册协程
go G_register.keepOnline()
return
}