这是我参与「第五届青训营 」伴学笔记创作活动的第18 天
框架探索
Kitex
准备 Golang 开发环境
- 如果您之前未搭建 Golang 开发环境, 可以参考 Golang 安装
- 推荐使用最新版本的 Golang,我们保证最新三个正式版本的兼容性(现在 >= v1.16)。
- 确保打开 go mod 支持 (Golang >= 1.15时,默认开启)
- kitex 暂时没有针对 Windows 做支持,如果本地开发环境是 Windows 建议使用 WSL2
wsl2的安装
- 首先按照官方步骤正确安装wsl2;
- 然后在vscode中安装wsl插件辅助开发
- 安装插件后点击vscode的左下角远程连接按钮,就可以连接linux,然后在终端中操作linux。
安装代码生成工具
首先,我们需要安装使用本示例所需要的命令行代码生成工具:
- 确保
GOPATH环境变量已经被正确地定义(例如export GOPATH=~/go)并且将$GOPATH/bin添加到PATH环境变量之中(例如export PATH=$GOPATH/bin:$PATH);请勿将GOPATH设置为当前用户没有读写权限的目录
// 一定要将$GOPATH加入到path中
export GOROOT=/opt/go #Golang源代码目录,安装目录
export GOPATH=/opt/gocode #Golang项目代码目录
export PATH=$GOPATH/bin:$PATH #Linux环境变量
- 安装 kitex:
go install github.com/cloudwego/kitex/tool/cmd/kitex@latest - 安装 thriftgo:
go install github.com/cloudwego/thriftgo@latest
安装成功后,执行 kitex --version 和 thriftgo --version 应该能够看到具体版本号的输出(版本号有差异,以 x.x.x 示例):
$ kitex --version
vx.x.x
$ thriftgo --version
thriftgo x.x.x
thrift
Kitex 框架及命令行工具,默认支持 thrift 和 proto3 两种 IDL,对应的 Kitex 支持 thrift 和 protobuf 两种序列化协议。 传输上 Kitex 使用扩展的 thrift 作为底层的传输协议(注:thrift 既是 IDL 格式,同时也是序列化协议和传输协议)。IDL 全称是 Interface Definition Language,接口定义语言。
为什么要使用 IDL
如果我们要进行 RPC,就需要知道对方的接口是什么,需要传什么参数,同时也需要知道返回值是什么样的,就好比两个人之间交流,需要保证在说的是同一个语言、同一件事。 这时候,就需要通过 IDL 来约定双方的协议,就像在写代码的时候需要调用某个函数,我们需要知道函数签名一样。
Thrift IDL 语法可参考:Thrift interface description language。
编写thrift IDL文件
我们在hello.thrift中分别定义一个新的请求和响应,Request 和 Response,并在 service Hello 中增加 echo 方法:
namespace go api
struct Request {
1: string message
}
struct Response {
1: string message
}
service Hello {
Response echo(1: Request req)
}
根据idl文件生成代码
运行如下命令后,kitex 工具将根据 hello.thrift 更新代码文件。
kitex -service a.b.c hello.thrift
# 若当前目录不在 $GOPATH/src 下,需要加上 -module 参数,一般为 go.mod 下的名字
kitex -module "your_module_name" -service a.b.c hello.thrift
执行完上述命令后,kitex 工具将更新下述文件
- 更新
./handler.go,在里面增加一个Add方法的基本实现 - 更新
./kitex_gen,里面有框架运行所必须的代码文件