Day6 kitex-hertz代码生成工具的使用 | 青训营笔记
这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天
安装代码生成工具
go install github.com/cloudwego/hertz/cmd/hz@latest
go install github.com/cloudwego/kitex/tool/cmd/kitex@latest
go install github.com/cloudwego/thriftgo@latest
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
go install github.com/cloudwego/cwgo@latest
go install gorm.io/gen/tools/gentool@latest
kitex
kitex是字节跳动内部的 Golang 微服务 RPC 框架,具有高性能、强可扩展的特点,在字节内部已广泛使用。如果对微服务性能有要求,又希望定制扩展融入自己的治理体系,Kitex 会是一个不错的选择。
kitex自带一个命令行生成工具
RPC 消息协议默认支持 Thrift、Kitex Protobuf、gRPC。Thrift 支持 Buffered 和 Framed 二进制协议;Kitex Protobuf 是 Kitex 自定义的 Protobuf 消息协议,协议格式类似 Thrift;gRPC 是对 gRPC 消息协议的支持,可以与 gRPC 互通。除此之外,使用者也可以扩展自己的消息协议。
同时kitex也有很多扩展插件,可以让服务快速的集成服务发现,服务监控,链路跟踪等服务
但是kitex的命令行工具目前还不支持windows,因此如果想要生成代码的话需要类unix环境或者在windows上在wsl
中使用kitex命令行工具
生成代码
kitex不支持proto2语法
语法如下
kitex [options] IDL
例如使用如下代码就可以生成服务端代码
kitex -service <service_name> <path_to_your_idl>.thrift
注意: 如果项目所在目录不在gopath下的话还需要声明
-module
选项,如果idl文件不在当前路径下的话需要使用-I
选项指定idl
所在路径
kitex会根据文件后缀自动识别使用的idl的类型,也可以使用-type
选项手动指定idl的类型
生成代码之后只需要在handler.go
中实现相应的服务就可以启动服务了
启动服务的方式如下
sh build.sh
sh output/bootstrap.sh
集成opentelemetry链路追踪
到opentelemetry的官方repo下载安装包安装
注意要安装的是otelcol不是otelcol-contrib
安装之后启动otel(opentelemetry)
如果要配置otelcol,可以修改otelcol的配置文件,器配置文件路径在/etc/otelcol/config.yaml
然后在main函数入口添加注册代码
serviceName := "echo"
p := provider.NewOpenTelemetryProvider(
provider.WithServiceName(serviceName),
provider.WithExportEndpoint("localhost:4317"),
provider.WithInsecure(),
)
defer p.Shutdown(context.Background())
并且创建服务时添加Suite选项
server.WithSuite(tracing.NewServerSuite()),
hertz
hertz是一个 Golang 微服务 HTTP 框架,在设计之初参考了其他开源框架 fasthttp、gin、echo 的优势, 并结合字节跳动内部的需求,使其具有高易用性、高性能、高扩展性等特点,目前在字节跳动内部已广泛使用。 如今越来越多的微服务选择使用 Golang,如果对微服务性能有要求,又希望框架能够充分满足内部的可定制化需求,Hertz 会是一个不错的选择。
这里推荐使用thrift作为idl,文本量更小,不用引入额外的定义文件,并且支持thrift validator
hertz也自带代码生成工具hz
使用方式如下
hz new -idl <path_to_idl_file>.thrift
然后需要实现的接口在项目目录下的biz/handler
目录下
实现相应的服务就可以直接启动了
go run .
gorm-gen
gorm的代码生成工具,文档在这
使用起来非常简单
gentool -dsn "<用户名>:<密码>@tcp(<host>:<port>)/<数据库名>?charset=utf8mb4&parseTime=True&loc=Local" -tables "<表1>,<表2>"
cwgo
cwgo是字节跳动的三合一(kitex
, hz
, gorm/gen
)命令行代码生成工具
其支持客户端,服务端,数据库方面的代码生成
使用方式和上面讲的三种工具一样,如下
服务端代码生成
cwgo server --type {{RPC/HTTP}} --idl {{path/to/IDL_file.thrift}} --service {{svc_name}}
客户端代码生成
cwgo client --type {{RPC/HTTP}} --idl {{path/to/IDL_file.thrift}} --service {{svc_name}}
数据库代码生成
cwgo model --db_type mysql --dsn "gorm:gorm@tcp(localhost:9910)/gorm?charset=utf8&parseTime=True&loc=Local"
本文作者:Miraizu的笔记
本文链接:https://www.cnblogs.com/poifa/p/17716921.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步