通过 WSL 和 Goland 使用 Kitex| 青训营笔记

332 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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

image.png

首先在 控制面板 - 程序 - 启动或关闭 windows 功能,开启下述两个功能:

image.png

以管理员身份运行 PowerShell ,输入指令:

wsl --install

这会下载最新的 Linux 内核,并将 WSL2 设置为默认版本,并安装 Linux 发行版,默认安装 Ubuntu
安装完成后可以通过输入以下指令来确认是否安装成功:

wsl -l -o

下图即为安装成功的状态:

image.png

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 是否安装正确:

image.png

如果在任务管理器中 性能 - CPU 下出现了 虚拟化 : 已启用即为安装成功

image.png

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 三个文件夹。

image.png

通过如下命令进入 .bash_profile 文件:

vim ~/.bash_profile

输入以下三条指令来设置环境变量: image.png 之后按 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 新建项目

image.png

  • 项目位置一定要选择 wsl 下的路径,也就是资源管理器左下角 linux 内的标志内的位置 image.png
  • 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 文件:

image.png

写入:

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

image.png

我们可以看到代码生成如下:

image.png

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