rk-gf

快速启动 GoFrame 框架微服务
授权协议 Apache
开发语言 Google Go
所属分类 服务器软件、 JMS/消息中间件
软件类型 开源软件
地区 国产
投 递 者 诸葛奇玮
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

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?

请参考 README 或者官方文档 

 

  •  4K 30fps USB3.0+HDMI++LAN 12X光学+16x数字   MHD-UH40GF 4K清视频会议摄像机   产品特点:   2 4K清   UH40GF采用SONY 1/2.8 英寸850万像素图像传感器,有效像素850万,可实现3840*2160分辨率的图像。   2 帧率   视频输出帧率可达4KP30,向下兼容1080P,720P分辨率。   2 低照度   信噪比的全

  • MHD-UH40RK4K高清视频会议摄像头 MHD-UH40GF 4K清视频会议摄像机   产品特点:   2 4K清   UH40GF采用SONY 1/2.8 英寸850万像素图像传感器,有效像素850万,可实现3840*2160分辨率的图像。   2 帧率   视频输出帧率可达4KP30,向下兼容1080P,720P分辨率。   2 低照度   信噪比的全新CMOS图像传感器可有效降低在低照度

 相关资料
  • 快速启动 demo地址 https://github.com/ChenShenhai/koa2-note/blob/master/demo/project/ 环境准备 初始化数据库 安装MySQL5.6以上版本 创建数据库koa_demo create database koa_demo; 配置项目config.js https://github.com/ChenShenhai/koa2-note

  • Swoole的绝大部分功能只能用于cli命令行环境,请首先准备好Linux Shell环境。可使用vim、emacs、phpstorm或其他编辑器编写代码,并在命令行中通过下列指令执行程序。 php /path/to/your_file.php 成功执行Swoole服务器程序后,如果你的代码中没有任何echo语句,屏幕不会有任何输出,但实际上底层已经在监听网络端口,等待客户端发起连接。可使用相应的

  • Dubbo 采用全 Spring 配置方式,透明化接入应用,对应用没有任何 API 侵入,只需用 Spring 加载 Dubbo 的配置即可,Dubbo 基于 Spring 的 Schema 扩展 进行加载。 如果不想使用 Spring 配置,可以通过 API 的方式 进行调用。 服务提供者 完整安装步骤,请参见:示例提供者安装 定义服务接口 DemoService.java 1: package

  • 本文向大家介绍微服务哪些框架相关面试题,主要包含被问及微服务哪些框架时的应答技巧和注意事项,需要的朋友参考一下 Dubbo,是阿里巴巴服务化治理的核心框架,并被广泛应用于阿里巴巴集团的各成员站点。阿里巴巴近几年对开源社区的贡献不论在国内还是国外都是引人注目的,比如:JStorm 捐赠给 Apache 并加入 Apache 基金会等,为中国互联网人争足了面子,使得阿里巴巴在国人眼里已经从电商升级为一

  • ketchup 是一个基于 dotnet core 的微服务框架。网关:兼容 kong,rpc:grpc支持远程调用。

  • Adnc 是一个轻量级的 .Net Core 微服务开发框架,同时也适用于单体架构系统的开发。支持经典三层与DDD架构开发模式、集成了一系列主流稳定的微服务配套技术栈。