RK Boot企业级 Go 语言微服务框架

联合创作 · 2023-09-28 04:52

RK Boot 是企业级 Go 语言微服务框架。灵感来源于 Spring Boot 项目。


与传统的微服务框架不同,rk-boot 致力于【整合现有流行框架】以及【整合企业级别组件】的目的。使用者可以通过 rk-boot,通过简短的 YAML 文件,在1分钟之内,快速搭建【符合企业级别】要求的 Go 微服务。用户可以根据需要,选择底层 RPC 通信框架,例如 GingRPC



为什么需要 rk-boot?



  • 通过 rk-boot,构建企业级别的 Go 微服务项目。


  • 通过 rk-boot,自动添加企业级别日志监控调用链权限到微服务中。


  • 通过 rk-boot,快速切换核心依赖,例如 RPC 框架,日志框架


  • 通过 rk-boot,节省开源框架的复杂学习过程,直接以 YAML 文件的形式,导入功能,无需写代码。


  • 自定义 Entry,用户可以基于 rk-boot 拓展自己的微服务,实现无代码启动服务的目的。



安装


go get -u github.com/rookie-ninja/rk-boot

快速开始


用 YAML 文件,启动 Gin 微服务


---
gin:
- name: greeter
port: 8080
sw:
enabled: true # Enable swagger UI
commonService:
enabled: true # Enable common service
tv:
enabled: true # Enable RK TV

package main

import (
"context"
"github.com/rookie-ninja/rk-boot"
)

func main() {
// Create a new boot instance.
boot := rkboot.NewBoot()

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




用 YAML 文件,启动 gRPC 微服务


---
grpc:
- name: greeter # Name of grpc entry
port: 8080 # Port of grpc entry
enableReflection: true
commonService:
enabled: true # Enable common service
tv:
enabled: true # Enable RK TV
sw:
enabled: true # Enable Swagger UI

package main

import (
"context"
"github.com/rookie-ninja/rk-boot"
)

// Application entrance.
func main() {
// Create a new boot instance.
boot := rkboot.NewBoot()

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



访问 RK TV:http://localhost:8080/rk/v1/tv



Gin 框架中间件(middleware)


在任何 RPC 框架中,中间件/拦截器是不可或缺的一部分,比如日志拦截器(对于每一个 RPC 请求写日志),权限拦截器(对以每一个 RPC 请求验证权限)等等。rk-boot 中定义了一系列常用的【企业级别】拦截器,请访问 rk-gin,或者 rk-boot 基础指南获取更多信息。



  • 日志拦截器

  • Prometheus Metrics 拦截器

  • 权限拦截器

  • 调用链拦截器

  • Panic 拦截器

  • 原数据拦截器


例子:日志拦截器


无需编写代码!


修改 YAML 文件,并启动 Go 服务即可。


gin:
- name: greeter # Required
port: 8080 # Required
commonService: # Optional
enabled: true # Optional, default: false
interceptors: # Optional
loggingZap:
enabled: true # Enable logging middleware

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

# 打印日志如下:
------------------------------------------------------------------------
endTime=2021-07-05T23:42:35.588164+08:00
startTime=2021-07-05T23:42:35.588095+08:00
elapsedNano=69414
timezone=CST
ids={"eventId":"9b874eea-b16b-4c46-b0f5-d2b7cff6844e"}
app={"appName":"rk-demo","appVersion":"master-f414049","entryName":"greeter","entryType":"GinEntry"}
env={"arch":"amd64","az":"*","domain":"*","hostname":"lark.local","localIP":"10.8.0.2","os":"darwin","realm":"*","region":"*"}
payloads={"apiMethod":"GET","apiPath":"/rk/v1/healthy","apiProtocol":"HTTP/1.1","apiQuery":"","userAgent":"curl/7.64.1"}
error={}
counters={}
pairs={}
timing={}
remoteAddr=localhost:56274
operation=/rk/v1/healthy
resCode=200
eventStatus=Ended
EOE

其他拦截器



请访问 rk-gin,或者 rk-boot 基础指南获取更多信息



gRPC 框架拦截器(interceptor)


在任何 RPC 框架中,中间件/拦截器是不可或缺的一部分,比如日志拦截器(对于每一个 RPC 请求写日志),权限拦截器(对以每一个 RPC 请求验证权限)等等。rk-boot 中定义了一系列常用的【企业级别】拦截器,请访问 rk-grpc,或者 rk-boot 基础指南获取更多信息。



  • 日志拦截器

  • Prometheus Metrics 拦截器

  • 权限拦截器

  • 调用链拦截器

  • Panic 拦截器

  • 原数据拦截器


 例子:日志拦截器


无需编写代码!


修改 YAML 文件,并启动 Go 服务即可。


---
grpc:
- name: greeter # Name of grpc entry
port: 8080 # Port of grpc entry
commonService:
enabled: true # Enable common service for testing
interceptors:
loggingZap:
enabled: true

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

# 打印日志如下:
# logs would be printed as bellow.
------------------------------------------------------------------------
endTime=2021-07-09T23:44:09.81483+08:00
startTime=2021-07-09T23:44:09.814784+08:00
elapsedNano=46065
timezone=CST
ids={"eventId":"67d64dab-f3ea-4b77-93d0-6782caf4cfee"}
app={"appName":"rk-demo","appVersion":"master-f414049","entryName":"greeter","entryType":"GrpcEntry"}
env={"arch":"amd64","az":"*","domain":"*","hostname":"lark.local","localIP":"10.8.0.2","os":"darwin","realm":"*","region":"*"}
payloads={"grpcMethod":"Healthy","grpcService":"rk.api.v1.RkCommonService","grpcType":"unaryServer","gwMethod":"","gwPath":"","gwScheme":"","gwUserAgent":""}
error={}
counters={}
pairs={"healthy":"true"}
timing={}
remoteAddr=localhost:58205
operation=/rk.api.v1.RkCommonService/Healthy
resCode=OK
eventStatus=Ended
EOE

其他拦截器



请访问 rk-grpc,或者 rk-boot 基础指南获取更多信息


浏览 46
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报