大项目开发遇到的一些问题汇总| 青训营笔记

102 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第18 天

框架探索

image.png

Kitex

准备 Golang 开发环境 

  1. 如果您之前未搭建 Golang 开发环境, 可以参考 Golang 安装
  2. 推荐使用最新版本的 Golang,我们保证最新三个正式版本的兼容性(现在 >= v1.16)。
  3. 确保打开 go mod 支持 (Golang >= 1.15时,默认开启)
  4. kitex 暂时没有针对 Windows 做支持,如果本地开发环境是 Windows 建议使用 WSL2

wsl2的安装

  1. 首先按照官方步骤正确安装wsl2;
  2. 然后在vscode中安装wsl插件辅助开发

image.png

  1. 安装插件后点击vscode的左下角远程连接按钮,就可以连接linux,然后在终端中操作linux。

image.png

安装代码生成工具

首先,我们需要安装使用本示例所需要的命令行代码生成工具:

  1. 确保 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环境变量
  1. 安装 kitex:go install github.com/cloudwego/kitex/tool/cmd/kitex@latest
  2. 安装 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 工具将更新下述文件

  1. 更新 ./handler.go,在里面增加一个 Add 方法的基本实现
  2. 更新 ./kitex_gen,里面有框架运行所必须的代码文件

image.png

image.png