RK Boot企業(yè)級 Go 語言微服務(wù)框架
RK Boot 是企業(yè)級 Go 語言微服務(wù)框架。靈感來源于 Spring Boot 項目。
與傳統(tǒng)的微服務(wù)框架不同,rk-boot 致力于【整合現(xiàn)有流行框架】以及【整合企業(yè)級別組件】的目的。使用者可以通過 rk-boot,通過簡短的 YAML 文件,在1分鐘之內(nèi),快速搭建【符合企業(yè)級別】要求的 Go 微服務(wù)。用戶可以根據(jù)需要,選擇底層 RPC 通信框架,例如 Gin,gRPC。
為什么需要 rk-boot?
-
通過 rk-boot,構(gòu)建企業(yè)級別的 Go 微服務(wù)項目。
-
通過 rk-boot,自動添加企業(yè)級別日志,監(jiān)控,調(diào)用鏈,權(quán)限到微服務(wù)中。
-
通過 rk-boot,快速切換核心依賴,例如 RPC 框架,日志框架。
-
通過 rk-boot,節(jié)省開源框架的復(fù)雜學(xué)習(xí)過程,直接以 YAML 文件的形式,導(dǎo)入功能,無需寫代碼。
-
自定義 Entry,用戶可以基于 rk-boot 拓展自己的微服務(wù),實現(xiàn)無代碼啟動服務(wù)的目的。
安裝
go get -u github.com/rookie-ninja/rk-boot
快速開始
用 YAML 文件,啟動 Gin 微服務(wù)
---
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}
- 訪問 Swagger UI: http://localhost:8080/sw
- 訪問 RK TV:http://localhost:8080/rk/v1/tv
用 YAML 文件,啟動 gRPC 微服務(wù)
---
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}
- 訪問 Swagger UI: http://localhost:8080/sw
訪問 RK TV:http://localhost:8080/rk/v1/tv
Gin 框架中間件(middleware)
在任何 RPC 框架中,中間件/攔截器是不可或缺的一部分,比如日志攔截器(對于每一個 RPC 請求寫日志),權(quán)限攔截器(對以每一個 RPC 請求驗證權(quán)限)等等。rk-boot 中定義了一系列常用的【企業(yè)級別】攔截器,請訪問 rk-gin,或者 rk-boot 基礎(chǔ)指南獲取更多信息。
- 日志攔截器
- Prometheus Metrics 攔截器
- 權(quán)限攔截器
- 調(diào)用鏈攔截器
- Panic 攔截器
- 原數(shù)據(jù)攔截器
例子:日志攔截器
無需編寫代碼!
修改 YAML 文件,并啟動 Go 服務(wù)即可。
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
// 發(fā)送請求
$ 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 基礎(chǔ)指南獲取更多信息
gRPC 框架攔截器(interceptor)
在任何 RPC 框架中,中間件/攔截器是不可或缺的一部分,比如日志攔截器(對于每一個 RPC 請求寫日志),權(quán)限攔截器(對以每一個 RPC 請求驗證權(quán)限)等等。rk-boot 中定義了一系列常用的【企業(yè)級別】攔截器,請訪問 rk-grpc,或者 rk-boot 基礎(chǔ)指南獲取更多信息。
- 日志攔截器
- Prometheus Metrics 攔截器
- 權(quán)限攔截器
- 調(diào)用鏈攔截器
- Panic 攔截器
- 原數(shù)據(jù)攔截器
例子:日志攔截器
無需編寫代碼!
修改 YAML 文件,并啟動 Go 服務(wù)即可。
---
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
// 發(fā)送請求
$ 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 基礎(chǔ)指南獲取更多信息
