这是我参与「第五届青训营 」笔记创作活动的第7天,今天我学习了如何使用Kitex框架搭建一个GRPC微服务。
配置运行环境
由于Kitex并不自带protoc,所以需要安装一下protoc,linux安装protoc就显得格外的简单。以ubuntu为例。
sudo apt install -y protobuf-compiler
protoc --version
下面安装go语言的protoc插件,也是两行指令解决
go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2
理论上到这个时候已经可以构建grpc服务了,使用kitex框架可以带来更好的性能与更方便的扩展。而且kitex的代码生成也比protoc更好,能减轻一些代码量。
编写IDL
以快速开始 | CloudWeGo中提供的thrift文件为例子,写一个一样功能的proto文件,注意其中的option go_package填写的package路径需要在kitex_gen下,不然可能会导致无法正常生成代码,大致如下:
syntax = "proto3";
package echo;
option go_package = "kitex_gen/echo";
message Request{
string message = 1;
}
message Response{
string message = 1;
}
service echo {
rpc echo (Request) returns (Response);
}
注意官方的说法为:go_package 和 thrift 的 namespace 定义一样,不用写完整的路径,只需指定包名,相当于 thrift 的 namespace,如:go_package = “pbdemo”
生成代码
通过一行指令生成运行代码
kitex -module example -service example echo.proto
Kitex 对 protobuf 支持的协议有两种:
- 自定义的消息协议,可以理解为 Kitex Protobuf,使用方式与 thrift 一样
- gRPC 协议,可以与 gRPC 互通,并且支持 streaming 调用
生成的代码如下,handler中是需要我们实现的代码
启动服务
在handler中填上我们的逻辑,本例子为
// Echo implements the EchoImpl interface.
func (s *EchoImpl) Echo(ctx context.Context, req *echo.Request) (resp *echo.Response, err error) {
// TODO: Your code here...
return &echo.Response{Message: req.Message}, nil
}
然后就可以go run .启动服务了,默认是使用8888端口
测试接口
采用postman测试grpc接口,可以看到能正常返回消息。