您的位置 首页 golang

推荐一个强大的Go库-rk-boot

最近土拨鼠发现了一个很强大的包,之所以觉得强大是因为 rk-boot 通过配置文件一键启动很多服务,开始纳闷就一个 go 文件居然可以启动gRPC、gin、 echo 、GoFrame等服务,一看boot.go是引用了rookie-ninja组织下面的gRPC、gin、echo、GoFrame和prometheus客户端定制boot包。下面土拨鼠就简单介绍下一个这个库的使用,这里拿gin的demo来演示。

rk-boot的介绍

通过 rk-boot ,用户可以通过yaml格式的配置文件启动gRPC、gin、echo、GoFrame、prometheus客户端或自定义入口服务。很容易易编译、运行和调试你的 grpc 服务、grpc 网关、swagger UI 和 rk-tv Web UI。

为什么我们需要它?

在我们公司项目中,各个部门的项目结构都不统一,甚至一个小组内都不会很统一,这种情况数不胜数(尽管用了框架规范)。

  • 公司中我们一般使用统一的项目布局来构建服务。
  • 也使用统一的logging, metrics, tracing, authorization来构建API。
  • 还可以让应用程序更快地替换掉核心依赖。
  • 可以节省我们编写一些流行框架和库的初始化程序的学习时间。
  • 我们还可以定义入口用于定制的服务。

下图是使用rk-boot的图示

arch

Gin的示例

这里土拨鼠只举了关于gin的例子,跟其他组件例子(gRPC、echo、GoFrame、prometheus)相比,只是boot. yaml 配置不同。这里gin会引用rk-gin的 boot[1] 包。

目录结构

 ├── boot.yaml
└── main.go
  

boot.yaml

 ---
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
  

main.go

 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}
  

Swagger

可以通过 访问swagger页面

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]

  • logging middleware
  • prometheus metrics middleware
  • auth middleware
  • tracing middleware
  • panic middleware
  • metadata middleware
  • rate limit middleware
  • timeout middleware
  • gzip middleware
  • cors interceptor
  • jwt interceptor
  • secure interceptor
  • csrf interceptor

小结

rk-boot还支持gRPC代理目前还在试验阶段,相信后续会有更多功能支持。土拨鼠今天介绍这个库主要是觉得这种可配置化、定制的思想很值得在企业项目中借鉴和落地。还可以统一一些公共组件的使用,节省大量成本。如果你有相关看法,欢迎大家在留言区讨论交流。

参考资料

[1]

boot:

[2]

rk-grpc:

[3]

rk-gin:

[4]

interceptor:

[5]

example:


文章来源:智云一二三科技

文章标题:推荐一个强大的Go库-rk-boot

文章地址:https://www.zhihuclub.com/97502.shtml

关于作者: 智云科技

热门文章

网站地图