安装
安装 go-micro,使用 Git Bash Here,输入如下命令
cd $GOPATH/src go get -u github.com/micro/go-micro
可能需要安装 mdns,命令是 go get -u github.com/micro/mdns
实操
下面以 micro/go-micro 首页中的 Greeter 例子出发(顺序和运行命令略有调整)
Create service proto
定义服务的名称 Greeter,服务的接口 Hello,接口的 Request 和 Response
// $GOPATH/greeter/proto/greeter.proto syntax = "proto3"; service Greeter { rpc Hello(HelloRequest) returns (HelloResponse) {} } message HelloRequest { string name = 1; } message HelloResponse { string greeting = 2; }
Generate the proto
使用 Git Bash Here,输入如下命令,将生成 $GOPATH/greeter/proto/greeter.pb.go
cd $GOPATH/src/greeter protoc -I. --go_out=plugins=micro:$GOPATH/src/greeter proto/greeter.proto
protoc 的具体参数,可以查阅官方文档
Write the service
在 $GOPATH/src/greeter 中创建 service.go,内容如下
package main import ( "context" "fmt" proto "./proto" "github.com/micro/go-micro" ) type Greeter struct{} func (g *Greeter) Hello(ctx context.Context, req *proto.HelloRequest, rsp *proto.HelloResponse) error { rsp.Greeting = "Hello " + req.Name return nil } func main() { // Create a new service. Optionally include some options here. service := micro.NewService( micro.Name("greeter"), ) // Init will parse the command line flags. service.Init() // Register handler proto.RegisterGreeterHandler(service.Server(), new(Greeter)) // Run the server if err := service.Run(); err != nil { fmt.Println(err) } }
创建名为 greeter 的服务,初始化后,将该服务注册到响应Handler
Define the client
在 $GOPATH/src/greeter 中创建 client.go,内容如下
package main import ( "context" "fmt" proto "./proto" "github.com/micro/go-micro" ) func main() { // Create a new service. Optionally include some options here. service := micro.NewService(micro.Name("greeter.client")) service.Init() // Create new greeter client greeter := proto.NewGreeterClient("greeter", service.Client()) // Call the greeter rsp, err := greeter.Hello(context.TODO(), &proto.HelloRequest{Name: "John"}) if err != nil { fmt.Println(err) } // Print response fmt.Println(rsp.Greeting) }
创建名为 greeter.client 的服务,初始化后,获取并连接名为 greeter 的服务,使用连接得到的客户端远程调用 Hello 接口
Run and Output
使用 Git Bash Here,输入如下命令,启动服务端 service.go
cd $GOPATH/src/greeter MICRO_REGISTRY=mdns go run service.go
输入结果是
2018/09/15 21:24:11 Listening on [::]:55215 2018/09/15 21:24:11 Broker Listening on [::]:55216 2018/09/15 21:24:11 Registering node: greeter-a1e03404-b8ea-11e8-81ad-0a0027000009
使用 mdns (multicast dns) 的方式来启动服务端(go-micro 默认使用 consul 做服务注册,这里简化了,consul 会在下一篇讲到)
服务端监听两个端口,Ctrl+C 可关闭服务端(会得到 Deregistering node: greeter-a1e03404-b8ea-11e8-81ad-0a0027000009)
使用 Git Bash Here,另起一个窗口,输入如下命令,启动客户端 client.go
cd $GOPATH/src/greeter MICRO_REGISTRY=mdns go run client.go
输入结果是
Hello John
使用 mdns (multicast dns) 的方式来启动客户端
总结
- 使用 protoc 生成了服务端和客户端之间的接口
- 编写服务端 service.go 和客户端 client.go
- 使用 mdns 方式启动,客户端顺利访问到服务端
参考
《micro/go-micro》https://github.com/micro/go-micro
《Getting started, gRPC》https://dzone.com/articles/create-versatile-microservices-in-golang-part-1
《Docker and micro》https://dzone.com/articles/create-versatile-microservices-in-golang-part-2-do
有疑问加站长微信联系(非本文作者)