diff --git a/registry/base_registry.go b/registry/base_registry.go index 04694da25a38899cfc6f56a8092a15547f142e9c..cfc8f39bbc502db813afea02b82896d39503ebdd 100644 --- a/registry/base_registry.go +++ b/registry/base_registry.go @@ -178,7 +178,10 @@ func (r *BaseRegistry) RestartCallBack() bool { } logger.Infof("success to re-register service :%v", confIf.Key()) } - r.facadeBasedRegistry.InitListeners() + + if flag { + r.facadeBasedRegistry.InitListeners() + } return flag } diff --git a/registry/zookeeper/listener.go b/registry/zookeeper/listener.go index 5f398047a66a8de35857029207798b30ef5369f7..45ffa31722fa5232b6b6e3c00250942e277f9abc 100644 --- a/registry/zookeeper/listener.go +++ b/registry/zookeeper/listener.go @@ -38,7 +38,6 @@ import ( // RegistryDataListener ... type RegistryDataListener struct { subscribed map[*common.URL]config_center.ConfigurationListener - listener config_center.ConfigurationListener mutex sync.Mutex closed bool } diff --git a/registry/zookeeper/registry.go b/registry/zookeeper/registry.go index 9a59d811622d4d7bd6d9ac90493cd1f408a88b44..37cf20149dd9f5b8c18ffd855d045ae9e24a9770 100644 --- a/registry/zookeeper/registry.go +++ b/registry/zookeeper/registry.go @@ -120,8 +120,12 @@ func newMockZkRegistry(url *common.URL, opts ...zookeeper.Option) (*zk.TestClust func (r *zkRegistry) InitListeners() { r.listener = zookeeper.NewZkEventListener(r.client) - - r.dataListener = NewRegistryDataListener() + recoverd := r.dataListener.subscribed + newDataListener := NewRegistryDataListener() + for url, _ := range recoverd { + newDataListener.SubscribeURL(url, NewRegistryConfigurationListener(r.client, r)) + } + r.dataListener = newDataListener } func (r *zkRegistry) CreatePath(path string) error { @@ -174,8 +178,9 @@ func (r *zkRegistry) registerTempZookeeperNode(root string, node string) error { } zkPath, err = r.client.RegisterTemp(root, node) if err != nil { - if err == zk.ErrNodeExists { - logger.Warnf("RegisterTempNode(root{%s}, node{%s}) = error{%v}", root, node, perrors.WithStack(err)) + if perrors.Cause(err) == zk.ErrNodeExists { + logger.Warnf("RegisterTempNode(root{%s}, node{%s}) = error{%v}, ignore!", root, node, perrors.WithStack(err)) + return nil } else { logger.Errorf("RegisterTempNode(root{%s}, node{%s}) = error{%v}", root, node, perrors.WithStack(err)) } @@ -222,6 +227,5 @@ func (r *zkRegistry) getListener(conf *common.URL) (*RegistryConfigurationListen go r.listener.ListenServiceEvent(fmt.Sprintf("/dubbo/%s/"+constant.DEFAULT_CATEGORY, url.QueryEscape(conf.Service())), r.dataListener) - return zkListener, nil }