本文内容:
通过cse mesher,用一个rest server,一个client,创建微服务,并实现服务发现和调用。
本文的参考意义:
mesher支持多语言,本文提供的server/client,读者可根据开发习惯,使用任何语言实现。只要满足以下要求,任何语言均可使用cse mesher:
1,server提供rest接口
2,client设置http代理,同时请求url格式为:http://{serviceName}/api
环境准备:
1,一个华为云账号,及该账号的ak/sk,请参考这里。
2,一个rest server,提供"/hello"接口。
Go示例:
package main
import (
"log"
"net/http"
)
func hello(w http.ResponseWriter, r *http.Request) {
msg := "Hello, Mesher!"
log.Println(msg)
w.WriteHeader(http.StatusOK)
w.Write([]byte(msg + "\n"))
}
func main() {
http.DefaultServeMux.HandleFunc("/hello", hello)
err := http.ListenAndServe("127.0.0.1:80", http.DefaultServeMux)
if err != nil {
log.Fatal(err)
}
}
复制代码
3,一个rest client。
Go示例:
package main
import (
"io/ioutil"
"log"
"net/http"
"net/url"
)
func main() {
proxy, _ := url.Parse("http://127.0.0.1:30101") //将mesher设置为http代理
c := http.Client{
Transport: &http.Transport{
Proxy: http.ProxyURL(proxy),
},
}
u := "http://myServer/hello" //访问myServer,使用服务名进行访问
req, err := http.NewRequest(http.MethodGet, u, nil)
if err != nil {
log.Fatal(err)
}
resp, err := c.Do(req)
if err != nil {
log.Fatal(err)
}
r, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
log.Printf("Get response: %s", string(r))
}
复制代码
Curl示例:
curl -x http://127.0.0.1:30101 http://myServer/hello # -x用于指定http代理
复制代码
备注:
如何指定http代理,不同的语言,以及在不同的代码中,方法不同。部分语言的默认http client会自动识别环境变量http_proxy
或HTTP_PROXY
作为http代理。若无法自动识别这两个环境变量,读者可自行在代码中设置,如本文client示例。
4,mesher软件包,从这里下载
mesher复制两份,分别给server/client使用:
网络拓扑:
操作步骤
1,启动server端
./server
复制代码
2,为server端绑定一个mesher
2.1 进入server端mesher目录:
cd myServer/mesher/
复制代码
2.2 在conf/microservice.yaml里配置server端服务名:
APPLICATION_ID: mesher
service_description:
name: myServer #服务名
version: 0.0.1
复制代码
2.3 在conf/auth.yaml里配置aksk:
cse:
credentials:
accessKey: ***
secretKey: ***
project:
复制代码
2.4 在conf/chassis.yaml里配置mesher监听地址:
cse:
protocols:
http:
listenAddress: 192.168.1.22:30111 #监听地址,填外部ip
复制代码
2.5 为mesher设置环境变量SPECIFIC_ADDR
export SPECIFIC_ADDR=127.0.0.1:80 #用于设置mesher的后端服务地址,即我的go server监听地址
复制代码
2.6 启动mesher
./mesher
复制代码
2.7 确认mesher是否启动成功:
mesher成功为后端进行代理(注意:此处的请求是发送至mesher)
网络拓扑的右侧已经ok
2.8 登录华为云CSE服务治理界面,可以看到mesher已经为我们注册了一个微服务:
3,为client端绑定一个mesher
3.1 进入client端mesher目录
cd myClient/mesher/
复制代码
3.2 在conf/microservice.yaml里配置client端服务名:
APPLICATION_ID: mesher
service_description:
name: myClient #服务名
version: 0.0.1
复制代码
3.3 在conf/auth.yaml里配置aksk:
cse:
credentials:
accessKey: ***
secretKey: ***
project:
复制代码
3.4 在conf/chassis.yaml里配置mesher监听地址:
cse:
protocols:
http:
listenAddress: 192.168.1.22:30101 #监听地址,填外部ip
复制代码
3.5 启动mesher
./mesher
复制代码
注意:
mesher启动后实际监听两个地址:
在设置http代理时,只能设置127.0.0.1:30101,不可以设置192.168.1.22:30101 即http proxy必须设置为: http://127.0.0.1:{meshPort}
3.6 登录华为云CSE服务治理界面,可以看到mesher已经为我们注册了两个微服务:
4,启动client端
curl client:
go client:
5,登录华为云CSE服务治理界面,可以看到两个微服务产生调用关系