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