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

Kitex

一、基础知识介绍

1.1 RPC框架

RPC(Remote Procedure Call)— 远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。比如两个不同的服务 A、B 部署在两台不同的机器上,那么服务 A 如果想要调用服务 B 中的某个方法该怎么办呢?使用 HTTP请求 当然可以,但是可能会比较慢而且一些优化做的并不好。 RPC 的出现就是为了解决这个问题。RPC包含两大功能Serialization 序列化Transport 传输

1.2 IDL

如果我们要进行 RPC,就需要知道对方的接口是什么,需要传什么参数,同时也需要知道返回值是什么样的。 这时候,就需要通过 IDL(Interface Definition Language) 来约定双方的协议,就像在写代码的时候需要调用某个函数,我们需要知道函数签名一样。Kitex 框架及命令行工具,默认支持 thrift 和 proto3 两种 IDL,对应的 Kitex 支持 thrift 和 protobuf 两种序列化协议。

二、使用

注意在Linux环境下使用

2.1 安装kitex和thriftgo

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

thriftgo:go install github.com/cloudwego/thriftgo@latest

2.2 编写IDL,生成代码

echo.thrift

//namespace 语言 名字
//生成不同的语言
namespace go api

struct Request {
  1: string message
}

struct Response {
  1: string message
}
 
//服务
service Echo {
    Response echo(1: Request req)
}

执行命令生成代码

kitex -module example -service example echo.thrift

2.3 编译运行

编译:sh build.sh

运行:sh output/bootstrap.sh || go run .

若出现错误:

执行以下命令再重新尝试

go mod edit -droprequire=github.com/apache/thrift/lib/go/thrift
go mod edit -replace=github.com/apache/thrift=github.com/apache/thrift@v0.13.0
go mod tidy

2.4 client测试

package main

import (
    "awesomeProject/kitex_gen/api"
    "awesomeProject/kitex_gen/api/echo"
    "context"
    "github.com/cloudwego/kitex/client"
    "github.com/cloudwego/kitex/client/callopt"
    "log"
    "time"
)

func main() {
    //创建一个客户端
    c, err := echo.NewClient("echo", client.WithHostPorts("0.0.0.0:8888"))
    if err != nil {
        log.Fatal(err)
    }
    req := &api.Request{Message: "hello,kitex"}
    //发送请求,调用服务
    resp, err := c.Echo(context.Background(), req, callopt.WithRPCTimeout(3*time.Second))
    if err != nil {
        log.Fatal(err)
    }
    log.Println(resp)
}

参考链接

[Kitex](

最后修改:2023 年 06 月 07 日
如果觉得我的文章对你有用,请随意赞赏