You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shenyu.apache.org by xi...@apache.org on 2022/07/01 08:46:10 UTC

[incubator-shenyu-client-golang] branch main updated: [Refactor: nacos_client impl sdk_client_factory] (#23)

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/incubator-shenyu-client-golang.git


The following commit(s) were added to refs/heads/main by this push:
     new 7190bda  [Refactor: nacos_client impl sdk_client_factory] (#23)
7190bda is described below

commit 7190bda28877960ff6c776bba85ef6a8b46ab16a
Author: Lisandro <li...@163.com>
AuthorDate: Fri Jul 1 16:46:05 2022 +0800

    [Refactor: nacos_client impl sdk_client_factory] (#23)
    
    * [Refactor: nacos_client impl sdk_client_factory]
    
    * [Feature: fix ci lint.]
    
    Co-authored-by: lishuo <li...@mesomia-tech.com>
---
 clients/nacos_client/nacos_client.go               | 61 +++++++++++++++++++---
 common/constants/const.go                          |  2 +
 ...k_client_interface.go => sdk_client_factory.go} | 24 +++++----
 common/shenyu_sdk_client/sdk_client_interface.go   |  2 +-
 example/nacos_client/main.go                       | 56 ++++++++++++++++++--
 5 files changed, 122 insertions(+), 23 deletions(-)

diff --git a/clients/nacos_client/nacos_client.go b/clients/nacos_client/nacos_client.go
index 1ed9d6d..c2d978a 100644
--- a/clients/nacos_client/nacos_client.go
+++ b/clients/nacos_client/nacos_client.go
@@ -18,13 +18,20 @@
 package nacos_client
 
 import (
-	"github.com/nacos-group/nacos-sdk-go/clients"
+	oriNc "github.com/nacos-group/nacos-sdk-go/clients"
 	"github.com/nacos-group/nacos-sdk-go/clients/naming_client"
 	"github.com/nacos-group/nacos-sdk-go/common/constant"
 	"github.com/nacos-group/nacos-sdk-go/vo"
 	"github.com/wonderivan/logger"
 )
 
+/**
+ * ShenYuNacosClient
+ **/
+type ShenYuNacosClient struct {
+	NacosClient *naming_client.NamingClient
+}
+
 /**
  * NacosClientParam
  **/
@@ -37,14 +44,18 @@ type NacosClientParam struct {
 /**
  * create nacos client
  **/
-func NewNacosClient(ncp *NacosClientParam) (clientProxy naming_client.INamingClient, err error) {
+func (nc *ShenYuNacosClient) NewClient(clientParam interface{}) (client interface{}, createResult bool, err error) {
+	ncp, ok := clientParam.(*NacosClientParam)
+	if !ok {
+		logger.Fatal("init nacos client error %+v:", err)
+	}
 	checkResult := len(ncp.IpAddr) > 0 && len(ncp.NamespaceId) > 0 && ncp.Port > 0
 	if checkResult {
 		client, err := ncp.initNacosClient()
 		if err != nil {
 			logger.Fatal("init nacos client error %+v:", err)
 		}
-		return client, nil
+		return client, true, nil
 	} else {
 		logger.Fatal("init nacos client param is missing please check")
 	}
@@ -68,7 +79,7 @@ func (ncp *NacosClientParam) initNacosClient() (clientProxy naming_client.INamin
 		constant.WithCacheDir("/tmp/nacos/cache"),
 	)
 
-	client, err := clients.NewNamingClient(
+	client, err := oriNc.NewNamingClient(
 		vo.NacosClientParam{
 			ClientConfig:  &cc,
 			ServerConfigs: sc,
@@ -82,13 +93,49 @@ func (ncp *NacosClientParam) initNacosClient() (clientProxy naming_client.INamin
 }
 
 /**
- * register nacos instance
+ * Register Instance to Nacos
  **/
-func RegisterNacosInstance(client naming_client.INamingClient, rip vo.RegisterInstanceParam) (registerResult bool, err error) {
-	registerResult, err = client.RegisterInstance(rip)
+func (nc *ShenYuNacosClient) RegisterServiceInstance(metaData interface{}) (registerResult bool, err error) {
+	rip, ok := metaData.(vo.RegisterInstanceParam)
+	if !ok {
+		logger.Fatal("init nacos client error %+v:", err)
+	}
+	registerResult, err = nc.NacosClient.RegisterInstance(rip)
 	if err != nil {
 		logger.Fatal("RegisterServiceInstance failure! ,error is :%+v", err)
 	}
 	logger.Info("RegisterServiceInstance,result:%+v\n\n,param:%+v \n\n", registerResult, rip)
 	return registerResult, nil
 }
+
+/**
+ * DeregisterServiceInstance
+ **/
+func (nc *ShenYuNacosClient) DeregisterServiceInstance(metaData interface{}) (registerResult bool, err error) {
+	rip, ok := metaData.(vo.DeregisterInstanceParam)
+	if !ok {
+		logger.Fatal("init nacos client error %+v:", err)
+	}
+	registerResult, err = nc.NacosClient.DeregisterInstance(rip)
+	if err != nil {
+		logger.Fatal("DeregisterServiceInstance failure! ,error is :%+v", err)
+	}
+	logger.Info("DeregisterServiceInstance,result:%+v\n\n,param:%+v \n\n", registerResult, rip)
+	return registerResult, nil
+}
+
+/**
+ * GetServiceInstanceInfo
+ **/
+func (nc *ShenYuNacosClient) GetServiceInstanceInfo(metaData interface{}) (instances interface{}, registerResult bool, err error) {
+	rip, ok := metaData.(vo.SelectInstancesParam)
+	if !ok {
+		logger.Fatal("init nacos client error %+v:", err)
+	}
+	instances, err = nc.NacosClient.SelectInstances(rip)
+	if err != nil {
+		logger.Fatal("GetServiceInstanceInfo failure! ,error is :%+v", err)
+	}
+	logger.Info("GetServiceInstanceInfo,result:%+v\n\n,param:%+v \n\n", instances, rip)
+	return instances, true, nil
+}
diff --git a/common/constants/const.go b/common/constants/const.go
index 8be52db..bb7238a 100644
--- a/common/constants/const.go
+++ b/common/constants/const.go
@@ -26,6 +26,8 @@ const (
 	DEFAULT_ADMIN_ACCOUNT    = "admin"
 	DEFAULT_REQUEST_TIME     = 1000
 	DEFAULT_ADMIN_SUCCESS    = "success"
+	NACOS_CLIENT             = "Nacos"
+	ZOOKEEPER_CLIENT         = "Zookeeper"
 
 	//System default key
 	ADMIN_USERNAME                  = "userName"
diff --git a/common/shenyu_sdk_client/sdk_client_interface.go b/common/shenyu_sdk_client/sdk_client_factory.go
similarity index 62%
copy from common/shenyu_sdk_client/sdk_client_interface.go
copy to common/shenyu_sdk_client/sdk_client_factory.go
index d2a182f..6a4905a 100644
--- a/common/shenyu_sdk_client/sdk_client_interface.go
+++ b/common/shenyu_sdk_client/sdk_client_factory.go
@@ -17,17 +17,21 @@
 
 package shenyu_sdk_client
 
-//mockgen -destination /mock_***_client.go  -package ***_client -source common/client_interface.go
+import (
+	"github.com/apache/incubator-shenyu-client-golang/clients/nacos_client"
+	"github.com/apache/incubator-shenyu-client-golang/common/constants"
+)
 
 /**
- * common SdkClient interface(except http client)
+ * Get client by clientName
  **/
-type SdkClient interface {
-	NewClient(clientParam interface{}) (client interface{}, createResult bool, err error)
-
-	DeregisterServiceInstance(metaData interface{}) (registerResult bool, err error)
-
-	GetServiceInstanceInfo(metaData interface{}) (registerResult bool, err error)
-
-	RegisterServiceInstance(metaData interface{}) (registerResult bool, err error)
+func GetFactoryClient(clientName string) SdkClient {
+	switch clientName {
+	case constants.NACOS_CLIENT:
+		return &nacos_client.ShenYuNacosClient{}
+	//case constants.Zookeeper_CLIENT:
+	//	return &zk_client.ZkClient{}
+	default:
+		return nil
+	}
 }
diff --git a/common/shenyu_sdk_client/sdk_client_interface.go b/common/shenyu_sdk_client/sdk_client_interface.go
index d2a182f..53d588c 100644
--- a/common/shenyu_sdk_client/sdk_client_interface.go
+++ b/common/shenyu_sdk_client/sdk_client_interface.go
@@ -27,7 +27,7 @@ type SdkClient interface {
 
 	DeregisterServiceInstance(metaData interface{}) (registerResult bool, err error)
 
-	GetServiceInstanceInfo(metaData interface{}) (registerResult bool, err error)
+	GetServiceInstanceInfo(metaData interface{}) (Instances interface{}, registerResult bool, err error)
 
 	RegisterServiceInstance(metaData interface{}) (registerResult bool, err error)
 }
diff --git a/example/nacos_client/main.go b/example/nacos_client/main.go
index 2de72ce..c85af21 100644
--- a/example/nacos_client/main.go
+++ b/example/nacos_client/main.go
@@ -21,9 +21,12 @@ import (
 	"encoding/json"
 	"github.com/apache/incubator-shenyu-client-golang/clients/nacos_client"
 	"github.com/apache/incubator-shenyu-client-golang/common/constants"
+	"github.com/apache/incubator-shenyu-client-golang/common/shenyu_sdk_client"
 	"github.com/apache/incubator-shenyu-client-golang/model"
+	"github.com/nacos-group/nacos-sdk-go/clients/naming_client"
 	"github.com/nacos-group/nacos-sdk-go/vo"
 	"github.com/wonderivan/logger"
+	"time"
 )
 
 /**
@@ -31,6 +34,7 @@ import (
  **/
 func main() {
 
+	//Create nacos client start
 	//set nacos env configuration
 	ncp := &nacos_client.NacosClientParam{
 		IpAddr:      "console.nacos.io",
@@ -38,6 +42,18 @@ func main() {
 		NamespaceId: "e525eafa-f7d7-4029-83d9-008937f9d468",
 	}
 
+	sdkClient := shenyu_sdk_client.GetFactoryClient(constants.NACOS_CLIENT)
+	result, createResult, err := sdkClient.NewClient(ncp)
+	if !createResult && err != nil {
+		logger.Fatal("Create nacos client error : %+V", err)
+	}
+
+	nc := &nacos_client.ShenYuNacosClient{
+		NacosClient: result.(*naming_client.NamingClient),
+	}
+	//Create nacos client end
+
+	//RegisterServiceInstance start
 	//metaData is necessary param, this will be register to shenyu gateway to use
 	metaData := &model.URIRegister{
 		Protocol:    "testMetaDataRegister", //require user provide
@@ -58,18 +74,48 @@ func main() {
 		Enable:      true,        //require user provide
 		Healthy:     true,        //require user provide
 		Ephemeral:   true,        //require user provide
+		GroupName:   "group-a",   //require user provide
 		Metadata:    map[string]string{"contextPath": "contextPath", "uriMetadata": string(metaDataStringJson)},
 	}
 
-	client, err := nacos_client.NewNacosClient(ncp)
-	if err != nil {
-		logger.Fatal("create nacos client error : %+V", err)
+	registerResult, err := nc.RegisterServiceInstance(nacosRegisterInstance)
+	if !registerResult && err != nil {
+		logger.Fatal("Register nacos Instance error : %+V", err)
 	}
+	//RegisterServiceInstance end
 
-	registerResult, err := nacos_client.RegisterNacosInstance(client, nacosRegisterInstance)
-	if !registerResult && err != nil {
+	//GetServiceInstanceInfo start
+	queryData := vo.SelectInstancesParam{
+		ServiceName: "demo.go",
+		GroupName:   "group-a", //default: DEFAULT_GROUP
+		//Clusters:    []string{"cluster-a"}, // default: DEFAULT
+		HealthyOnly: true,
+	}
+
+	instanceInfo, result, err := nc.GetServiceInstanceInfo(queryData)
+	if result != false && err != nil {
 		logger.Fatal("Register nacos Instance error : %+V", err)
 	}
+	logger.Info(instanceInfo)
+	//GetServiceInstanceInfo end
+
+	time.Sleep(time.Second)
+
+	//DeregisterServiceInstance start
+	deregisterInstanceParam := vo.DeregisterInstanceParam{
+		Ip:          "10.0.0.10",
+		Port:        8848,
+		ServiceName: "demo.go",
+		Ephemeral:   true,
+		//Cluster:     "cluster-a", // default value is DEFAULT
+		GroupName: "group-a", // default value is DEFAULT_GROUP
+	}
+
+	serviceInstance, err := nc.DeregisterServiceInstance(deregisterInstanceParam)
+	if !serviceInstance && err != nil {
+		logger.Info("DeregisterServiceInstance result : %+V", serviceInstance)
+	}
+	//DeregisterServiceInstance end
 
 	//do your logic
 }