40
微服务系列笔记之Go-Micro入门案例
source link: https://www.tuicool.com/articles/qeQfu2N
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
导语
了解了Micro的基本框架之后,我们做一个简单的例子来实现客户端与服务端的通信,在了解本篇文章之前,需要你对rpc、grpc通信技术有所了解。
准备工作
## 安装go-micro go get github.com/micro/go-micro ## 安装micro go get github.com/micro/micro ## 安装grpc go get -u google.golang.org/grpc ## 安装grpc插件 go get -u github.com/golang/protobuf/protoc-gen-go ## 安装micro插件 go get github.com/micro/protoc-gen-micro # 设置环境变量,便于命令行操作 export PATH=$PATH:$GOPATH/bin
案例
服务端
定义一个common.proto
syntax = "proto3"; package go.micro.srv.demo; message Request { string msg = 1; } message Pair { int32 key = 1; string values = 2; } message Response { string msg = 1; // 数组 repeated string values = 2; // map map<string,Pair> header= 3; RespType type = 4; } // enum enum RespType{ NONE = 0; ASCEND = 1; DESCEND = 2; } // 服务接口 service Say { rpc Hello (Request) returns (Response); }
使用插件生成相关代码
protoc --go_out=. --micro_out=. proto/demo/common.proto
可以看到在目录中多了两个文件
image
demo "github.com/yuwe1/micolearn/day01/demoservice/proto/demo"
type Say struct{} func (s *Say) Hello(ctx context.Context, req *demo.Request, rsp *demo.Response) error { fmt.Println("received", req.Msg) rsp.Header = make(map[string]*demo.Pair) rsp.Header["name"] = &demo.Pair{Key: 1, Values: "abc"} rsp.Msg = "Hello World" rsp.Values = append(rsp.Values, "a", "b") rsp.Type = demo.RespType_DESCEND return nil }
注册我们的服务在main函数中,在这里面仅仅添加了一行注册的代码在3段式中。
srv := micro.NewService( micro.Name("go.micro.srv.demo"), micro.Version("latest"), ) srv.Init() demo.RegisterSayHandler(srv.Server(), new(Say)) // run server if err := srv.Run(); err != nil { panic(err) }
启动我们的服务,可以看到成功注册了一个名字叫demo的服务。
image
客户端
比较简单,这里直接贴上源码,需要注意的是,客户端首先获取到服务,然后直接调用了服务函数
package main import ( "context" "fmt" microclient "github.com/micro/go-micro/client" //需要更换成你自己的包,在服务端的那部分包,同样也需要更改 demo "github.com/yuwe1/micolearn/day01/demoservice/proto/demo" ) func main() { client := demo.NewSayService("go.micro.srv.demo", microclient.DefaultClient) r, err := client.Hello(context.Background(), &demo.Request{Msg: "hahaahah"}) if err != nil { panic(err) } fmt.Println(r) }
运行我们的客户端
image
服务端控制台成功打印数据
image
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK