diff --git a/registry/consul/service_discovery.go b/registry/consul/service_discovery.go index 5767a2c813d785464061d21bd4f857ccb55acaa5..ae2233d590af83c9cb7a20ec7eb8af289de167c0 100644 --- a/registry/consul/service_discovery.go +++ b/registry/consul/service_discovery.go @@ -74,7 +74,6 @@ func newConsulServiceDiscovery(name string) (registry.ServiceDiscovery, error) { return &consulServiceDiscovery{ address: remoteConfig.Address, descriptor: descriptor, - ttl: make(map[string]chan struct{}), }, nil } @@ -90,7 +89,7 @@ type consulServiceDiscovery struct { tag string tags []string address string - ttl map[string]chan struct{} + ttl sync.Map *consul.Config } @@ -115,10 +114,11 @@ func (csd *consulServiceDiscovery) String() string { func (csd *consulServiceDiscovery) Destroy() error { csd.consulClient = nil - for _, t := range csd.ttl { - close(t) - } - csd.ttl = nil + csd.ttl.Range(func(key, t interface{}) bool { + close(t.(chan struct{})) + csd.ttl.Delete(key) + return true + }) return nil } @@ -137,7 +137,7 @@ func (csd *consulServiceDiscovery) registerTtl(instance registry.ServiceInstance checkID := buildID(instance) stopChan := make(chan struct{}) - csd.ttl[buildID(instance)] = stopChan + csd.ttl.LoadOrStore(buildID(instance), stopChan) period := time.Duration(csd.checkPassInterval/8) * time.Millisecond timer := time.NewTimer(period) @@ -177,13 +177,14 @@ func (csd *consulServiceDiscovery) Unregister(instance registry.ServiceInstance) logger.Errorf("unregister service instance %s,error: %v", instance.GetId(), err) return err } - stopChanel, ok := csd.ttl[buildID(instance)] + + stopChanel, ok := csd.ttl.Load(buildID(instance)) if !ok { logger.Warnf("ttl for service instance %s didn't exist", instance.GetId()) return nil } - close(stopChanel) - delete(csd.ttl, buildID(instance)) + close(stopChanel.(chan struct{})) + csd.ttl.Delete(buildID(instance)) return nil } @@ -404,7 +405,7 @@ func (csd *consulServiceDiscovery) buildRegisterInstance(instance registry.Servi func (csd *consulServiceDiscovery) buildCheck(instance registry.ServiceInstance) consul.AgentServiceCheck { deregister, ok := instance.GetMetadata()[constant.DEREGISTER_AFTER] - if !ok || deregister == "" { + if !ok || len(deregister) == 0 { deregister = constant.DEFAULT_DEREGISTER_TIME } return consul.AgentServiceCheck{