kitex官方使用手册有详细的介绍和使用方法。以下是根据其介绍做的实践。
安装kitex
使用以下命令安装kitex和thriftgo
go install github.com/cloudwego/kitex/tool/cmd/kitex@latest
go install github.com/cloudwego/thriftgo@latest
cmd输入kitex --version和thriftgo --version显示版本信息则下载成功。否则检查环境变量,需要把包含kitex.exe和thriftgo.exd的bin目录包含(将%GOPATH%\bin添加到 PATH 环境变量之中)。
使用kitex
编写IDL
先在项目下建立一个echo.thrift文件,输入如下代码
namespace go api
struct Request {
1: string message
}
struct Response {
1: string message
}
service Echo {
Response echo(1: Request req)
}
然后使用命令kitex -service example echo.thrift。如果目录不在 $GOPATH/src下,需要加上-module ,即kitex -module module-name -service service-name echo.thrift。此例我们使用kitex -module testKitex -service atest echo.thrift更新代码文件。
此时项目许多文件是红色import报错,因为kitex框架版本有问题,go.mod依赖管理没配好,输入以下命令可更新框架解决依赖问题。
go get github.com/cloudwego/kitex@latest
go mod tidy
更新后目录结构
编写echo服务
handler.go存储着我们需要编写的服务逻辑。
Echo函数对应IDL的Echo方法。现在修改其为以下代码。
func (s *EchoImpl) Echo(ctx context.Context, req *api.Request) (resp *api.Response, err error) {
return &api.Response{Message: req.Message}, nil
}
服务的编译及运行
使用sh build.sh(git bash窗口)命令编译。编译后生成output。
使用sh output/bootstrap.sh命令运行服务。
client的创建和运行
创建client文件夹装我们的client代码,可使用mkdir client命令生成。在client目录下创建main.go文件编写客户端代码。
注意:如果client文件加不在之前的server 目录下,则需使用kitex -module testKitex echo.thrift命令生成客户端所需的相关代码。
package main
import (
"context"
"log"
"testKitex/kitex_gen/api"
"testKitex/kitex_gen/api/echo" //如果修改了 -module 参数,这里要将 'example' 相应替换成相应的包名
"time"
"github.com/cloudwego/kitex/client"
"github.com/cloudwego/kitex/client/callopt"
)
func main() {
//创建一个调用所需的 client
c, err := echo.NewClient("example-server", client.WithHostPorts("0.0.0.0:8888"))
if err != nil {
log.Fatal(err)
}
//发起调用
req := &api.Request{Message: "my request"}
resp, err := c.Echo(context.Background(), req, callopt.WithRPCTimeout(3*time.Second))
if err != nil {
log.Fatal(err)
}
log.Println(resp)
}
使用go run main.go运行客户端。
echo.NewClient用于创建client,其第一个参数为调用的 服务名,第二个参数为 options,用于传入参数, 此处的client.WithHostPorts用于指定服务端的地址
然后创建了一个请求
req, 通过c.Echo发起了调用。c.Echo第一个参数为context.Context,通过通常用其传递信息或者控制本次调用的一些行为。第二个参数为本次调用的请求。第三个参数为本次调用的options,Kitex 提供了一种callopt机制,顾名思义——调用参数 ,有别于创建 client 时传入的参数,这里传入的参数仅对此次生效。 此处的callopt.WithRPCTimeout用于指定此次调用的超时(通常不需要指定,此处仅作演示之用)。
安装protoc
官方下载地址,选择适配的版本下载。
解压后,将目录下bin配置到环境变量中。cmd输入protoc --version显示版本信息则下载成功