最近 发现了一个很强大的包,之所以觉得强大是因为 rk-boot
通过配置文件一键启动很多服务,开始纳闷就一个Go文件居然可以启动gRPC、gin、echo、GoFrame等服务,一看boot.go是引用了rookie-ninja组织下面的gRPC、gin、echo、GoFrame和prometheus客户端定制boot包。下面土拨鼠就简单介绍下一个这个库的使用,这里拿gin的demo来演示。
通过 rk-boot
,用户可以通过yaml格式的配置文件启动gRPC、gin、echo、GoFrame、prometheus客户端或自定义入口服务。很容易易编译、运行和调试你的 grpc 服务、grpc 网关、swagger UI 和 rk-tv Web UI。
在我们公司项目中,各个部门的项目结构都不统一,甚至一个小组内都不会很统一,这种情况数不胜数(尽管用了框架规范)。
下图是使用rk-boot的图示
arch
这里土拨鼠只举了关于gin的例子,跟其他组件例子(gRPC、echo、GoFrame、prometheus)相比,只是boot.yaml配置不同。这里gin会引用rk-gin的boot[1]包。
目录结构
├── boot.yaml
└── main.go
---
gin:
- name: greeter # Required, Name of gin entry 服务名称
port: 8080 # Required, Port of gin entry 端口号
enabled: true # Required, Enable gin entry 是否启用gin
sw:
enabled: true # Optional, Enable swagger UI 是否启用swagger
commonService:
enabled: true # Optional, Enable common service 是否启用commonService
tv:
enabled: true # Optional, Enable RK TV 是否启用RK TV
package main
import (
"context"
"github.com/rookie-ninja/rk-boot"
)
func main() {
// 创建rkboot实例 -- Create a new boot instance.
boot := rkboot.NewBoot()
// 启动rkboot -- Bootstrap
boot.Bootstrap(context.Background())
// 等待接受关闭信号 -- Wait for shutdown sig
boot.WaitForShutdownSig(context.Background())
}
$ go run main.go
$ curl -X GET localhost:8080/rk/v1/healthy
{"healthy":true}
可以通过 http://localhost:8080/sw 访问swagger页面
可以通过 http://localhost:8080/rk/v1/tv 访问TV页面
其中rk-boot依赖的 rk-grpc[2]、rk-gin[3] 集成了很多中间件,可以在boot.yaml中配置使用,下面是在gin的示例中开启了日志zap的使用,可以通过访问curl -X GET localhost:8080/rk/v1/healthy
查看日志。
gin:
- name: greeter # Required
port: 8080 # Required
enabled: true # Required
commonService: # Optional
enabled: true # Optional, default: false
interceptors: # Optional
loggingZap:
enabled: true
另外还支持以下中间件,中间件源码包interceptor[4]可以按需开启使用。对应的示例可以查看 example[5]。
rk-boot还支持gRPC代理目前还在试验阶段,相信后续会有更多功能支持。土拨鼠今天介绍这个库主要是觉得这种可配置化、定制的思想很值得在企业项目中借鉴和落地。还可以统一一些公共组件的使用,节省大量成本。如果你有相关看法,欢迎大家在留言区讨论交流。
[1]boot: https://github.com/rookie-ninja/rk-gin/tree/master/boot
[2]rk-grpc: https://github.com/rookie-ninja/rk-grpc
[3]rk-gin: https://github.com/rookie-ninja/rk-gin
[4]interceptor: https://github.com/rookie-ninja/rk-gin/tree/master/interceptor
[5]example: https://github.com/rookie-ninja/rk-gin/tree/master/example
Copyright© 2013-2020
All Rights Reserved 京ICP备2023019179号-8