Kitex入门|青训营

211 阅读2分钟

kitex官方使用手册有详细的介绍和使用方法。以下是根据其介绍做的实践。

安装kitex

使用以下命令安装kitex和thriftgo

go install github.com/cloudwego/kitex/tool/cmd/kitex@latest
go install github.com/cloudwego/thriftgo@latest

cmd输入kitex --versionthriftgo --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

更新后目录结构

image.png

编写echo服务

handler.go存储着我们需要编写的服务逻辑。

image.png

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。

image.png

使用sh output/bootstrap.sh命令运行服务。

image.png

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

官方下载地址,选择适配的版本下载。

image.png

解压后,将目录下bin配置到环境变量中。cmd输入protoc --version显示版本信息则下载成功

image.png