This is an automated email from the ASF dual-hosted git repository.

xiaoyu pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/shenyu-client-golang.git


The following commit(s) were added to refs/heads/main by this push:
     new ffb5b6b  [Feature: refactor consul_meta_data_register.go] (#34)
ffb5b6b is described below

commit ffb5b6bf2d55342d5f5f03bf53e7edc8b99026f6
Author: Lisandro <[email protected]>
AuthorDate: Mon Aug 8 18:05:47 2022 +0800

    [Feature: refactor consul_meta_data_register.go] (#34)
    
    * [Feature: refactor consul_meta_data_register.go]
    
    * [Feature: add etcd docker-compose]
    
    * [Feature: Adjust consul test]
    
    * [Feature: Adjust consul docker compose]
    
    Co-authored-by: lishuo <[email protected]>
---
 clients/consul_client/consul_client.go             |  36 ++--
 .../etcd_client/etcd_client.go                     |  45 +++--
 common/constants/const.go                          |   1 +
 common/shenyu_sdk_client/sdk_client_factory.go     |   3 +
 doc/CONSUL_EN.md                                   | 179 ------------------
 docker-compose-consul.yml                          |   8 +-
 docker-compose-etcd.yml                            |  84 +++++++++
 example/consul_client/consul_client.go             |  54 +++---
 example/consul_client/consul_client_test.go        | 204 ++++++++++++---------
 model/common_meta_data_register.go                 |   3 -
 .../consul_meta_data_register.go                   |  25 +--
 .../etcd_meta_data_register.go                     |  24 +--
 12 files changed, 290 insertions(+), 376 deletions(-)

diff --git a/clients/consul_client/consul_client.go 
b/clients/consul_client/consul_client.go
index 0756157..45a56c5 100644
--- a/clients/consul_client/consul_client.go
+++ b/clients/consul_client/consul_client.go
@@ -93,7 +93,7 @@ func (scc *ShenYuConsulClient) NewClient(clientParam 
interface{}) (client interf
  **/
 func (scc *ShenYuConsulClient) DeregisterServiceInstance(metaData interface{}) 
(deRegisterResult bool, err error) {
        mdr := scc.checkCommonParam(metaData, err)
-       err = scc.ConsulClient.Agent().ServiceDeregister(mdr.AppName)
+       err = 
scc.ConsulClient.Agent().ServiceDeregister(mdr.ShenYuMetaData.AppName)
        if err != nil {
                logger.Fatal("DeregisterServiceInstance failure! ,error is 
:%+v", err)
        }
@@ -106,16 +106,18 @@ func (scc *ShenYuConsulClient) 
DeregisterServiceInstance(metaData interface{}) (
  **/
 func (scc *ShenYuConsulClient) GetServiceInstanceInfo(metaData interface{}) 
(instances interface{}, err error) {
        mdr := scc.checkCommonParam(metaData, err)
-       catalogService, _, err := 
scc.ConsulClient.Catalog().Service(mdr.AppName, "", nil)
+       catalogService, _, err := 
scc.ConsulClient.Catalog().Service(mdr.ShenYuMetaData.AppName, "", nil)
        if len(catalogService) > 0 && err == nil {
-               result := make([]*model.MetaDataRegister, len(catalogService))
+               result := make([]*model.ConsulMetaDataRegister, 
len(catalogService))
                for index, consulInstance := range catalogService {
-                       instance := &model.MetaDataRegister{
+                       instance := &model.ConsulMetaDataRegister{
                                ServiceId: consulInstance.ServiceID,
-                               AppName:   consulInstance.ServiceName,
-                               Host:      consulInstance.Address,
-                               Port:      
strconv.Itoa(consulInstance.ServicePort),
-                               //metaData:  consulInstance.ServiceMeta,  todo  
shenYu java MetaDataRegisterDTO boolean -> map
+                               ShenYuMetaData: &model.MetaDataRegister{
+                                       AppName: consulInstance.ServiceName,
+                                       Host:    consulInstance.Address,
+                                       Port:    
strconv.Itoa(consulInstance.ServicePort),
+                                       //metaData:  
consulInstance.ServiceMeta,  todo  shenYu java MetaDataRegisterDTO boolean -> 
map
+                               },
                        }
                        result[index] = instance
                        logger.Info("GetServiceInstanceInfo,instance:%+v", 
instance)
@@ -130,16 +132,16 @@ func (scc *ShenYuConsulClient) 
GetServiceInstanceInfo(metaData interface{}) (ins
  **/
 func (scc *ShenYuConsulClient) RegisterServiceInstance(metaData interface{}) 
(registerResult bool, err error) {
        mdr := scc.checkCommonParam(metaData, err)
-       port, _ := strconv.Atoi(mdr.Port)
+       port, _ := strconv.Atoi(mdr.ShenYuMetaData.Port)
        metaDataStringJson, _ := json.Marshal(metaData)
 
        //Integrate with MetaDataRegister
        registration := &api.AgentServiceRegistration{
-               ID:        mdr.AppName,
-               Name:      mdr.AppName,
+               ID:        mdr.ShenYuMetaData.AppName,
+               Name:      mdr.ShenYuMetaData.AppName,
                Port:      port,
-               Address:   mdr.Host,
-               Namespace: mdr.ContextPath,
+               Address:   mdr.ShenYuMetaData.Host,
+               Namespace: mdr.ShenYuMetaData.ContextPath,
                Meta:      map[string]string{"uriMetadata": 
string(metaDataStringJson)},
        }
 
@@ -148,7 +150,7 @@ func (scc *ShenYuConsulClient) 
RegisterServiceInstance(metaData interface{}) (re
                Timeout:                        
constants.DEFAULT_CONSUL_CHECK_TIMEOUT,
                Interval:                       
constants.DEFAULT_CONSUL_CHECK_INTERVAL,
                DeregisterCriticalServiceAfter: 
constants.DEFAULT_CONSUL_CHECK_DEREGISTER,
-               HTTP:                           
fmt.Sprintf("%s://%s:%d/actuator/health", mdr.RPCType, registration.Address, 
registration.Port),
+               HTTP:                           
fmt.Sprintf("%s://%s:%d/actuator/health", mdr.ShenYuMetaData.RPCType, 
registration.Address, registration.Port),
        }
        registration.Check = check
 
@@ -164,10 +166,10 @@ func (scc *ShenYuConsulClient) 
RegisterServiceInstance(metaData interface{}) (re
 /**
  * check common MetaDataRegister
  **/
-func (scc *ShenYuConsulClient) checkCommonParam(metaData interface{}, err 
error) *model.MetaDataRegister {
-       mdr, ok := metaData.(*model.MetaDataRegister)
+func (scc *ShenYuConsulClient) checkCommonParam(metaData interface{}, err 
error) *model.ConsulMetaDataRegister {
+       mdr, ok := metaData.(*model.ConsulMetaDataRegister)
        if !ok {
-               logger.Fatal("get zk client metaData error %+v:", err)
+               logger.Fatal("get consul client metaData error %+v:", err)
        }
        return mdr
 }
diff --git a/common/shenyu_sdk_client/sdk_client_factory.go 
b/clients/etcd_client/etcd_client.go
similarity index 52%
copy from common/shenyu_sdk_client/sdk_client_factory.go
copy to clients/etcd_client/etcd_client.go
index 1eb1acd..e8f8810 100644
--- a/common/shenyu_sdk_client/sdk_client_factory.go
+++ b/clients/etcd_client/etcd_client.go
@@ -15,27 +15,34 @@
  * limitations under the License.
  */
 
-package shenyu_sdk_client
+package etcd_client
 
-import (
-       "github.com/apache/shenyu-client-golang/clients/consul_client"
-       "github.com/apache/shenyu-client-golang/clients/nacos_client"
-       "github.com/apache/shenyu-client-golang/clients/zk_client"
-       "github.com/apache/shenyu-client-golang/common/constants"
-)
+/**
+ * ShenYuEtcdClient
+ **/
+type ShenYuEtcdClient struct {
+       Ecp *EtcdClientParam //EtcdClientParam
+
+}
 
 /**
- * Get client by clientName
+ * ConsulClientParam
  **/
-func GetFactoryClient(clientName string) SdkClient {
-       switch clientName {
-       case constants.NACOS_CLIENT:
-               return &nacos_client.ShenYuNacosClient{}
-       case constants.ZOOKEEPER_CLIENT:
-               return &zk_client.ShenYuZkClient{}
-       case constants.CONSUL_CLIENT:
-               return &consul_client.ShenYuConsulClient{}
-       default:
-               return nil
-       }
+type EtcdClientParam struct {
+}
+
+func (sec ShenYuEtcdClient) NewClient(clientParam interface{}) (client 
interface{}, createResult bool, err error) {
+       panic("implement me")
+}
+
+func (sec ShenYuEtcdClient) DeregisterServiceInstance(metaData interface{}) 
(deRegisterResult bool, err error) {
+       panic("implement me")
+}
+
+func (sec ShenYuEtcdClient) GetServiceInstanceInfo(metaData interface{}) 
(instances interface{}, err error) {
+       panic("implement me")
+}
+
+func (sec ShenYuEtcdClient) RegisterServiceInstance(metaData interface{}) 
(registerResult bool, err error) {
+       panic("implement me")
 }
diff --git a/common/constants/const.go b/common/constants/const.go
index 7c30259..342987d 100644
--- a/common/constants/const.go
+++ b/common/constants/const.go
@@ -29,6 +29,7 @@ const (
        NACOS_CLIENT                    = "Nacos"
        ZOOKEEPER_CLIENT                = "Zookeeper"
        CONSUL_CLIENT                   = "Consul"
+       ETCD_CLIENT                     = "Etcd"
        DEFAULT_ZOOKEEPER_CLIENT_TIME   = 10
        DEFAULT_CONSUL_CHECK_TIMEOUT    = "1s"
        DEFAULT_CONSUL_CHECK_INTERVAL   = "3s"
diff --git a/common/shenyu_sdk_client/sdk_client_factory.go 
b/common/shenyu_sdk_client/sdk_client_factory.go
index 1eb1acd..8cdc52a 100644
--- a/common/shenyu_sdk_client/sdk_client_factory.go
+++ b/common/shenyu_sdk_client/sdk_client_factory.go
@@ -19,6 +19,7 @@ package shenyu_sdk_client
 
 import (
        "github.com/apache/shenyu-client-golang/clients/consul_client"
+       "github.com/apache/shenyu-client-golang/clients/etcd_client"
        "github.com/apache/shenyu-client-golang/clients/nacos_client"
        "github.com/apache/shenyu-client-golang/clients/zk_client"
        "github.com/apache/shenyu-client-golang/common/constants"
@@ -35,6 +36,8 @@ func GetFactoryClient(clientName string) SdkClient {
                return &zk_client.ShenYuZkClient{}
        case constants.CONSUL_CLIENT:
                return &consul_client.ShenYuConsulClient{}
+       case constants.ETCD_CLIENT:
+               return &etcd_client.ShenYuEtcdClient{}
        default:
                return nil
        }
diff --git a/doc/CONSUL_EN.md b/doc/CONSUL_EN.md
index 760fdc0..1b8734b 100644
--- a/doc/CONSUL_EN.md
+++ b/doc/CONSUL_EN.md
@@ -1,183 +1,4 @@
 
----
-## 以Http方式注册到ShenYu网关
-
-**1.Fist make sure your Consul env is correct,the set this necessary param.**
-```go
-    //Create ShenYuConsulClient  start
-    ccp := &consul_client.ConsulClientParam{
-        Host:  "127.0.0.1",  //user choice provide
-        Port:  8500,         //user choice provide
-        Token: "",
-        }
-    
-    sdkClient := shenyu_sdk_client.GetFactoryClient(constants.CONSUL_CLIENT)
-    client, createResult, err := sdkClient.NewClient(ccp)
-    
-    if !createResult && err != nil {
-    logger.Fatal("Create ShenYuConsulClient error : %+V", err)
-    }
-    
-    scc := client.(*consul_client.ShenYuConsulClient)
-    //Create ShenYuConsulClient end
-```
-
-**2. Prepare your service metaData to register**
-```go
-//metaData is necessary param, this will be register to shenyu gateway to use
-    uuid1, _ := uuid.GenerateUUID()
-    uuid2, _ := uuid.GenerateUUID()
-    uuid3, _ := uuid.GenerateUUID()
-
-    //RegisterServiceInstance start
-    //init MetaDataRegister
-    metaData1 := &model.MetaDataRegister{
-        ServiceId: uuid1,
-        AppName:   "testMetaDataRegister1", //require user provide
-        Path:      "/your/path1",           //require user provide
-        Enabled:   true,                    //require user provide
-        Host:      "127.0.0.1",             //require user provide
-        Port:      "8080",                  //require user provide
-        RPCType:   "http",                  //require user provide
-    }
-    
-    metaData2 := &model.MetaDataRegister{
-        ServiceId: uuid2,
-        AppName:   "testMetaDataRegister2", //require user provide
-        Path:      "/your/path2",           //require user provide
-        Enabled:   true,                    //require user provide
-        Host:      "127.0.0.1",             //require user provide
-        Port:      "8181",                  //require user provide
-        RPCType:   "http",                  //require user provide
-    }
-    
-    metaData3 := &model.MetaDataRegister{
-        ServiceId: uuid3,
-        AppName:   "testMetaDataRegister3", //require user provide
-        Path:      "/your/path3",           //require user provide
-        Enabled:   true,                    //require user provide
-        Host:      "127.0.0.1",             //require user provide
-        Port:      "8282",                  //require user provide
-        RPCType:   "http",                  //require user provide
-    }
-```
-
-**3.use client to invoke RegisterServiceInstance**
-```go
-   //register multiple metaData
-    registerResult1, err := scc.RegisterServiceInstance(metaData1)
-    if !registerResult1 && err != nil {
-    logger.Fatal("Register consul Instance error : %+V", err)
-    }
-    
-    registerResult2, err := scc.RegisterServiceInstance(metaData2)
-    if !registerResult2 && err != nil {
-    logger.Fatal("Register consul Instance error : %+V", err)
-    }
-    
-    registerResult3, err := scc.RegisterServiceInstance(metaData3)
-    if !registerResult3 && err != nil {
-    logger.Fatal("Register consul Instance error : %+V", err)
-    }
-//RegisterServiceInstance end
-    //do your logic
-```
-
-**4.use client to invoke DeregisterServiceInstance**
-```go
-    //your can chose to invoke,not require
-    //DeregisterServiceInstance start
-    logger.Info("> DeregisterServiceInstance start")
-    deRegisterResult1, err := scc.DeregisterServiceInstance(metaData1)
-    if err != nil {
-    panic(err)
-    }
-    
-    deRegisterResult2, err := scc.DeregisterServiceInstance(metaData2)
-    if err != nil {
-    panic(err)
-    }
-    
-    deRegisterResult3, err := scc.DeregisterServiceInstance(metaData3)
-    if err != nil {
-    panic(err)
-    }
-    
-    if deRegisterResult1 && deRegisterResult2 && deRegisterResult3 {
-    logger.Info("DeregisterServiceInstance success !")
-    }
-    //DeregisterServiceInstance end
-```
-
-**5.use client to GetServiceInstanceInfo**
-```go
-    //GetServiceInstanceInfo start
-    instanceDetail, err := scc.GetServiceInstanceInfo(metaData1)
-    nodes1, ok := instanceDetail.([]*model.MetaDataRegister)
-        if !ok {
-        logger.Fatal("get consul client metaData error %+v:", err)
-    }
-    
-    //range nodes
-    for index, node := range nodes1 {
-    nodeJson, err := json.Marshal(node)
-    if err == nil {
-        logger.Info("GetNodesInfo ,success Index", index, string(nodeJson))
-        }
-    }
-    
-    instanceDetail2, err := scc.GetServiceInstanceInfo(metaData2)
-    nodes2, ok := instanceDetail2.([]*model.MetaDataRegister)
-        if !ok {
-        logger.Fatal("get consul client metaData error %+v:", err)
-    }
-    
-    //range nodes2
-    for index, node := range nodes2 {
-    nodeJson, err := json.Marshal(node)
-    if err == nil {
-        logger.Info("GetNodesInfo ,success Index", index, string(nodeJson))
-        }
-    }
-
-    //range nodes3
-    instanceDetail3, err := scc.GetServiceInstanceInfo(metaData3)
-    nodes3, ok := instanceDetail3.([]*model.MetaDataRegister)
-    if !ok {
-        logger.Fatal("get consul client metaData error %+v:", err)
-        }
-    
-    for index, node := range nodes3 {
-    nodeJson, err := json.Marshal(node)
-    if err == nil {
-        logger.Info("GetNodesInfo ,success Index", index, string(nodeJson))
-        }
-    }
-//GetServiceInstanceInfo end
-
-```
-
-## Entire Success log
-```go
-
-2022-07-26 18:05:43 [INFO] 
[github.com/apache/shenyu-client-golang/clients/consul_client/consul_client.go:77]
 Create default consul client success!
-2022-07-26 18:05:43 [INFO] 
[github.com/apache/shenyu-client-golang/clients/consul_client/consul_client.go:160]
 RegisterServiceInstance,result:true
-2022-07-26 18:05:43 [INFO] 
[github.com/apache/shenyu-client-golang/clients/consul_client/consul_client.go:160]
 RegisterServiceInstance,result:true
-2022-07-26 18:05:43 [INFO] 
[github.com/apache/shenyu-client-golang/clients/consul_client/consul_client.go:160]
 RegisterServiceInstance,result:true
-2022-07-26 18:05:44 [INFO] 
[github.com/apache/shenyu-client-golang/clients/consul_client/consul_client.go:121]
 GetServiceInstanceInfo,instance:&{AppName:testMetaDataRegister1 Path: 
ContextPath: RuleName: RPCType: Enabled:false Host:172.22.0.5 Port:8080 
PluginNames:[] RegisterMetaData:false TimeMillis:0 
ServiceId:testMetaDataRegister1}
-2022-07-26 18:05:44 [INFO] 
[github.com/apache/shenyu-client-golang/example/consul_client/consul_client.go:115]
 GetNodesInfo ,success Index 0 
{"appName":"testMetaDataRegister1","path":"","contextPath":"","ruleName":"","rpcType":"","enabled":false,"host":"172.22.0.5","port":"8080","pluginNames":null,"registerMetaData":false,"timeMillis":0,"serviceId":"testMetaDataRegister1"}
-2022-07-26 18:05:44 [INFO] 
[github.com/apache/shenyu-client-golang/clients/consul_client/consul_client.go:121]
 GetServiceInstanceInfo,instance:&{AppName:testMetaDataRegister2 Path: 
ContextPath: RuleName: RPCType: Enabled:false Host:172.22.0.5 Port:8181 
PluginNames:[] RegisterMetaData:false TimeMillis:0 
ServiceId:testMetaDataRegister2}
-2022-07-26 18:05:44 [INFO] 
[github.com/apache/shenyu-client-golang/example/consul_client/consul_client.go:129]
 GetNodesInfo ,success Index 0 
{"appName":"testMetaDataRegister2","path":"","contextPath":"","ruleName":"","rpcType":"","enabled":false,"host":"172.22.0.5","port":"8181","pluginNames":null,"registerMetaData":false,"timeMillis":0,"serviceId":"testMetaDataRegister2"}
-2022-07-26 18:05:44 [INFO] 
[github.com/apache/shenyu-client-golang/clients/consul_client/consul_client.go:121]
 GetServiceInstanceInfo,instance:&{AppName:testMetaDataRegister3 Path: 
ContextPath: RuleName: RPCType: Enabled:false Host:172.22.0.5 Port:8282 
PluginNames:[] RegisterMetaData:false TimeMillis:0 
ServiceId:testMetaDataRegister3}
-2022-07-26 18:05:44 [INFO] 
[github.com/apache/shenyu-client-golang/example/consul_client/consul_client.go:143]
 GetNodesInfo ,success Index 0 
{"appName":"testMetaDataRegister3","path":"","contextPath":"","ruleName":"","rpcType":"","enabled":false,"host":"172.22.0.5","port":"8282","pluginNames":null,"registerMetaData":false,"timeMillis":0,"serviceId":"testMetaDataRegister3"}
-2022-07-26 18:05:44 [INFO] 
[github.com/apache/shenyu-client-golang/example/consul_client/consul_client.go:150]
 > DeregisterServiceInstance start
-2022-07-26 18:05:44 [INFO] 
[github.com/apache/shenyu-client-golang/clients/consul_client/consul_client.go:100]
 DeregisterServiceInstance,result:true
-2022-07-26 18:05:44 [INFO] 
[github.com/apache/shenyu-client-golang/clients/consul_client/consul_client.go:100]
 DeregisterServiceInstance,result:true
-2022-07-26 18:05:44 [INFO] 
[github.com/apache/shenyu-client-golang/clients/consul_client/consul_client.go:100]
 DeregisterServiceInstance,result:true
-2022-07-26 18:05:44 [INFO] 
[github.com/apache/shenyu-client-golang/example/consul_client/consul_client.go:167]
 DeregisterServiceInstance success !
-
-```
-
 
 ---
 ## The Consul type Register
diff --git a/docker-compose-consul.yml b/docker-compose-consul.yml
index c29ced1..1e1230a 100644
--- a/docker-compose-consul.yml
+++ b/docker-compose-consul.yml
@@ -22,7 +22,7 @@ services:
     restart: always
     networks:
       - shenyu
-    command: agent -server -client=0.0.0.0 -bootstrap-expect=3 -node=consul1
+    command: agent -server -client=0.0.0.0 -bind 0.0.0.0 -bootstrap-expect=3 
-node=consul1
     volumes:
       - ./data/consul/consul1/data:/consul/data
       - ./data/consul/consul1/config:/consul/config
@@ -33,7 +33,7 @@ services:
     restart: always
     networks:
       - shenyu
-    command: agent -server -client=0.0.0.0 -retry-join=consul1 -node=consul2
+    command: agent -server -client=0.0.0.0 -bind 0.0.0.0 -retry-join=consul1 
-node=consul2
     volumes:
       - ./data/consul/consul2/data:/consul/data
       - ./data/consul/consul2/config:/consul/config
@@ -44,7 +44,7 @@ services:
     restart: always
     networks:
       - shenyu
-    command: agent -server -client=0.0.0.0 -retry-join=consul1 -node=consul3
+    command: agent -server -client=0.0.0.0 -bind 0.0.0.0 -retry-join=consul1 
-node=consul3
     volumes:
       - ./data/consul/consul3/data:/consul/data
       - ./data/consul/consul3/config:/consul/config
@@ -57,7 +57,7 @@ services:
       - 8500:8500
     networks:
       - shenyu
-    command: agent -client=0.0.0.0 -retry-join=consul1 -ui -node=client1
+    command: agent -client=0.0.0.0 -bind 0.0.0.0 -retry-join=consul1 -ui 
-node=client1
     volumes:
       - ./data/consul/consul4/data:/consul/data
       - ./data/consul/consul4/config:/consul/config
diff --git a/docker-compose-etcd.yml b/docker-compose-etcd.yml
new file mode 100644
index 0000000..c4e3f0a
--- /dev/null
+++ b/docker-compose-etcd.yml
@@ -0,0 +1,84 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+version: "3.1"
+
+services:
+  etcd1:
+    image: docker.io/bitnami/etcd:latest
+    container_name: etcd1
+    restart: always
+    environment:
+      - ALLOW_NONE_AUTHENTICATION=yes
+      - ETCD_NAME=etcd1
+      - ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd1:2380
+      - ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380
+      - ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379
+      - ETCD_ADVERTISE_CLIENT_URLS=http://etcd1:2379
+      - ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster
+      - 
ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380
+      - ETCD_INITIAL_CLUSTER_STATE=new
+    networks:
+      - shenyu
+    ports:
+      - 2379:2379
+    volumes:
+      - ./store/etcd1/data:/etcd_data
+
+  etcd2:
+    image: docker.io/bitnami/etcd:latest
+    container_name: etcd2
+    restart: always
+    environment:
+      - ALLOW_NONE_AUTHENTICATION=yes
+      - ETCD_NAME=etcd2
+      - ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd2:2380
+      - ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380
+      - ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379
+      - ETCD_ADVERTISE_CLIENT_URLS=http://etcd2:2379
+      - ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster
+      - 
ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380
+      - ETCD_INITIAL_CLUSTER_STATE=new
+    networks:
+      - shenyu
+    ports:
+      - 2379:2379
+    volumes:
+      - ./store/etcd2/data:/etcd_data
+
+  etcd3:
+    image: docker.io/bitnami/etcd:latest
+    container_name: etcd3
+    restart: always
+    environment:
+      - ALLOW_NONE_AUTHENTICATION=yes
+      - ETCD_NAME=etcd3
+      - ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd3:2380
+      - ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380
+      - ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379
+      - ETCD_ADVERTISE_CLIENT_URLS=http://etcd3:2379
+      - ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster
+      - 
ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380
+      - ETCD_INITIAL_CLUSTER_STATE=new
+    networks:
+      - shenyu
+    ports:
+      - 2379:2379
+    volumes:
+      - ./store/etcd3/data:/etcd_data
+
+networks:
+  shenyu:
+    name: shenyu
diff --git a/example/consul_client/consul_client.go 
b/example/consul_client/consul_client.go
index a40a406..509ab16 100644
--- a/example/consul_client/consul_client.go
+++ b/example/consul_client/consul_client.go
@@ -52,34 +52,40 @@ func main() {
 
        //RegisterServiceInstance start
        //init MetaDataRegister
-       metaData1 := &model.MetaDataRegister{
+       metaData1 := &model.ConsulMetaDataRegister{
                ServiceId: uuid1,
-               AppName:   "testMetaDataRegister1", //require user provide
-               Path:      "/your/path1",           //require user provide
-               Enabled:   true,                    //require user provide
-               Host:      "127.0.0.1",             //require user provide
-               Port:      "8080",                  //require user provide
-               RPCType:   "http",                  //require user provide
+               ShenYuMetaData: &model.MetaDataRegister{
+                       AppName: "testMetaDataRegister1", //require user provide
+                       Path:    "/your/path1",           //require user provide
+                       Enabled: true,                    //require user provide
+                       Host:    "127.0.0.1",             //require user provide
+                       Port:    "8080",                  //require user provide
+                       RPCType: "http",                  //require user provide
+               },
        }
 
-       metaData2 := &model.MetaDataRegister{
+       metaData2 := &model.ConsulMetaDataRegister{
                ServiceId: uuid2,
-               AppName:   "testMetaDataRegister2", //require user provide
-               Path:      "/your/path2",           //require user provide
-               Enabled:   true,                    //require user provide
-               Host:      "127.0.0.1",             //require user provide
-               Port:      "8181",                  //require user provide
-               RPCType:   "http",                  //require user provide
+               ShenYuMetaData: &model.MetaDataRegister{
+                       AppName: "testMetaDataRegister2", //require user provide
+                       Path:    "/your/path2",           //require user provide
+                       Enabled: true,                    //require user provide
+                       Host:    "127.0.0.1",             //require user provide
+                       Port:    "8181",                  //require user provide
+                       RPCType: "http",                  //require user provide
+               },
        }
 
-       metaData3 := &model.MetaDataRegister{
+       metaData3 := &model.ConsulMetaDataRegister{
                ServiceId: uuid3,
-               AppName:   "testMetaDataRegister3", //require user provide
-               Path:      "/your/path3",           //require user provide
-               Enabled:   true,                    //require user provide
-               Host:      "127.0.0.1",             //require user provide
-               Port:      "8282",                  //require user provide
-               RPCType:   "http",                  //require user provide
+               ShenYuMetaData: &model.MetaDataRegister{
+                       AppName: "testMetaDataRegister3", //require user provide
+                       Path:    "/your/path3",           //require user provide
+                       Enabled: true,                    //require user provide
+                       Host:    "127.0.0.1",             //require user provide
+                       Port:    "8282",                  //require user provide
+                       RPCType: "http",                  //require user provide
+               },
        }
 
        //register multiple metaData
@@ -103,7 +109,7 @@ func main() {
 
        //GetServiceInstanceInfo start
        instanceDetail, err := scc.GetServiceInstanceInfo(metaData1)
-       nodes1, ok := instanceDetail.([]*model.MetaDataRegister)
+       nodes1, ok := instanceDetail.([]*model.ConsulMetaDataRegister)
        if !ok {
                logger.Fatal("get consul client metaData error %+v:", err)
        }
@@ -117,7 +123,7 @@ func main() {
        }
 
        instanceDetail2, err := scc.GetServiceInstanceInfo(metaData2)
-       nodes2, ok := instanceDetail2.([]*model.MetaDataRegister)
+       nodes2, ok := instanceDetail2.([]*model.ConsulMetaDataRegister)
        if !ok {
                logger.Fatal("get consul client metaData error %+v:", err)
        }
@@ -132,7 +138,7 @@ func main() {
 
        //range nodes3
        instanceDetail3, err := scc.GetServiceInstanceInfo(metaData3)
-       nodes3, ok := instanceDetail3.([]*model.MetaDataRegister)
+       nodes3, ok := instanceDetail3.([]*model.ConsulMetaDataRegister)
        if !ok {
                logger.Fatal("get consul client metaData error %+v:", err)
        }
diff --git a/example/consul_client/consul_client_test.go 
b/example/consul_client/consul_client_test.go
index 05aab4c..15227e7 100644
--- a/example/consul_client/consul_client_test.go
+++ b/example/consul_client/consul_client_test.go
@@ -70,34 +70,40 @@ func TestRegisterServiceInstance(t *testing.T) {
 
        //RegisterServiceInstance start
        //init MetaDataRegister
-       metaData1 := &model.MetaDataRegister{
+       metaData1 := &model.ConsulMetaDataRegister{
                ServiceId: uuid1,
-               AppName:   "testMetaDataRegister1", //require user provide
-               Path:      "/your/path1",           //require user provide
-               Enabled:   true,                    //require user provide
-               Host:      "127.0.0.1",             //require user provide
-               Port:      "8080",                  //require user provide
-               RPCType:   "http",                  //require user provide
+               ShenYuMetaData: &model.MetaDataRegister{
+                       AppName: "testMetaDataRegister1", //require user provide
+                       Path:    "/your/path1",           //require user provide
+                       Enabled: true,                    //require user provide
+                       Host:    "127.0.0.1",             //require user provide
+                       Port:    "8080",                  //require user provide
+                       RPCType: "http",                  //require user provide
+               },
        }
 
-       metaData2 := &model.MetaDataRegister{
+       metaData2 := &model.ConsulMetaDataRegister{
                ServiceId: uuid2,
-               AppName:   "testMetaDataRegister2", //require user provide
-               Path:      "/your/path2",           //require user provide
-               Enabled:   true,                    //require user provide
-               Host:      "127.0.0.1",             //require user provide
-               Port:      "8181",                  //require user provide
-               RPCType:   "http",                  //require user provide
+               ShenYuMetaData: &model.MetaDataRegister{
+                       AppName: "testMetaDataRegister2", //require user provide
+                       Path:    "/your/path2",           //require user provide
+                       Enabled: true,                    //require user provide
+                       Host:    "127.0.0.1",             //require user provide
+                       Port:    "8181",                  //require user provide
+                       RPCType: "http",                  //require user provide
+               },
        }
 
-       metaData3 := &model.MetaDataRegister{
+       metaData3 := &model.ConsulMetaDataRegister{
                ServiceId: uuid3,
-               AppName:   "testMetaDataRegister3", //require user provide
-               Path:      "/your/path3",           //require user provide
-               Enabled:   true,                    //require user provide
-               Host:      "127.0.0.1",             //require user provide
-               Port:      "8282",                  //require user provide
-               RPCType:   "http",                  //require user provide
+               ShenYuMetaData: &model.MetaDataRegister{
+                       AppName: "testMetaDataRegister3", //require user provide
+                       Path:    "/your/path3",           //require user provide
+                       Enabled: true,                    //require user provide
+                       Host:    "127.0.0.1",             //require user provide
+                       Port:    "8282",                  //require user provide
+                       RPCType: "http",                  //require user provide
+               },
        }
 
        //register multiple metaData
@@ -138,34 +144,40 @@ func TestDeregisterServiceInstance(t *testing.T) {
 
        //RegisterServiceInstance start
        //init MetaDataRegister
-       metaData1 := &model.MetaDataRegister{
+       metaData1 := &model.ConsulMetaDataRegister{
                ServiceId: uuid1,
-               AppName:   "testMetaDataRegister1", //require user provide
-               Path:      "/your/path1",           //require user provide
-               Enabled:   true,                    //require user provide
-               Host:      "127.0.0.1",             //require user provide
-               Port:      "8080",                  //require user provide
-               RPCType:   "http",                  //require user provide
+               ShenYuMetaData: &model.MetaDataRegister{
+                       AppName: "testMetaDataRegister1", //require user provide
+                       Path:    "/your/path1",           //require user provide
+                       Enabled: true,                    //require user provide
+                       Host:    "127.0.0.1",             //require user provide
+                       Port:    "8080",                  //require user provide
+                       RPCType: "http",                  //require user provide
+               },
        }
 
-       metaData2 := &model.MetaDataRegister{
+       metaData2 := &model.ConsulMetaDataRegister{
                ServiceId: uuid2,
-               AppName:   "testMetaDataRegister2", //require user provide
-               Path:      "/your/path2",           //require user provide
-               Enabled:   true,                    //require user provide
-               Host:      "127.0.0.1",             //require user provide
-               Port:      "8181",                  //require user provide
-               RPCType:   "http",                  //require user provide
+               ShenYuMetaData: &model.MetaDataRegister{
+                       AppName: "testMetaDataRegister2", //require user provide
+                       Path:    "/your/path2",           //require user provide
+                       Enabled: true,                    //require user provide
+                       Host:    "127.0.0.1",             //require user provide
+                       Port:    "8181",                  //require user provide
+                       RPCType: "http",                  //require user provide
+               },
        }
 
-       metaData3 := &model.MetaDataRegister{
+       metaData3 := &model.ConsulMetaDataRegister{
                ServiceId: uuid3,
-               AppName:   "testMetaDataRegister3", //require user provide
-               Path:      "/your/path3",           //require user provide
-               Enabled:   true,                    //require user provide
-               Host:      "127.0.0.1",             //require user provide
-               Port:      "8282",                  //require user provide
-               RPCType:   "http",                  //require user provide
+               ShenYuMetaData: &model.MetaDataRegister{
+                       AppName: "testMetaDataRegister3", //require user provide
+                       Path:    "/your/path3",           //require user provide
+                       Enabled: true,                    //require user provide
+                       Host:    "127.0.0.1",             //require user provide
+                       Port:    "8282",                  //require user provide
+                       RPCType: "http",                  //require user provide
+               },
        }
 
        //register multiple metaData
@@ -222,34 +234,40 @@ func TestGetServiceInstanceInfo(t *testing.T) {
 
        //RegisterServiceInstance start
        //init MetaDataRegister
-       metaData1 := &model.MetaDataRegister{
+       metaData1 := &model.ConsulMetaDataRegister{
                ServiceId: uuid1,
-               AppName:   "testMetaDataRegister1", //require user provide
-               Path:      "/your/path1",           //require user provide
-               Enabled:   true,                    //require user provide
-               Host:      "127.0.0.1",             //require user provide
-               Port:      "8080",                  //require user provide
-               RPCType:   "http",                  //require user provide
+               ShenYuMetaData: &model.MetaDataRegister{
+                       AppName: "testMetaDataRegister1", //require user provide
+                       Path:    "/your/path1",           //require user provide
+                       Enabled: true,                    //require user provide
+                       Host:    "127.0.0.1",             //require user provide
+                       Port:    "8080",                  //require user provide
+                       RPCType: "http",                  //require user provide
+               },
        }
 
-       metaData2 := &model.MetaDataRegister{
+       metaData2 := &model.ConsulMetaDataRegister{
                ServiceId: uuid2,
-               AppName:   "testMetaDataRegister2", //require user provide
-               Path:      "/your/path2",           //require user provide
-               Enabled:   true,                    //require user provide
-               Host:      "127.0.0.1",             //require user provide
-               Port:      "8181",                  //require user provide
-               RPCType:   "http",                  //require user provide
+               ShenYuMetaData: &model.MetaDataRegister{
+                       AppName: "testMetaDataRegister2", //require user provide
+                       Path:    "/your/path2",           //require user provide
+                       Enabled: true,                    //require user provide
+                       Host:    "127.0.0.1",             //require user provide
+                       Port:    "8181",                  //require user provide
+                       RPCType: "http",                  //require user provide
+               },
        }
 
-       metaData3 := &model.MetaDataRegister{
+       metaData3 := &model.ConsulMetaDataRegister{
                ServiceId: uuid3,
-               AppName:   "testMetaDataRegister3", //require user provide
-               Path:      "/your/path3",           //require user provide
-               Enabled:   true,                    //require user provide
-               Host:      "127.0.0.1",             //require user provide
-               Port:      "8282",                  //require user provide
-               RPCType:   "http",                  //require user provide
+               ShenYuMetaData: &model.MetaDataRegister{
+                       AppName: "testMetaDataRegister3", //require user provide
+                       Path:    "/your/path3",           //require user provide
+                       Enabled: true,                    //require user provide
+                       Host:    "127.0.0.1",             //require user provide
+                       Port:    "8282",                  //require user provide
+                       RPCType: "http",                  //require user provide
+               },
        }
 
        //register multiple metaData
@@ -269,19 +287,19 @@ func TestGetServiceInstanceInfo(t *testing.T) {
 
        //get nodes
        instanceDetail, err := scc.GetServiceInstanceInfo(metaData1)
-       nodes1, ok := instanceDetail.([]*model.MetaDataRegister)
+       nodes1, ok := instanceDetail.([]*model.ConsulMetaDataRegister)
        assert.NotNil(t, nodes1)
        assert.True(t, ok)
        assert.Nil(t, err)
 
        instanceDetail2, err := scc.GetServiceInstanceInfo(metaData2)
-       nodes2, ok := instanceDetail2.([]*model.MetaDataRegister)
+       nodes2, ok := instanceDetail2.([]*model.ConsulMetaDataRegister)
        assert.NotNil(t, nodes2)
        assert.True(t, ok)
        assert.Nil(t, err)
 
        instanceDetail3, err := scc.GetServiceInstanceInfo(metaData3)
-       nodes3, ok := instanceDetail3.([]*model.MetaDataRegister)
+       nodes3, ok := instanceDetail3.([]*model.ConsulMetaDataRegister)
        assert.NotNil(t, nodes3)
        assert.True(t, ok)
        assert.Nil(t, err)
@@ -312,34 +330,40 @@ func TestEntireConsulFunction(t *testing.T) {
 
        //RegisterServiceInstance start
        //init MetaDataRegister
-       metaData1 := &model.MetaDataRegister{
+       metaData1 := &model.ConsulMetaDataRegister{
                ServiceId: uuid1,
-               AppName:   "testMetaDataRegister1", //require user provide
-               Path:      "/your/path1",           //require user provide
-               Enabled:   true,                    //require user provide
-               Host:      "127.0.0.1",             //require user provide
-               Port:      "8080",                  //require user provide
-               RPCType:   "http",                  //require user provide
+               ShenYuMetaData: &model.MetaDataRegister{
+                       AppName: "testEntireMetaDataRegister1", //require user 
provide
+                       Path:    "/your/entire/path1",          //require user 
provide
+                       Enabled: true,                          //require user 
provide
+                       Host:    "127.0.0.1",                   //require user 
provide
+                       Port:    "8080",                        //require user 
provide
+                       RPCType: "http",                        //require user 
provide
+               },
        }
 
-       metaData2 := &model.MetaDataRegister{
+       metaData2 := &model.ConsulMetaDataRegister{
                ServiceId: uuid2,
-               AppName:   "testMetaDataRegister2", //require user provide
-               Path:      "/your/path2",           //require user provide
-               Enabled:   true,                    //require user provide
-               Host:      "127.0.0.1",             //require user provide
-               Port:      "8181",                  //require user provide
-               RPCType:   "http",                  //require user provide
+               ShenYuMetaData: &model.MetaDataRegister{
+                       AppName: "testEntireMetaDataRegister2", //require user 
provide
+                       Path:    "/your/entire/path2",          //require user 
provide
+                       Enabled: true,                          //require user 
provide
+                       Host:    "127.0.0.1",                   //require user 
provide
+                       Port:    "8181",                        //require user 
provide
+                       RPCType: "http",                        //require user 
provide
+               },
        }
 
-       metaData3 := &model.MetaDataRegister{
+       metaData3 := &model.ConsulMetaDataRegister{
                ServiceId: uuid3,
-               AppName:   "testMetaDataRegister3", //require user provide
-               Path:      "/your/path3",           //require user provide
-               Enabled:   true,                    //require user provide
-               Host:      "127.0.0.1",             //require user provide
-               Port:      "8282",                  //require user provide
-               RPCType:   "http",                  //require user provide
+               ShenYuMetaData: &model.MetaDataRegister{
+                       AppName: "testEntireMetaDataRegister3", //require user 
provide
+                       Path:    "/your/entire/path3",          //require user 
provide
+                       Enabled: true,                          //require user 
provide
+                       Host:    "127.0.0.1",                   //require user 
provide
+                       Port:    "8282",                        //require user 
provide
+                       RPCType: "http",                        //require user 
provide
+               },
        }
 
        //register multiple metaData
@@ -359,19 +383,19 @@ func TestEntireConsulFunction(t *testing.T) {
 
        //get nodes
        instanceDetail1, err := scc.GetServiceInstanceInfo(metaData1)
-       nodes1, ok := instanceDetail1.([]*model.MetaDataRegister)
+       nodes1, ok := instanceDetail1.([]*model.ConsulMetaDataRegister)
        assert.NotNil(t, nodes1)
        assert.True(t, ok)
        assert.Nil(t, err)
 
        instanceDetail2, err := scc.GetServiceInstanceInfo(metaData2)
-       nodes2, ok := instanceDetail2.([]*model.MetaDataRegister)
+       nodes2, ok := instanceDetail2.([]*model.ConsulMetaDataRegister)
        assert.NotNil(t, nodes2)
        assert.True(t, ok)
        assert.Nil(t, err)
 
        instanceDetail3, err := scc.GetServiceInstanceInfo(metaData3)
-       nodes3, ok := instanceDetail3.([]*model.MetaDataRegister)
+       nodes3, ok := instanceDetail3.([]*model.ConsulMetaDataRegister)
        assert.NotNil(t, nodes3)
        assert.True(t, ok)
        assert.Nil(t, err)
diff --git a/model/common_meta_data_register.go 
b/model/common_meta_data_register.go
index ec6b522..8721e7d 100644
--- a/model/common_meta_data_register.go
+++ b/model/common_meta_data_register.go
@@ -32,7 +32,4 @@ type MetaDataRegister struct {
        PluginNames      []interface{} `json:"pluginNames"`
        RegisterMetaData bool          `json:"registerMetaData"`
        TimeMillis       int64         `json:"timeMillis"`
-
-       //consul need use this
-       ServiceId string `json:"serviceId"`
 }
diff --git a/common/shenyu_sdk_client/sdk_client_factory.go 
b/model/consul_meta_data_register.go
similarity index 56%
copy from common/shenyu_sdk_client/sdk_client_factory.go
copy to model/consul_meta_data_register.go
index 1eb1acd..d252cfb 100644
--- a/common/shenyu_sdk_client/sdk_client_factory.go
+++ b/model/consul_meta_data_register.go
@@ -15,27 +15,12 @@
  * limitations under the License.
  */
 
-package shenyu_sdk_client
-
-import (
-       "github.com/apache/shenyu-client-golang/clients/consul_client"
-       "github.com/apache/shenyu-client-golang/clients/nacos_client"
-       "github.com/apache/shenyu-client-golang/clients/zk_client"
-       "github.com/apache/shenyu-client-golang/common/constants"
-)
+package model
 
 /**
- * Get client by clientName
+ * The ConsulMetaDataRegister
  **/
-func GetFactoryClient(clientName string) SdkClient {
-       switch clientName {
-       case constants.NACOS_CLIENT:
-               return &nacos_client.ShenYuNacosClient{}
-       case constants.ZOOKEEPER_CLIENT:
-               return &zk_client.ShenYuZkClient{}
-       case constants.CONSUL_CLIENT:
-               return &consul_client.ShenYuConsulClient{}
-       default:
-               return nil
-       }
+type ConsulMetaDataRegister struct {
+       ServiceId      string            `json:"serviceId"`
+       ShenYuMetaData *MetaDataRegister `json:"metaData"`
 }
diff --git a/common/shenyu_sdk_client/sdk_client_factory.go 
b/model/etcd_meta_data_register.go
similarity index 56%
copy from common/shenyu_sdk_client/sdk_client_factory.go
copy to model/etcd_meta_data_register.go
index 1eb1acd..599aded 100644
--- a/common/shenyu_sdk_client/sdk_client_factory.go
+++ b/model/etcd_meta_data_register.go
@@ -15,27 +15,11 @@
  * limitations under the License.
  */
 
-package shenyu_sdk_client
-
-import (
-       "github.com/apache/shenyu-client-golang/clients/consul_client"
-       "github.com/apache/shenyu-client-golang/clients/nacos_client"
-       "github.com/apache/shenyu-client-golang/clients/zk_client"
-       "github.com/apache/shenyu-client-golang/common/constants"
-)
+package model
 
 /**
- * Get client by clientName
+ * The EtcdMetaDataRegister
  **/
-func GetFactoryClient(clientName string) SdkClient {
-       switch clientName {
-       case constants.NACOS_CLIENT:
-               return &nacos_client.ShenYuNacosClient{}
-       case constants.ZOOKEEPER_CLIENT:
-               return &zk_client.ShenYuZkClient{}
-       case constants.CONSUL_CLIENT:
-               return &consul_client.ShenYuConsulClient{}
-       default:
-               return nil
-       }
+type EtcdMetaDataRegister struct {
+       ShenYuMetaData *MetaDataRegister `json:"metaData"`
 }

Reply via email to