这篇文章主要是微服务客户端,函数,发布订阅...的实践。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实战