rk-gf快速启动 GoFrame 框架微服务
rk-gf 提供 GoFrame 框架中间件以及快速启动器,可以通过 YAML 文件的形式,快速启动 GoFrame 框架微服务。
提供的功能
功能 | 描述 |
通过 YAML 启动服务 | 用户可以通过定义 YAML 文件,快速启动基于GoFrame 框架微服务。 |
通过代码启动服务 | 用户可以通过调用代码函数,快速启动基于GoFrame 框架微服务。 |
启动 Swagger UI | 用户可以通过 YAML 文件,无代码启动 Swagger UI。 |
启动 Common Service | 用户可以通过 YAML 文件,无代码启动 RK 定义的常用 API 服务。 |
启动 TV UI 服务 | 用户可以通过 YAML 文件,无代码启动 RK 定义的 TV UI。TV UI 包含当前进程的原信息。 |
Prometheus 中间件 | 用户可以通过 YAML 文件,无代码启动 RPC Prometheus 中间件,记录每一个 RPC 请求状态。 |
日志中间件 | 用户可以通过 YAML 文件,无代码启动 RPC 日志中间件,记录每一个 RPC 请求状态。 |
调用链中间件 | 用户可以通过 YAML 文件,无代码启动 RPC 调用链中间件,记录每一个 RPC 请求状态。 |
Panic 中间件 | 用户可以通过 YAML 文件,无代码启动 RPC Panic 中间件,服务可以捕获 RPC 的 Panic 状态,防止服务崩溃。 |
元数据中间件 | 用户可以通过 YAML 文件,无代码启动 RPC 原数据 中间件,服务可以自动在返回数据中包含 RequestID,TracingID 等信息。 |
权限中间件 | 用户可以通过 YAML 文件,无代码启动 RPC 权限 中间件,拦截 RPC 中 Basic Auth 和 X-API-Key 形式的权限。 |
限流中间件 | 用户可以通过 YAML 文件,无代码启动 RPC 限流中间件,实现对整体服务,或者单个 API 的限流策略。 |
CORS 中间件 | 用户可以通过 YAML 文件,无代码启动 RPC CORS 中间件,实现对整体服务,或者单个 API 的CORS 检查策略。 |
JWT 中间件 | 用户可以通过 YAML 文件,无代码启动 RPC CORS 中间件,实现对整体服务,或者单个 API 的 JWT 检查策略。 |
Secure 中间件 | 用户可以通过 YAML 文件,无代码启动 RPC CORS 中间件,实现对整体服务,或者单个 API 的 安全检查策略。 |
CSRF 中间件 | 用户可以通过 YAML 文件,无代码启动 RPC CORS 中间件,实现对整体服务,或者单个 API 的 CSRF 检查策略。 |
快速开始
启动 GoFrame 服务
---
gf:
- name: greeter # Required
port: 8080 # Required
tv:
enabled: true # Optional, default: false
prom:
enabled: true # Optional, default: false
sw: # Optional
enabled: true # Optional, default: false
commonService: # Optional
enabled: true # Optional, default: false
interceptors:
loggingZap:
enabled: true
metricsProm:
enabled: true
meta:
enabled: true
func main() {
// Bootstrap basic entries from boot config.
rkentry.RegisterInternalEntriesFromConfig("example/boot/simple/boot.yaml")
// Bootstrap gf entry from boot config
res := rkgf.RegisterGfEntriesWithConfig("example/boot/simple/boot.yaml")
// Bootstrap gf entry
res["greeter"].Bootstrap(context.Background())
// Wait for shutdown signal
rkentry.GlobalAppCtx.WaitForShutdownSig()
// Interrupt gf entry
res["greeter"].Interrupt(context.Background())
}
$ go run main.go
验证
发送请求
使用 curl 发送请求,我们开启了 Common Service,所以有默认的 API 可以使用。
# Curl to common service
$ curl localhost:8080/rk/v1/healthy
{"healthy":true}
Swagger UI
TV 服务
Prometheus Metrics
日志
我们开启了日志中间件,所以每一个 RPC 都会自动被日志记录。
通用日志
2021-11-26T16:48:39.816+0800 INFO boot/sw_entry.go:199 Bootstrapping SwEntry. {"eventId": "897f47d3-2f69-4eba-9016-6cb85f7177f8", "entryName": "greeter-sw", "entryType": "SwEntry", "jsonPath": "", "path": "/sw/", "port": 8080}
2021-11-26T16:48:39.816+0800 INFO boot/prom_entry.go:207 Bootstrapping promEntry. {"eventId": "897f47d3-2f69-4eba-9016-6cb85f7177f8", "entryName": "greeter-prom", "entryType": "PromEntry", "entryDescription": "Internal RK entry which implements prometheus client with GoFrame framework.", "path": "/metrics", "port": 8080}
2021-11-26T16:48:39.817+0800 INFO boot/common_service_entry.go:155 Bootstrapping CommonServiceEntry. {"eventId": "897f47d3-2f69-4eba-9016-6cb85f7177f8", "entryName": "greeter-commonService", "entryType": "CommonServiceEntry"}
2021-11-26T16:48:39.818+0800 INFO boot/tv_entry.go:213 Bootstrapping tvEntry. {"eventId": "897f47d3-2f69-4eba-9016-6cb85f7177f8", "entryName": "greeter-tv", "entryType": "TvEntry", "path": "/rk/v1/tv/*item"}
2021-11-26T16:48:39.818+0800 INFO boot/gf_entry.go:688 Bootstrapping GfEntry. {"eventId": "897f47d3-2f69-4eba-9016-6cb85f7177f8", "entryName": "greeter", "entryType": "GfEntry", "port": 8080}
RPC 日志
RPC 日志的格式默认是 console 格式,console 格式是我们自定义的 human readable 格式,用户可以切换成 JSON 格式。
------------------------------------------------------------------------
endTime=2021-11-26T16:48:39.816613+08:00
startTime=2021-11-26T16:48:39.816559+08:00
elapsedNano=53736
timezone=CST
ids={"eventId":"897f47d3-2f69-4eba-9016-6cb85f7177f8"}
app={"appName":"rk-gf","appVersion":"master-d81d118","entryName":"greeter-sw","entryType":"SwEntry"}
env={"arch":"amd64","az":"*","domain":"*","hostname":"lark.local","localIP":"10.8.0.2","os":"darwin","realm":"*","region":"*"}
payloads={"entryName":"greeter-sw","entryType":"SwEntry","jsonPath":"","path":"/sw/","port":8080}
error={}
counters={}
pairs={}
timing={}
remoteAddr=localhost
operation=bootstrap
resCode=OK
eventStatus=Ended
EOE
...
------------------------------------------------------------------------
endTime=2021-11-26T16:48:39.818881+08:00
startTime=2021-11-26T16:48:39.816402+08:00
elapsedNano=2479169
timezone=CST
ids={"eventId":"897f47d3-2f69-4eba-9016-6cb85f7177f8"}
app={"appName":"rk-gf","appVersion":"master-d81d118","entryName":"greeter","entryType":"GfEntry"}
env={"arch":"amd64","az":"*","domain":"*","hostname":"lark.local","localIP":"10.8.0.2","os":"darwin","realm":"*","region":"*"}
payloads={"entryName":"greeter","entryType":"GfEntry","port":8080}
error={}
counters={}
pairs={}
timing={}
remoteAddr=localhost
operation=bootstrap
resCode=OK
eventStatus=Ended
EOE
原数据
我们开启了原数据中间件,每一个 RPC 请求返回值都会自带如下的 Header。
$ curl -vs localhost:8080/rk/v1/healthy
...
< HTTP/1.1 200 OK
< Content-Type: application/json; charset=utf-8
< X-Request-Id: 3332e575-43d8-4bfe-84dd-45b5fc5fb104
< X-Rk-App-Name: rk-gf
< X-Rk-App-Unix-Time: 2021-06-25T01:30:45.143869+08:00
< X-Rk-App-Version: master-xxx
< X-Rk-Received-Time: 2021-06-25T01:30:45.143869+08:00
< X-Trace-Id: 65b9aa7a9705268bba492fdf4a0e5652
< Date: Thu, 24 Jun 2021 17:30:45 GMT
...
如何编辑 YAML?
评论