这是我参与「第五届青训营 」伴学笔记创作活动的第11天
介绍
Kitex是字节内部的Golang微服务RPC框架,具有高性能、强扩展的主要特点,Hi吃多协议并且拥有丰富的开源扩展。
官方文档:www.cloudwego.io/docs/kitex/…
中文文档:www.cloudwego.io/zh/docs/kit…
go install github.com/cloudwego/kitex/tool/cmd/kitex@latest
go install github.com/cloudwego/thriftgo@latest
# 查看版本,如果not found,记得将GoPath/bin加入到PATH,如果已添加,source ~/.zshrc
kitex --version
定义IDL
- 了解 IDL 是什么 zh.m.wikipedia.org/zh-hans/%E6…
- Thrift IDL 语法 thrift.apache.org/docs/idl
- proto3 IDL 语法 developers.google.com/protocol-bu…
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)
}
说明:namespace go api中api 是命名空间;代表生成的代码中有一个目录:hello。
Request 是请求对象;Response 是响应对象
service Hello定义了一个类,类中有两个方法
生成代码及目录介绍
kitex -module example -service example echo.thrift
上述命令中,-module 表示生成的该项目的 go module 名,-service 表明我们要生成一个服务端项目,后面紧跟的 example 为该服务的名字。最后一个参数则为该服务的 IDL 文件
kitex -module "your_module_name" -service helloService hello.thrift
api 下面的文件:定义了请求对象与响应对象的序列化、传输信息的读写等操作
基本使用
编译与运行
编译 sh build.sh 执行上述命令后,会生成一个 output 目录,里面含有我们的编译产物。
运行sh output/bootstrap.sh 执行上述命令后,Echo 服务就开始运行啦!
Etcd 与 Opentracing 是什么
完整的流程
mkdir kitex-demo && cd kitex-demo 新建kitex-demo目录,并进入。
创建Server端
mkdir server && cd server 创建server目录并进入。
- 定义IDL文件,这里选择thrift协议。
在kitex-demo目录下新建idl文件夹,把idl文件放进去
vi hello.thrift
namespace go api
struct Request {
1: string message
}
struct Response {
1: string message
}
service Hello {
Response echo(1: Request req)
Response echo2(1: Request req)
}
kitex -module kitex-demo -service helloService hello.thrift
将会在本目录下得到ketex_gen与script两个文件夹,一个build.sh与两个单独的go文件(handler.go与main.go)
一般需要完成的rpc方法在handler.go中
go run main.go handler.go 启动服务端
Client端
在kitex-demo目录下新建client文件并进入mkdir client && cd client,client与server在同级最好,client服务需要调用server下生成的struct和func
在client新建main.go文件,输入以下内容
package main
import (
"context"
"log"
"github.com/cloudwego/kitex/client"
"kitex-demo/server/thrift/kitex_gen/api"
"kitex-demo/server/thrift/kitex_gen/api/kitexthrift"
)
func main() {
client, err := kitexthrift.NewClient("kitexthrift", client.WithHostPorts("0.0.0.0:8888"))
if err != nil {
log.Fatal(err)
}
req1 := &api.Request1{
Message1: "message1",
}
resp, err := client.MyHandT1(context.Background(), req1)
if err != nil {
log.Fatal("err1", err.Error())
}
log.Println("MyHandT1 Func Response", resp)
}
- 运行client端
go run main.go
得到以下输出
至此,简单的client/server过程完毕。