kitex入门 | 青训营笔记

170 阅读2分钟

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

介绍

Kitex是字节内部的Golang微服务RPC框架,具有高性能、强扩展的主要特点,Hi吃多协议并且拥有丰富的开源扩展。

官方文档:www.cloudwego.io/docs/kitex/…

中文文档:www.cloudwego.io/zh/docs/kit…

仓库:github.com/cloudwego/k…

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

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 apiapi 是命名空间;代表生成的代码中有一个目录: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目录并进入。

  1. 定义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过程完毕。