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.
39 lines
620 B
39 lines
620 B
package consul |
|
|
|
import ( |
|
"context" |
|
|
|
"github.com/go-kratos/kratos/v2/registry" |
|
) |
|
|
|
type watcher struct { |
|
event chan struct{} |
|
set *serviceSet |
|
|
|
// for cancel |
|
ctx context.Context |
|
cancel context.CancelFunc |
|
} |
|
|
|
func (w *watcher) Next() (services []*registry.ServiceInstance, err error) { |
|
select { |
|
case <-w.ctx.Done(): |
|
err = w.ctx.Err() |
|
case <-w.event: |
|
} |
|
|
|
ss, ok := w.set.services.Load().([]*registry.ServiceInstance) |
|
|
|
if ok { |
|
services = append(services, ss...) |
|
} |
|
return |
|
} |
|
|
|
func (w *watcher) Stop() error { |
|
w.cancel() |
|
w.set.lock.Lock() |
|
defer w.set.lock.Unlock() |
|
delete(w.set.watcher, w) |
|
return nil |
|
}
|
|
|