最近发现了一个很强大的包,之所以觉得强大是因为 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 是否启用ginsw:enabled: true     # Optional, Enable swagger UI 是否启用swaggercommonService:enabled: true     # Optional, Enable common service 是否启用commonServicetv:enabled:  true    # Optional, Enable RK TV 是否启用RK TV

main.go

package mainimport ("context""github.com/rookie-ninja/rk-boot"
)func main() {// 创建rkboot实例 -- Create a new boot instance.boot := rkboot.NewBoot()// 启动rkboot -- Bootstrapboot.Bootstrap(context.Background())// 等待接受关闭信号 -- Wait for shutdown sigboot.WaitForShutdownSig(context.Background())
}

运行&&请求

$ go run main.go
$ curl -X GET localhost:8080/rk/v1/healthy
{"healthy":true}

Swagger

可以通过 http://localhost:8080/sw 访问swagger页面

TV

可以通过 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                             # Requiredport: 8080                                # Requiredenabled: true                             # RequiredcommonService:                            # Optionalenabled: true                           # Optional, default: falseinterceptors:                             # OptionalloggingZap: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: 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


本文转载自公众号 Go 招聘,欢迎关注Go招聘公众号,获取Go专题大厂内推面经简历股文等信息。

推荐一个强大的Go库-rk-boot,未来 Go领域的SpringBoot?相关推荐

  1. ffmpeg sdk java_推荐一个强大的音视频处理的开源项目!

    原标题:推荐一个强大的音视频处理的开源项目! 1.前景提要 在我们的开发中,经常会用到音视频相关内容,一般我们都会选择FFmpeg,但是其交叉编译对于我们来说是一件很麻烦的事情.所以这里方便日后使用就 ...

  2. 一个强大的图表库 -- ECharts

    ECharts 是百度发布非常良心一个产品 官网首页:http://echarts.baidu.com/ ECharts特征的介绍页:http://echarts.baidu.com/feature. ...

  3. sklearn库安装_没有依赖库也能跑机器学习模型!推荐一个强大工具m2cgen

    晓查 发自 凹非寺 量子位 报道 | 公众号 QbitAI m2cgen(Model 2 Code Generator)是一个轻量级代码生成器,它可以将训练好的机器学习模型转换成无需依赖库的本地代码. ...

  4. 推荐一个强大的开源动态线程池项目

    今天和大家分享的是一个动态线程池,Hippo4J Hippo4J,是一个基于美团动态线程池的设计理念,针对该类线程池,在一般的基础上增强了动态调参.监控.报警等功能的一个版本. Hippo4J可以通过 ...

  5. 推荐一个强大的工作流自动化工具...

    点击上方蓝色字体,选择"标星公众号" 优质文章,第一时间送达 关注公众号后台回复pay或mall获取实战项目资料+视频 今天,要和大家分享一个"开源"工作流自动 ...

  6. 推荐一个golang的json库

    生成json的库 https://github.com/bennyscetbun/jsongo https://github.com/donnie4w/json4g 转载于:https://www.c ...

  7. 我也来推荐一个强大的flash应用

    一个基于flash的视频聊天室,http://www.shan6.com/ 通过rtmp协议实现的视频聊天,如果用flex实现视频聊天尚算容易的话,这个站点的视频服务器并不是基于FMS也不是开源的Re ...

  8. Java 压缩解压缩 第三方组件,推荐一个强大的Java开发工具类库!

    feilong开发更简便的工具库 Reduce development, Release ideas (灵感从重复简单的代码中释放出来) 让你从大量重复的底层代码中脱身,提高工作效率; 让你的代码更简 ...

  9. 推荐一个强大的开源的录制、直播软件(obs-studio)

    Open Broadcaster Software是一个免费的开源的视频录制和视频实时流软件.其有多种功能并广泛使用在视频采集,直播等领域. https://github.com/jp9000/obs ...

最新文章

  1. CentOS6静态网络配置
  2. centOS 7 安装man中文版手册
  3. 自定义组合控件:下拉选择框
  4. [转载] 武汉天河机场大巴时刻及路线
  5. iostat命令(转)
  6. python批量生成图_利用Python批量生成任意尺寸的图片
  7. 面试题:如何实现丝滑般的数据库扩容
  8. poster--2011 Pacific-RimConference on Multimedia
  9. apache 禁用rc4_如何在Apache中禁用过时的TLS和SSL版本
  10. 用C/C++实现SMC动态代码加密技术 .
  11. linux学习笔记-切换目录
  12. JAVA 基础练习题
  13. cfd 网格划分c语言源程序,ICEM-CFD-网格划分入门 .doc
  14. 【君思智慧园区】智慧园区建设规划方案
  15. android 图标居中,文字和图标在部分安卓(小米、魅族)居中对其问题?
  16. gulp_for_qa
  17. JAVA根据地点获取经纬度
  18. This is probably not a problem with npm. There is likely additional logging output above.
  19. linux rm 回收站,给rm设置回收站
  20. Mockplus: 让小白产品经理上手就用的原型图设计工具

热门文章

  1. sql server web管理软件
  2. 将EnyimMemcached从.NET Core RC1升级至RC2
  3. docker使用问题总结
  4. ipvsadm命令及lvs-nat类型web服务器集群
  5. 用 普通 用户欺骗登陆 获取 管理员的最高权限~~~~
  6. 《精通ASP.NET MVC 3框架》译者序
  7. IHttpModule IHttpHandler
  8. 美将遣返庇护申请者至墨西哥 弱势人士有望豁免
  9. Python入门很难吗? 为什么越来越多的人都学Python?
  10. 强上阿里云之安装MYSQL