Kitex与GRPC| 青训营笔记

722 阅读2分钟

这是我参与「第五届青训营 」笔记创作活动的第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 支持的协议有两种:

  1. 自定义的消息协议,可以理解为 Kitex Protobuf,使用方式与 thrift 一样
  2. gRPC 协议,可以与 gRPC 互通,并且支持 streaming 调用

生成的代码如下,handler中是需要我们实现的代码

image.png

启动服务

在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接口,可以看到能正常返回消息。

image.png