這篇文章主要是微服務客戶端,函數,發佈訂閱...的實踐。git
想了解微服務服務端定義的請看我上一篇文章基於Golang的微服務——Micro實踐(一)github
在 Micro 架構中, 一個完整的請求流程是:web
api-gateway => [customer-api | customer-web ] => customer-srv後端
其中 api-gateway 是 有 micro 工具直接提供的, customer-(api | web | srv) 則是 micro中的開發概念.api
在 micro 中, 服務分爲三種類型:bash
附一張圖演示這SRV, API, WEB三者之間的關係:markdown
在popular
項目目錄下新建文件 client.go
,編輯文件內容架構
package main import ( "context" "fmt" micro "github.com/micro/go-micro" proto "popular/proto" ) func main() { // 定義服務,能夠傳入其它可選參數 service := micro.NewService(micro.Name("popular.client")) service.Init() // 建立新的客戶端 popular := proto.NewGreeterService("popular", service.Client()) // popular rsp, err := popular.Ping(context.TODO(), &proto.PingRequest{Name: "winyh"}) if err != nil { fmt.Println(err) } // 打印響應請求 fmt.Println(rsp.Popularing) } 複製代碼
運行客戶端框架
go run client.go
複製代碼
輸出內容爲:函數
Ping winyh
複製代碼
Function是指接收一次請求,執行後便退出的服務
只須要稍微改造下main.go
文件便可
package main import ( "context" "fmt" micro "github.com/micro/go-micro" proto "popular/proto" ) type Popular struct{} func (g *Popular) Ping(ctx context.Context, req *proto.PingRequest, rsp *proto.PingResponse) error { rsp.Popularing = "Ping " + req.Name return nil } func main() { // 建立新的服務,這裏能夠傳入其它選項。 service := micro.NewService( micro.Name("popular"), ) // 初始化方法會解析命令行標識 service.Init() // 註冊處理器 proto.RegisterPopularHandler(service.Server(), new(Popular)) // 運行服務 if err := service.Run(); err != nil { fmt.Println(err) } /********* == 函數定義 == *********/ // 建立新函數 fnc := micro.NewFunction( micro.Name("popular"), ) // 初始化命令行 fnc.Init() // 註冊handler fnc.Handle(new(Popular)) // 運行服務 fnc.Run() } 複製代碼
Go-micro 給事件驅動架構內置了消息代理(broker)接口。發佈與訂閱像RPC同樣操控生成的protobuf消息。這些消息會自動編/解碼並經過代理髮送.
[這部分我得理解下...],先寫我以前練手的一個小項目 基於Golang的開發框架Gin實戰