这是我参与「第五届青训营 」笔记创作活动的第8天
Kitex准备工作
安装Kitex代码生成工具
对Windows不支持,使用如下命令:
go install github.com/cloudwego/kitex/tool/cmd/kitex@latest
go install github.com/cloudwego/thriftgo@latest
kitex文档网址:Kitex - Documentation
Thrift
Thrift是RPC框架的一种,框架内的IDL(接口定义语言)可以用来生成主流语言的RPC服务端/客户端模板代码
Thrift文档网址:Apache Thrift - Documentation
Thrift中IDL的语法规则参考网站:Apache Thrift - Interface Description Language (IDL)
IDL代码示例:
Kitex生成代码
使用命令kitex -module example -service example echo.thrift可以生成代码
上述命令中,-module 表示生成的该项目的 go module 名,-service 表明我们要生成一个服务端项目,后面紧跟的 example 为该服务的名字。最后一个参数则为该服务的 IDL 文件
代码结构如下:
build.sh是构建脚本
handler.go用户在该文件里实现IDL service定义的方法
main.go程序入口
kiten_genIDL相关内容的生成代码.主要是基础的Server/Client代码
Kitex基本使用
默认监听8888端口
创建Client:
echo.NewCLient()可以创建Client,第一个参数是服务名,第二个参数是options.
c.Echo()可以发起调用,第一个参数是context.Context,通常用于传递信息或者控制本次调用的一些行为,第二个参数是本次调用的请求,第三个参数是options.
kitex的服务注册与发现连接了主流的服务注册与发现中心,例如ETCD或者Nacos
etcd文档:Documentation versions | etcd
nacos文档:Nacos 快速开始
服务注册代码示例:
import (
...
"github.com/cloudwego/kitex/pkg/rpcinfo"
"github.com/cloudwego/kitex/server"
etcd "github.com/kitex-contrib/registry-etcd"
...
)
func main() {
...
r, err := etcd.NewEtcdRegistry([]string{"127.0.0.1:2379"}) // r should not be reused.
if err != nil {
log.Fatal(err)
}
// https://www.cloudwego.io/docs/tutorials/framework-exten/registry/#integrate-into-kitex
server, err := echo.NewServer(new(EchoImpl), server.WithServerBasicInfo(&rpcinfo.EndpointBasicInfo{ServiceName: "echo"}), server.WithRegistry(r))
if err != nil {
log.Fatal(err)
}
err = server.Run()
if err != nil {
log.Fatal(err)
}
...
}
调用etcd.NewEtcdRegistry()新建服务,然后调用etcd.NewServer()注册服务
服务发现代码示例:
import (
...
"github.com/cloudwego/kitex/client"
etcd "github.com/kitex-contrib/registry-etcd"
...
)
func main() {
...
r, err := etcd.NewEtcdResolver([]string{"127.0.0.1:2379"})
if err != nil {
log.Fatal(err)
}
client, err := echo.NewClient("echo", client.WithResolver(r))
if err != nil {
log.Fatal(err)
}
...
}
调用ectd.NewEtcdResolver()创建解析器,之后调用echo.NewClient()创建客户端连接
更多有关服务的使用方式可以查看kitex的官方文档