@@ -33,8 +33,7 @@ type etcdImpl struct {
33
33
34
34
type registerMeta struct {
35
35
leaseID clientv3.LeaseID
36
- ctx context.Context
37
- cancel context.CancelFunc
36
+ stop chan struct {}
38
37
}
39
38
40
39
// Option etcdImpl functional option
@@ -137,53 +136,60 @@ func (e *etcdImpl) Register(s discovery.Service, ttl ...time.Duration) error {
137
136
return err
138
137
}
139
138
140
- meta : = & registerMeta {
139
+ e . meta = & registerMeta {
141
140
leaseID : leaseID ,
141
+ stop : make (chan struct {}, 1 ),
142
142
}
143
- meta .ctx , meta .cancel = context .WithCancel (context .Background ())
144
- err = e .keepalive (meta )
143
+ err = e .keepalive (e .meta )
145
144
if err != nil {
146
145
return err
147
146
}
148
147
149
- e .meta = meta
150
-
148
+ log .Printf ("register service:%v leaseID:%v instaceID:%v success\n " , s .Name , leaseID , s .InstanceID )
151
149
go func () {
152
150
ticker := time .NewTicker (e .keepaliveInterval )
153
151
defer ticker .Stop ()
154
152
155
153
for {
156
154
select {
157
155
case <- ticker .C :
158
- err2 := e .keepalive (meta )
156
+ err2 := e .keepalive (e . meta )
159
157
if err2 != nil {
160
- log .Printf ("keep alive failed: %v" , err2 )
158
+ log .Printf (
159
+ "keep alive service:%v leaseID:%v instaceID:%v failed,error: %v\n " ,
160
+ s .Name , leaseID , s .InstanceID , err2 ,
161
+ )
161
162
} else {
162
- log .Printf ("register service:%v leaseID:%v instaceID:%v success\n " , s .Name , leaseID , s .InstanceID )
163
+ log .Printf (
164
+ "keep alive service:%v leaseID:%v instaceID:%v success\n " ,
165
+ s .Name , leaseID , s .InstanceID ,
166
+ )
163
167
}
164
- case <- meta .ctx .Done ():
168
+ case <- e .meta .stop :
169
+ log .Printf (
170
+ "service:%v leaseID:%v instaceID:%v has been deregistered\n " ,
171
+ s .Name , leaseID , s .InstanceID ,
172
+ )
165
173
return
166
174
default :
167
175
}
168
176
}
169
177
}()
170
178
171
- log .Printf ("register service:%v leaseID:%v instaceID:%v success\n " , s .Name , leaseID , s .InstanceID )
172
179
return nil
173
180
}
174
181
175
182
func (e * etcdImpl ) keepalive (meta * registerMeta ) error {
176
- keepAlive , err := e .client .KeepAlive (meta . ctx , meta .leaseID )
183
+ keepAlive , err := e .client .KeepAlive (context . Background () , meta .leaseID )
177
184
if err != nil {
178
185
return err
179
186
}
180
187
181
188
go func () {
182
189
// eat keepAlive channel to keep related lease alive.
183
- log .Printf ("start keepalive lease %v for etcd registry\n " , meta .leaseID )
184
190
for range keepAlive {
185
191
select {
186
- case <- meta .ctx . Done () :
192
+ case <- meta .stop :
187
193
log .Printf ("stop keepalive lease %v for etcd registry\n " , meta .leaseID )
188
194
return
189
195
default :
@@ -216,7 +222,7 @@ func (e *etcdImpl) Deregister(name string, instanceID string) error {
216
222
217
223
log .Printf ("deregister service:%v instaceID:%v success\n " , name , instanceID )
218
224
if e .meta != nil {
219
- e .meta .cancel ( )
225
+ close ( e .meta .stop )
220
226
}
221
227
222
228
return nil
0 commit comments