From fbe3ed4fd93f1d07d81c2f88fc1bbbd7b8f99c21 Mon Sep 17 00:00:00 2001 From: ChangedenChan Date: Sun, 17 Oct 2021 12:50:44 +0800 Subject: [PATCH] Ftr: support custom registry group name on nacos for 1.5 (#1513) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Support Custom Registry GroupName on Nacos * Support Custom Registry GroupName on Nacos * 优化参数传递方式 Co-authored-by: Changeden --- common/constant/key.go | 1 + registry/nacos/listener.go | 7 ++++++- registry/nacos/registry.go | 15 +++++++++++---- registry/nacos/service_discovery.go | 3 +++ registry/service_instance.go | 1 + 5 files changed, 22 insertions(+), 5 deletions(-) diff --git a/common/constant/key.go b/common/constant/key.go index 731fcd1e87..bd161aba34 100644 --- a/common/constant/key.go +++ b/common/constant/key.go @@ -111,6 +111,7 @@ const ( ZONE_KEY = "zone" ZONE_FORCE_KEY = "zone.force" REGISTRY_TTL_KEY = "registry.ttl" + REGISTRY_GROUP_KEY = "registry.group" ) const ( diff --git a/registry/nacos/listener.go b/registry/nacos/listener.go index df33c58c28..5557f87316 100644 --- a/registry/nacos/listener.go +++ b/registry/nacos/listener.go @@ -188,7 +188,12 @@ func (nl *nacosListener) startListen() error { return perrors.New("nacos naming namingClient stopped") } serviceName := getSubscribeName(nl.listenUrl) - nl.subscribeParam = &vo.SubscribeParam{ServiceName: serviceName, SubscribeCallback: nl.Callback} + groupName := nl.listenUrl.GetParam(constant.REGISTRY_GROUP_KEY, defaultGroup) + nl.subscribeParam = &vo.SubscribeParam{ + ServiceName: serviceName, + SubscribeCallback: nl.Callback, + GroupName: groupName, + } go func() { _ = nl.namingClient.Client().Subscribe(nl.subscribeParam) }() diff --git a/registry/nacos/registry.go b/registry/nacos/registry.go index e5dde7e660..09f7ad9d86 100644 --- a/registry/nacos/registry.go +++ b/registry/nacos/registry.go @@ -83,7 +83,7 @@ func appendParam(target *bytes.Buffer, url *common.URL, key string) { } } -func createRegisterParam(url *common.URL, serviceName string) vo.RegisterInstanceParam { +func createRegisterParam(url *common.URL, serviceName string, groupName string) vo.RegisterInstanceParam { category := getCategory(url) params := make(map[string]string) @@ -111,6 +111,7 @@ func createRegisterParam(url *common.URL, serviceName string) vo.RegisterInstanc Healthy: true, Ephemeral: true, ServiceName: serviceName, + GroupName: groupName, } return instance } @@ -118,7 +119,8 @@ func createRegisterParam(url *common.URL, serviceName string) vo.RegisterInstanc // Register will register the service @url to its nacos registry center func (nr *nacosRegistry) Register(url *common.URL) error { serviceName := getServiceName(url) - param := createRegisterParam(url, serviceName) + groupName := nr.URL.GetParam(constant.GROUP_KEY, defaultGroup) + param := createRegisterParam(url, serviceName, groupName) isRegistry, err := nr.namingClient.Client().RegisterInstance(param) if err != nil { return err @@ -130,7 +132,7 @@ func (nr *nacosRegistry) Register(url *common.URL) error { return nil } -func createDeregisterParam(url *common.URL, serviceName string) vo.DeregisterInstanceParam { +func createDeregisterParam(url *common.URL, serviceName string, groupName string) vo.DeregisterInstanceParam { if len(url.Ip) == 0 { url.Ip = localIP } @@ -142,13 +144,15 @@ func createDeregisterParam(url *common.URL, serviceName string) vo.DeregisterIns Ip: url.Ip, Port: uint64(port), ServiceName: serviceName, + GroupName: groupName, Ephemeral: true, } } func (nr *nacosRegistry) DeRegister(url *common.URL) error { serviceName := getServiceName(url) - param := createDeregisterParam(url, serviceName) + groupName := nr.URL.GetParam(constant.GROUP_KEY, defaultGroup) + param := createDeregisterParam(url, serviceName, groupName) isDeRegistry, err := nr.namingClient.Client().DeregisterInstance(param) if err != nil { return err @@ -181,6 +185,9 @@ func (nr *nacosRegistry) Subscribe(url *common.URL, notifyListener registry.Noti return perrors.New("nacosRegistry is not available.") } + groupName := nr.GetParam(constant.GROUP_KEY, defaultGroup) + url.SetParam(constant.REGISTRY_GROUP_KEY, groupName) // update to registry.group + listener, err := nr.subscribe(url) if err != nil { if !nr.IsAvailable() { diff --git a/registry/nacos/service_discovery.go b/registry/nacos/service_discovery.go index 4ced60dc36..dc2caa5194 100644 --- a/registry/nacos/service_discovery.go +++ b/registry/nacos/service_discovery.go @@ -160,6 +160,7 @@ func (n *nacosServiceDiscovery) GetInstances(serviceName string) []registry.Serv Enable: ins.Enable, Healthy: ins.Healthy, Metadata: metadata, + GroupName: n.group, }) } @@ -215,6 +216,7 @@ func (n *nacosServiceDiscovery) GetRequestInstances(serviceNames []string, offse func (n *nacosServiceDiscovery) AddListener(listener *registry.ServiceInstancesChangedListener) error { return n.namingClient.Client().Subscribe(&vo.SubscribeParam{ ServiceName: listener.ServiceName, + GroupName: n.group, SubscribeCallback: func(services []model.SubscribeService, err error) { if err != nil { logger.Errorf("Could not handle the subscribe notification because the err is not nil."+ @@ -236,6 +238,7 @@ func (n *nacosServiceDiscovery) AddListener(listener *registry.ServiceInstancesC Enable: service.Enable, Healthy: true, Metadata: metadata, + GroupName: n.group, }) } diff --git a/registry/service_instance.go b/registry/service_instance.go index 43a1640eea..58d700bdb0 100644 --- a/registry/service_instance.go +++ b/registry/service_instance.go @@ -56,6 +56,7 @@ type DefaultServiceInstance struct { Enable bool Healthy bool Metadata map[string]string + GroupName string } // GetId will return this instance's id. It should be unique.