这是我参与「第五届青训营 」伴学笔记创作活动的第 17 天
青训营大项目已经结束,但遗憾的是在因为时间有限而且自己常用的开发环境是 windows 开发环境,所以并没有在本次项目中使用 Kitex 微服务 RPC 框架,所以今天仔细阅读文档学习了 Kitex 在 windows 下的使用,以后有时间了准备再用 Kitex 对大项目代码进行一次重构。
1 Kitex 简介
1.1 简介
Kitex 是字节跳动内部的 Golang 微服务 RPC 框架,其具有高性能、易扩展等特点,字节跳动内部的 Go 服务有半数以上使用了 Kitex 框架。
1.2 特点
- 高性能:使用自研的高性能网络库 Netpoll,较 go net 具有比较明显的优势
- 扩展性:提供了较多的扩展接口以及常用扩展的实现方法
- 多消息协议:支持 Thrift、Kitex Protobuf、gRPC
- 多传输协议:支持 TTHeader、HTTP2
- 多消息类型:支持 PingPong、Oneway、双向 Streaming
- 服务治理:支持服务注册/发现、负载均衡、熔断、限流、重试、监控、链路追踪、日志、诊断等服务治理模块
- 代码生成:内置代码生成工具,支持基于 Thrift、Protobuf 生成脚手架代码
2 Windows 下的 Kitex 开发环境搭建
Kitex 在 v0.4.0 版本已支持在 Windows 环境下编译运行了。但代码生成工具暂未支持 Windows 环境
2.1 WSL 的安装
WSL 是适用于 Linux 的 Windows 子系统,其可让开发人员直接在 Windows 上按原样运行 GNU/Linux 环境(包括大多数命令行工具、实用工具和应用程序),且不会产生传统虚拟机或双启动设置开销
2.1.1 安装 WSL
首先在 控制面板 - 程序 - 启动或关闭 windows 功能,开启下述两个功能:
以管理员身份运行 PowerShell ,输入指令:
wsl --install
这会下载最新的 Linux 内核,并将 WSL2 设置为默认版本,并安装 Linux 发行版,默认安装 Ubuntu
安装完成后可以通过输入以下指令来确认是否安装成功:
wsl -l -o
下图即为安装成功的状态:
2.1.2 更改 Linux 版本
wsl --install
命令默认安装 Ubuntu 版本
可以通过以下命令来查看可以安装的 Ubuntu 版本
wsl -l -o
可以通过下述命令更改 linux 版本
wsl -d <DistributionName>
例如:
wsl --install -d Ubuntu
2.1.3 其他变量设置
设置 Hypervisor 开机自启动
bcdedit /set hypervisorlaunchtype auto
设置默认默认使用 WSL2 版本:
wsl --set-default-version 2
完成上述所有步骤后可以通过:
wsl --l --v
查看 WSL 是否安装正确:
如果在任务管理器中 性能 - CPU 下出现了 虚拟化 : 已启用即为安装成功
2.2 WSL 下 Go 语言环境的下载
2.2.1 Go SDK 的下载与安装
Kitex 框架目前不支持 go 1.20 使用 go 1.20 会产生巨量报错
可以通过 golang.google.cn/ 下载相应的 Go SDK:
wget https://studygolang.com/dl/golang/go1.19.2.linux-amd64.tar.gz
将安装包解压:
tar -C /usr/local -xzf go1.19.2.linux-amd64.tar.gz
2.2.2 环境变量的设置
提前新建一个文件夹来作为 GOPATH,并在文件夹中新建 pkg、bin、src 三个文件夹。
通过如下命令进入 .bash_profile 文件:
vim ~/.bash_profile
输入以下三条指令来设置环境变量:
之后按
ESC
退出,并输入 :wq
来保存
再执行下述两条指令
source ~/.bash_profile
source /etc/profile
完成配置
2.2.3 测试
接下来我们可以测试一下是否配置成功:
$ mkdir $GOPATH/src/test -p
$ cd $GOPATH/src/test
$ touch test.go
$ vi test.go
package main
import "fmt"
func main() {
fmt.Println("HELLO WSL");
}
$ go run test.go HELLO
HELLO WSL
3 使用 WSL 和 Goland 操作 Kitex 自动生成代码
3.1 新建项目
- 项目位置一定要选择 wsl 下的路径,也就是资源管理器左下角 linux 内的标志内的位置
- SDK 必须选择我们刚才在 WSL 下的 SDK,不能使用我们在 windows 环境下安装的 SDK
3.2 Kitex 的下载与安装
安装 kitex:
go install github.com/cloudwego/kitex/tool/cmd/kitex@latest
安装 thriftgo:
go install github.com/cloudwego/thriftgo@latest
安装完成后我们可以通过下述命令检测是否安装成功:
$ kitex --version
vx.x.x
$ thriftgo --version
thriftgo x.x.x
3.3 使用 Kitex 自动生成代码
新建一个 thrift 文件:
写入:
namespace go api
struct Request {
1: string message
}
struct Response {
1: string message
}
struct AddRequest {
1: i64 first
2: i64 second
}
struct AddResponse {
1: i64 sum
}
service Hello {
Response echo(1: Request req)
AddResponse add(1: AddRequest req)
}
然后打开终端 输入下述命令:
kitex -service service_name path_to_your_idl.thrift
当我们的项目代码不在 GOPATH 下的 src 目录中时,需要额外加上-module "module_name"
,module_name可以通过 go.mod 第一行查看,在本例中为:
kitex -module "byte_dance_5th" -hello hello.thrift
我们可以看到代码生成如下:
Kitex 生成的代码结构如下所示:
.
|-- build.sh
|-- echo.thrift
|-- handler.go
|-- kitex_gen
| `-- api
| |-- echo
| | |-- client.go
| | |-- echo.go
| | |-- invoker.go
| | `-- server.go
| |-- echo.go
| `-- k-echo.go
|-- main.go
`-- script
`-- bootstrap.sh