最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

零聲Golang云原生

2022-09-06 14:57 作者:先填寫用戶名字  | 我要投稿

golang/云原生/Docker/DevOps/K8S/持續(xù)集成/分布式/etcd/ipfs

Go 云原生應用實戰(zhàn):

啟動注冊中心

docker run -d -p 30100:30100 servicecomb/service-center(已報名零聲go 底部評)

初始化Go工程

go mod init github.com/go-chassis/go-chassis-examples/hello go get github.com/go-chassis/go-chassis/v2

工程目錄規(guī)劃

可以創(chuàng)建一個server(名稱任意)文件夾,這個就是一個微服務(wù)的目錄

mkdir server

目錄結(jié)構(gòu)

servicecomb: ?registry: ? ? address: http://127.0.0.1:30100 ?protocols: ? ? rest: ? ? ? listenAddress: 127.0.0.1:9000

最小化配置

在chassis.yaml中涵蓋了幾乎所有的配置,不過想要啟動只需要2個簡單的配置

servicecomb: ?registry: ? ? address: http://127.0.0.1:30100 ?protocols: ? ? rest: ? ? ? listenAddress: 127.0.0.1:9000

復制

也就是服務(wù)監(jiān)聽地址和注冊中心地址

在microservice.yaml里定義微服務(wù)信息,只需要一個簡單的微服務(wù)名即可,它還有大量的其他高級特性,我們將后續(xù)在高級特性中介紹

servicecomb: ?service: ? ?name: HelloServer

復制

編寫業(yè)務(wù)邏輯

是時候編寫自己的API了

//通常持有一批API,并定義API Patternstype HelloResource struct {}//業(yè)務(wù)APIfunc (r *HelloResource) SayHi(b *rf.Context) { b.Write([]byte("hello, go chassis")) return}//定義所有的API Patterns,用于API路由func (r *HelloResource) URLPatterns() []rf.Route { return []rf.Route{ {Method: http.MethodGet, Path: "/hello", ResourceFunc: r.SayHi}, }}

復制

之后僅需要注冊即可

chassis.RegisterSchema("rest", &HelloResource{})

復制

啟動服務(wù)

啟動很簡單,只需要編寫如下內(nèi)容

if err := chassis.Init(); err != nil { openlog.Fatal("Init failed." + err.Error()) return}chassis.Run()

復制

編譯執(zhí)行

go build main.go./main

復制

驗證:訪問UIhttp://127.0.0.1:30103

額外可以看到自動生成的open API文檔

直接訪問服務(wù)

curl http://127.0.0.1:9000/hello

復制

調(diào)用服務(wù)

接著我們需要調(diào)用這個服務(wù)

創(chuàng)建一個新的微服務(wù)

mkdir client

復制

定義微服務(wù)

在chassis.yaml中定義另一個監(jiān)聽地址

servicecomb: ?registry: ? ? ?address: http://127.0.0.1:30100 ?protocols: ? ?rest: ? ? ?listenAddress: 127.0.0.1:8000

復制

在microservice.yaml中定義微服務(wù)名

servicecomb: ?service: ? ?name: HelloClient

復制

#編寫客戶端

為了簡單這里只需要簡單的轉(zhuǎn)發(fā)即可,這里給出完整邏輯

type SimpleResource struct {}//在這個方法中,調(diào)用上面編寫的服務(wù)func (r *SimpleResource) SayHi(b *rf.Context) { req, _ := rest.NewRequest(http.MethodGet, "http://HelloServer/hello", nil)//這里要填寫需要調(diào)用哪個服務(wù),填寫服務(wù)名即可,然后就是他的api路徑 restInvoker := core.NewRestInvoker()//并發(fā)安全,可全局使用 resp, err := restInvoker.ContextDo(context.TODO(), req)//執(zhí)行調(diào)用,這時go chassis介入,執(zhí)行一些列用戶不可見的計算和操作 if err != nil { log.Println(err) return } b.Write(httputil.ReadBody(resp))//讀出服務(wù)端body體并直接透傳返回 return}func (r *SimpleResource) URLPatterns() []rf.Route { return []rf.Route{ {Method: http.MethodGet, Path: "/hi", ResourceFunc: r.SayHi}, }}func main() { chassis.RegisterSchema("rest", &SimpleResource{}) if err := chassis.Init(); err != nil { openlog.Fatal("Init failed." + err.Error()) return } chassis.Run()}

復制

驗證:

go build main.go./main ## 打開另一個終端,執(zhí)行 curl http://127.0.0.1:8000/hi

復制

將返回HelloServer的返回結(jié)果

此時2個微服務(wù)實例應該同時在線


零聲Golang云原生的評論 (共 條)

分享到微博請遵守國家法律
蛟河市| 罗田县| 桐梓县| 衡阳县| 敦煌市| 香格里拉县| 望奎县| 固阳县| 沧源| 防城港市| 丰原市| 钟山县| 苍溪县| 和田市| 无棣县| 乐安县| 探索| 蓝山县| 云浮市| 宁南县| 山阳县| 泾川县| 河西区| 四会市| 齐河县| 上虞市| 富顺县| 泸定县| 新化县| 长岛县| 绥阳县| 长寿区| 修水县| 浦北县| 将乐县| 平南县| 上犹县| 辰溪县| 松溪县| 江陵县| 抚宁县|