bingtianyiyan commented on code in PR #35:
URL:
https://github.com/apache/shenyu-client-golang/pull/35#discussion_r947400842
##########
clients/etcd_client/etcd_client.go:
##########
@@ -17,32 +17,185 @@
package etcd_client
+import (
+ "context"
+ "encoding/json"
+ "github.com/apache/shenyu-client-golang/model"
+ "github.com/wonderivan/logger"
+ clientv3 "go.etcd.io/etcd/client/v3"
+ "time"
+)
+
/**
* ShenYuEtcdClient
**/
type ShenYuEtcdClient struct {
Ecp *EtcdClientParam //EtcdClientParam
-
+ EtcdClient *clientv3.Client //EtcdClient
+ GlobalLease clientv3.LeaseID //global lease
}
/**
- * ConsulClientParam
+ * EtcdClientParam
**/
type EtcdClientParam struct {
+ EtcdServers []string //the customer etcd server address
+ UserName string //the customer etcd server userName
+ Password string //the customer etcd server pwd
+ TTL int64 //the customer etcd key rent
}
-func (sec ShenYuEtcdClient) NewClient(clientParam interface{}) (client
interface{}, createResult bool, err error) {
- panic("implement me")
+/**
+ * EtcdClient Const
+**/
+const (
+ //etcd connect dialTimeOut
+ timeOut = 5
+)
+
+/**
+ * init NewClient
+ **/
+func (sec *ShenYuEtcdClient) NewClient(clientParam interface{}) (client
interface{}, createResult bool, err error) {
+ ecp, ok := clientParam.(*EtcdClientParam)
+ if !ok {
+ logger.Fatal("The clientParam must not nil!")
+ }
+ if len(ecp.EtcdServers) > 0 {
+ //use customer param to create client
+ client, err := clientv3.New(clientv3.Config{
+ Endpoints: ecp.EtcdServers,
+ DialTimeout: timeOut * time.Second,
+ Username: ecp.UserName,
+ Password: ecp.Password,
+ })
+ if err == nil {
+ logger.Info("Create customer etcd client success!")
+ return &ShenYuEtcdClient{
+ Ecp: &EtcdClientParam{
+ EtcdServers: ecp.EtcdServers,
+ UserName: ecp.UserName,
+ Password: ecp.Password,
+ TTL: ecp.TTL,
+ },
+ EtcdClient: client,
+ }, true, nil
+ }
+ logger.Fatal("init etcd client error %+v:", err)
+ }
+ return
}
-func (sec ShenYuEtcdClient) DeregisterServiceInstance(metaData interface{})
(deRegisterResult bool, err error) {
- panic("implement me")
+/**
+DeregisterServiceInstance
+ */
+func (sec *ShenYuEtcdClient) DeregisterServiceInstance(metaData interface{})
(deRegisterResult bool, err error) {
+ mdr, ok := metaData.(*model.MetaDataRegister)
+ if !ok {
+ logger.Fatal("get etcd client metaData error %+v:", err)
+ }
+ key := mdr.AppName
+ ctx, cancel := context.WithTimeout(context.Background(),timeOut*
time.Second)
+ defer cancel()
+ _,err = sec.EtcdClient.Delete(ctx,key)
+ if err != nil{
+ return false, err
+ }
+ return true, nil
}
-func (sec ShenYuEtcdClient) GetServiceInstanceInfo(metaData interface{})
(instances interface{}, err error) {
- panic("implement me")
+/**
+* RegisterServiceInstance
+ */
+func (sec *ShenYuEtcdClient) GetServiceInstanceInfo(metaData interface{})
(instances interface{}, err error) {
+ mdr := sec.checkCommonParam(metaData, err)
+ key := mdr.AppName
+ var nodes []*model.MetaDataRegister
+ ctx, cancel := context.WithTimeout(context.Background(),timeOut*
time.Second)
+ defer cancel()
+ resp,err := sec.EtcdClient.Get(ctx,key)
+ if err != nil {
+ logger.Error("etcd Get data failure, err:", err)
+ return nil,err
+ }
+ node := new(model.MetaDataRegister)
+ err = json.Unmarshal(resp.Kvs[0].Value, node)
+ if err != nil {
+ return nil, err
+ }
+ nodes = append(nodes, node)
+ return nodes, nil
}
-func (sec ShenYuEtcdClient) RegisterServiceInstance(metaData interface{})
(registerResult bool, err error) {
- panic("implement me")
+/**
+* RegisterServiceInstance
+ **/
+func (sec *ShenYuEtcdClient) RegisterServiceInstance(metaData interface{})
(registerResult bool, err error) {
+ mdr := sec.checkCommonParam(metaData, err)
+ data, _ := json.Marshal(metaData)
+ if err != nil {
+ return false, err
+ }
+ key := mdr.AppName
+ ctx, cancel := context.WithTimeout(context.Background(),timeOut*
time.Second)
+ defer cancel()
+ _,err = sec.EtcdClient.Put(ctx, key, string(data))
+ if err != nil {
+ logger.Error("RegisterServiceInstance failure! ,error is :%+v",
err)
+ return false,err
+ }
+ logger.Info("RegisterServiceInstance,result:%+v", true)
+ return true, nil
+}
+
+/**
+* GenLeaseId //get etcd grant leaseId
Review Comment:
Because I found Shenyu_ go_ Whether the client deletes the configuration of
the registry, the design concept of configuration management and the etcd
provided by the Java client_ The configuration design concept registered in the
client management registry is different. Java provides a renewed key for etcd.
shenyu_ go_ The client design interface deregisterserviceinstance wants the
user to care about the deletion of the configuration center instead of
designing whether the key is automatically renewed in the SDK。so t attach
GenLeaseId method and not use
I can delete this method GenLeaseId and other unuse method
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]