这是我参与「第五届青训营 」伴学笔记创作活动的第 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](