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 44e6349  [feature: add urlRegister & refactor http_client.go] (#8)
44e6349 is described below

commit 44e6349b9366b22e398b6f4cf2ef18af8aafe0ad
Author: Lisandro <[email protected]>
AuthorDate: Thu May 5 17:55:20 2022 +0800

    [feature: add urlRegister & refactor http_client.go] (#8)
    
    Co-authored-by: lishuo <[email protected]>
---
 README.md                          | 47 ++++++++++++++++++++++-
 clients/client_factory.go          | 76 ++++++++++++++++++++++++++++++--------
 clients/http_client/http_client.go | 17 +++++++++
 example/http_client/main.go        | 20 ++++++++++
 model/http_url_register.go         |  2 +-
 5 files changed, 143 insertions(+), 19 deletions(-)

diff --git a/README.md b/README.md
index 1e0ce50..c835acc 100644
--- a/README.md
+++ b/README.md
@@ -26,10 +26,25 @@ $ go get -u github.com/apache/incubator-shenyu-client-golang
 ## How to use
 
 **1.Fist make sure The ShenYuAdmin is Started, and ShenYuAdmin service active 
port is 9095.**
+```go
+Or you will see this error :
+       
+2022-05-05 15:24:28 [WARN] 
[github.com/incubator-shenyu-client-golang/example/http_client/main.go:53] 
MetaDataRegister has error: The errCode is ->:503, The errMsg is  ->:Please 
check ShenYu admin service status
+
+caused by:
+Post "http://127.0.0.1:9095/shenyu-client/register-metadata": dial tcp 
127.0.0.1:9095: connect: connection refused
+2022-05-05 15:24:28 [INFO] 
[github.com/incubator-shenyu-client-golang/example/http_client/main.go:55] 
finish register metadata ,the result is-> false
+2022-05-05 15:24:28 [WARN] 
[github.com/incubator-shenyu-client-golang/example/http_client/main.go:68] 
UrlRegister has error: The errCode is ->:503, The errMsg is  ->:Please check 
ShenYu admin service status
+
+caused by:
+Post "http://127.0.0.1:9095/shenyu-client/register-uri": dial tcp 
127.0.0.1:9095: connect: connection refused
+2022-05-05 15:24:28 [INFO] 
[github.com/incubator-shenyu-client-golang/example/http_client/main.go:70] 
finish UrlRegister ,the result is-> false
+       
+```
 
 **2.Step 1 Get shenyu_admin_client. (Register service need this)**
 
-```sh
+```go
 //init ShenYuAdminClient
 adminClient := &model.ShenYuAdminClient{
     UserName: "admin",  //require user provide
@@ -60,7 +75,7 @@ this is ShenYu Admin client token -> 
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2
 
 
 **3.Step 2 Register MetaData to ShenYu GateWay. (Need step 1 token to invoke)**
-```sh
+```go
 //MetaDataRegister(Need Step 1 toekn adminToken.AdminTokenData)
 metaData := &model.MetaDataRegister{
                AppName: "testMetaDataRegister", //require user provide
@@ -79,3 +94,31 @@ metaData := &model.MetaDataRegister{
 When Register success , you will see this :  
 finish register metadata ,the result is-> true
 ```
+
+**4.Step 3  Url  Register  to ShenYu GateWay. (Need step 1 token to invoke)**
+```go
+//URIRegister(Need Step 1 toekn adminToken.AdminTokenData)
+//init urlRegister
+       urlRegister := &model.URIRegister{
+               Protocol:    "testMetaDataRegister", //require user provide
+               AppName:     "testURLRegister",      //require user provide
+               ContextPath: "contextPath",          //require user provide
+               RPCType:     constants.RPCTYPE_HTTP, //require user provide
+               Host:        "127.0.0.1",            //require user provide
+               Port:        "8080",                 //require user provide
+       }
+       result, err = clients.UrlRegister(adminToken.AdminTokenData, 
urlRegister)
+       if err != nil {
+               logger.Warn("UrlRegister has error:", err)
+       }
+       logger.Info("finish UrlRegister ,the result is->", result)
+```
+
+## Entire Success log
+```go
+2022-05-05 15:43:56 [INFO] 
[github.com/incubator-shenyu-client-golang/clients/admin_client/shenyu_admin_client.go:51]
 Get ShenYu Admin response, body is -> {200 login dashboard user success {1 
admin 1 true 2018-06-23 15:12:22 2022-03-09 15:08:14 
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyTmFtZSI6ImFkbWluIiwiZXhwIjoxNjUxODIzMDM2fQ.gMzPKaNlXEd1Q517qQamOpg358W9L0-0cZN3lkk06WE}}
+2022-05-05 15:43:56 [INFO] 
[github.com/incubator-shenyu-client-golang/example/http_client/main.go:40] this 
is ShenYu Admin client token -> 
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyTmFtZSI6ImFkbWluIiwiZXhwIjoxNjUxODIzMDM2fQ.gMzPKaNlXEd1Q517qQamOpg358W9L0-0cZN3lkk06WE
+2022-05-05 15:43:57 [INFO] 
[github.com/incubator-shenyu-client-golang/example/http_client/main.go:55] 
finish register metadata ,the result is-> true
+2022-05-05 15:43:57 [INFO] 
[github.com/incubator-shenyu-client-golang/example/http_client/main.go:70] 
finish UrlRegister ,the result is-> true
+
+```
diff --git a/clients/client_factory.go b/clients/client_factory.go
index 65df35f..1f20dba 100644
--- a/clients/client_factory.go
+++ b/clients/client_factory.go
@@ -43,12 +43,7 @@ func NewShenYuAdminClient(client *model.ShenYuAdminClient) 
(adminToken model.Adm
                params[constants.ADMIN_PASSWORD] = client.Password
        }
 
-       tokenRequest := &model.ShenYuCommonRequest{
-               Url:       constants.DEFAULT_SHENYU_ADMIN_URL + 
constants.DEFAULT_SHENYU_TOKEN,
-               Header:    headers,
-               Params:    params,
-               TimeoutMs: constants.DEFAULT_REQUEST_TIME,
-       }
+       tokenRequest := initShenYuCommonRequest(headers, params, 
constants.DEFAULT_SHENYU_TOKEN, "token")
 
        adminToken, err = admin_client.GetShenYuAdminUser(tokenRequest)
        if err == nil {
@@ -62,10 +57,7 @@ func NewShenYuAdminClient(client *model.ShenYuAdminClient) 
(adminToken model.Adm
  * Register metadata to ShenYu Gateway
  **/
 func RegisterMetaData(adminTokenData model.AdminTokenData, metaData 
*model.MetaDataRegister) (registerResult bool, err error) {
-       headers := map[string][]string{}
-       headers[constants.DEFAULT_CONNECTION] = 
[]string{constants.DEFAULT_CONNECTION_VALUE}
-       headers[constants.DEFAULT_CONTENT_TYPE] = 
[]string{constants.DEFAULT_CONTENT_TYPE_VALUE}
-       headers[constants.DEFAULT_TOKEN_HEADER_KEY] = 
[]string{adminTokenData.Token}
+       headers := adapterHeaders(adminTokenData)
 
        params := map[string]string{}
        if metaData.AppName == "" || metaData.Path == "" || metaData.Host == "" 
|| metaData.Port == "" {
@@ -77,12 +69,7 @@ func RegisterMetaData(adminTokenData model.AdminTokenData, 
metaData *model.MetaD
        params["port"] = metaData.Port
        params["rpcType"] = constants.RPCTYPE_HTTP
 
-       tokenRequest := &model.ShenYuCommonRequest{
-               Url:       constants.DEFAULT_SHENYU_ADMIN_URL + 
constants.DEFAULT_BASE_PATH + constants.REGISTER_METADATA,
-               Header:    headers,
-               Params:    params,
-               TimeoutMs: constants.DEFAULT_REQUEST_TIME,
-       }
+       tokenRequest := initShenYuCommonRequest(headers, params, 
constants.REGISTER_METADATA, "")
 
        registerResult, err = http_client.RegisterMetaData(tokenRequest)
        if err == nil {
@@ -91,3 +78,60 @@ func RegisterMetaData(adminTokenData model.AdminTokenData, 
metaData *model.MetaD
                return false, err
        }
 }
+
+/**
+ * Url Register to ShenYu Gateway
+ **/
+func UrlRegister(adminTokenData model.AdminTokenData, urlMetaData 
*model.URIRegister) (registerResult bool, err error) {
+       headers := adapterHeaders(adminTokenData)
+
+       params := map[string]string{}
+       if urlMetaData.AppName == "" || urlMetaData.RPCType == "" || 
urlMetaData.Host == "" || urlMetaData.Port == "" {
+               return false, 
shenyu_error.NewShenYuError(constants.MISS_PARAM_ERROR_CODE, 
constants.MISS_PARAM_ERROR_MSG, err)
+       }
+       params["protocol"] = constants.RPCTYPE_HTTP
+       params["appName"] = urlMetaData.AppName
+       params["contextPath"] = urlMetaData.ContextPath
+       params["host"] = urlMetaData.Host
+       params["port"] = urlMetaData.Port
+       params["rpcType"] = urlMetaData.RPCType
+
+       tokenRequest := initShenYuCommonRequest(headers, params, 
constants.REGISTER_URI, "")
+
+       registerResult, err = http_client.DoUrlRegister(tokenRequest)
+       if err == nil {
+               return registerResult, nil
+       } else {
+               return false, err
+       }
+}
+
+/**
+ * initShenYuCommonRequest
+ **/
+func initShenYuCommonRequest(headers map[string][]string, params 
map[string]string, requestUrl string, busType string) 
*model.ShenYuCommonRequest {
+       url := ""
+       if len(busType) > 0 {
+               url = constants.DEFAULT_SHENYU_ADMIN_URL + requestUrl //get 
Token
+       } else {
+               url = constants.DEFAULT_SHENYU_ADMIN_URL + 
constants.DEFAULT_BASE_PATH + requestUrl //register
+       }
+       tokenRequest := &model.ShenYuCommonRequest{
+               Url:       url,
+               Header:    headers,
+               Params:    params,
+               TimeoutMs: constants.DEFAULT_REQUEST_TIME,
+       }
+       return tokenRequest
+}
+
+/**
+ * adapter require Headers
+ **/
+func adapterHeaders(adminTokenData model.AdminTokenData) map[string][]string {
+       headers := map[string][]string{}
+       headers[constants.DEFAULT_CONNECTION] = 
[]string{constants.DEFAULT_CONNECTION_VALUE}
+       headers[constants.DEFAULT_CONTENT_TYPE] = 
[]string{constants.DEFAULT_CONTENT_TYPE_VALUE}
+       headers[constants.DEFAULT_TOKEN_HEADER_KEY] = 
[]string{adminTokenData.Token}
+       return headers
+}
diff --git a/clients/http_client/http_client.go 
b/clients/http_client/http_client.go
index 4f59170..9873b2e 100644
--- a/clients/http_client/http_client.go
+++ b/clients/http_client/http_client.go
@@ -33,6 +33,23 @@ import (
 func RegisterMetaData(shenYuCommonRequest *model.ShenYuCommonRequest) (result 
bool, err error) {
        var response *http.Response
        response, err = shenYuCommonRequest.HttpClient.Request(http.MethodPost, 
shenYuCommonRequest.Url, shenYuCommonRequest.Header, 
constants.DEFAULT_REQUEST_TIME, shenYuCommonRequest.Params)
+       return handleCommonResponse(response, err)
+
+}
+
+/**
+ * Url Register to ShenYu Gateway
+ **/
+func DoUrlRegister(shenYuCommonRequest *model.ShenYuCommonRequest) (result 
bool, err error) {
+       var response *http.Response
+       response, err = shenYuCommonRequest.HttpClient.Request(http.MethodPost, 
shenYuCommonRequest.Url, shenYuCommonRequest.Header, 
constants.DEFAULT_REQUEST_TIME, shenYuCommonRequest.Params)
+       return handleCommonResponse(response, err)
+}
+
+/**
+ * handleCommonResponse
+ **/
+func handleCommonResponse(response *http.Response, err error) (bool, error) {
        if response == nil {
                err = 
shenyu_error.NewShenYuError(constants.MISS_SHENYU_ADMIN_ERROR_CODE, 
constants.MISS_SHENYU_ADMIN_ERROR_MSG, err)
                return false, err
diff --git a/example/http_client/main.go b/example/http_client/main.go
index bd27990..4859908 100644
--- a/example/http_client/main.go
+++ b/example/http_client/main.go
@@ -19,6 +19,7 @@ package main
 
 import (
        "github.com/incubator-shenyu-client-golang/clients"
+       "github.com/incubator-shenyu-client-golang/common/constants"
        "github.com/incubator-shenyu-client-golang/model"
        "github.com/wonderivan/logger"
 )
@@ -38,6 +39,8 @@ func main() {
        if err == nil {
                logger.Info("this is ShenYu Admin client token ->", 
adminToken.AdminTokenData.Token)
        }
+
+       //init MetaDataRegister
        metaData := &model.MetaDataRegister{
                AppName: "testMetaDataRegister", //require user provide
                Path:    "/your/path",           //require user provide
@@ -50,4 +53,21 @@ func main() {
                logger.Warn("MetaDataRegister has error:", err)
        }
        logger.Info("finish register metadata ,the result is->", result)
+
+       //init urlRegister
+       urlRegister := &model.URIRegister{
+               Protocol:    "testMetaDataRegister", //require user provide
+               AppName:     "testURLRegister",      //require user provide
+               ContextPath: "contextPath",          //require user provide
+               RPCType:     constants.RPCTYPE_HTTP, //require user provide
+               Host:        "127.0.0.1",            //require user provide
+               Port:        "8080",                 //require user provide
+       }
+       result, err = clients.UrlRegister(adminToken.AdminTokenData, 
urlRegister)
+       if err != nil {
+               logger.Warn("UrlRegister has error:", err)
+       }
+       logger.Info("finish UrlRegister ,the result is->", result)
+
+       //do you logic
 }
diff --git a/model/http_url_register.go b/model/http_url_register.go
index 988efd3..712fe95 100644
--- a/model/http_url_register.go
+++ b/model/http_url_register.go
@@ -26,5 +26,5 @@ type URIRegister struct {
        ContextPath string `json:"contextPath"`
        RPCType     string `json:"rpcType"`
        Host        string `json:"host"`
-       Port        int    `json:"port"`
+       Port        string `json:"port"`
 }

Reply via email to