批里批里 (゜-゜)つ🍺 干杯~|

七つ一旋桜

园龄:4年2个月粉丝:6关注:3

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 消息协议默认支持 ThriftKitex ProtobufgRPC。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 框架,在设计之初参考了其他开源框架 fasthttpginecho 的优势, 并结合字节跳动内部的需求,使其具有高易用性、高性能、高扩展性等特点,目前在字节跳动内部已广泛使用。 如今越来越多的微服务选择使用 Golang,如果对微服务性能有要求,又希望框架能够充分满足内部的可定制化需求,Hertz 会是一个不错的选择。

hz 目前支持 proto2 / proto3 的语法

这里推荐使用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 中国大陆许可协议进行许可。

posted @   七つ一旋桜  阅读(165)  评论(0编辑  收藏  举报  
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起