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"`
}