当前位置: 首页 > 软件库 > 程序开发 > 微服务框架 >

RK Gin

Gin 框架的引导程序和拦截器
授权协议 Apache
开发语言 Google Go
所属分类 程序开发、 微服务框架
软件类型 开源软件
地区 国产
投 递 者 关昊天
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

 rk-gin 是提供 Gin 框架中间件以及快速启动器,可以通过 YAML 文件的形式,快速启动 Gin 框架微服务。

提供的功能

功能 描述
通过 YAML 启动服务 用户可以通过定义 YAML 文件,快速启动基于Gin 框架微服务。
通过代码启动服务 用户可以通过调用代码函数,快速启动基于Gin 框架微服务。
启动 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 的限流策略。

快速开始

启动 Gin 服务

---
gin:
  - 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 gin entry from boot config
    res := rkgin.RegisterGinEntriesWithConfig("example/boot/simple/boot.yaml")

    // Bootstrap gin entry
    res["greeter"].Bootstrap(context.Background())

    // Wait for shutdown signal
    rkentry.GlobalAppCtx.WaitForShutdownSig()

    // Interrupt gin 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

sw

TV 服务

Prometheus Metrics

prom

日志

我们开启了日志中间件,所以每一个 RPC 都会自动被日志记录。

通用日志

2021-06-25T01:22:23.907+0800    INFO    Bootstrapping SwEntry.  {"eventId": "0f056bf9-0811-4fdb-b1eb-8d01b3b2a576", "entryName": "greeter-sw", "entryType": "GinSwEntry", "jsonPath": "", "path": "/sw/", "port": 8080}
2021-06-25T01:22:23.907+0800    INFO    Bootstrapping promEntry.        {"eventId": "0f056bf9-0811-4fdb-b1eb-8d01b3b2a576", "entryName": "greeter-prom", "entryType": "GinPromEntry", "entryDescription": "Internal RK entry which implements prometheus client with Gin framework.", "path": "/metrics", "port": 8080}
2021-06-25T01:22:23.907+0800    INFO    Bootstrapping CommonServiceEntry.       {"eventId": "0f056bf9-0811-4fdb-b1eb-8d01b3b2a576", "entryName": "greeter-commonService", "entryType": "GinCommonServiceEntry"}
2021-06-25T01:22:23.909+0800    INFO    Bootstrapping tvEntry.  {"eventId": "0f056bf9-0811-4fdb-b1eb-8d01b3b2a576", "entryName": "greeter-tv", "entryType": "GinTvEntry", "path": "/rk/v1/tv/*item"}
2021-06-25T01:22:23.909+0800    INFO    Bootstrapping GinEntry. {"eventId": "0f056bf9-0811-4fdb-b1eb-8d01b3b2a576", "entryName": "greeter", "entryType": "GinEntry", "port": 8080, "interceptorsCount": 6, "swEnabled": true, "tlsEnabled": false, "commonServiceEnabled": true, "tvEnabled": true, "swPath": "/sw/", "promPath": "/metrics", "promPort": 8080}

RPC 日志

RPC 日志的格式默认是 console 格式,console 格式是我们自定义的 human readable 格式,用户可以切换成 JSON 格式。

------------------------------------------------------------------------
endTime=2021-06-25T01:22:23.90783+08:00
startTime=2021-06-25T01:22:23.90781+08:00
elapsedNano=20378
timezone=CST
ids={"eventId":"0f056bf9-0811-4fdb-b1eb-8d01b3b2a576"}
app={"appName":"rk-gin","appVersion":"master-xxx","entryName":"greeter-sw","entryType":"GinSwEntry"}
env={"arch":"amd64","az":"*","domain":"*","hostname":"lark.local","localIP":"10.8.0.2","os":"darwin","realm":"*","region":"*"}
payloads={"entryName":"greeter-sw","entryType":"GinSwEntry","jsonPath":"","path":"/sw/","port":8080}
error={}
counters={}
pairs={}
timing={}
remoteAddr=localhost
operation=bootstrap
resCode=OK
eventStatus=Ended
EOE
...
------------------------------------------------------------------------
endTime=2021-06-25T01:22:23.909337+08:00
startTime=2021-06-25T01:22:23.907776+08:00
elapsedNano=1560406
timezone=CST
ids={"eventId":"0f056bf9-0811-4fdb-b1eb-8d01b3b2a576"}
app={"appName":"rk-gin","appVersion":"master-xxx","entryName":"greeter","entryType":"GinEntry"}
env={"arch":"amd64","az":"*","domain":"*","hostname":"lark.local","localIP":"10.8.0.2","os":"darwin","realm":"*","region":"*"}
payloads={"commonServiceEnabled":true,"entryName":"greeter","entryType":"GinEntry","interceptorsCount":6,"port":8080,"promPath":"/metrics","promPort":8080,"swEnabled":true,"swPath":"/sw/","tlsEnabled":false,"tvEnabled":true}
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-gin
< 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 或者官方文档 

  • 目录 前言  一、什么是JWT? 二、为什么需要JWT? 三、生成JWT和解析JWT 1. 定义需求 2. 生成JWT 2. 解析JWT 四、在gin框架中使用JWT 总结 前言 文章转载来源:在gin框架中使用JWT | 李文周的博客  一、什么是JWT? JWT全称JSON Web Token是一种跨域认证解决方案,属于一个开放的标准,它规定了一种Token实现方式,目前多用于前后端分离项目和

 相关资料
  • 拦截消息框 bp MessageBox(A) 创建消息框 bp MessageBoxExA 创建消息框 bp MessageBoxIndirect(A) 创建定制消息框

  • 拦截对话框 bp DialogBox 创建模态对话框 bp DialogBoxParam(A) 创建模态对话框 bp DialogBoxIndirect 创建模态对话框 bp DialogBoxIndirectParam(A) 创建模态对话框 bp CreateDialog 创建非模态对话框 bp CreateDialogParam(A) 创建非模态对话框 bp CreateDialogIndir

  • 本文向大家介绍Java的Struts2框架中拦截器使用的实例教程,包括了Java的Struts2框架中拦截器使用的实例教程的使用技巧和注意事项,需要的朋友参考一下 1、拦截器小介 拦截器的功能类似于web.xml文件中的Filter,能对用户的请求进行拦截,通过拦截用户的请求来实现对页面的控制。拦截器是在Struts-core-2.2.3.jar中进行配置的,原始的拦截器是在struts-defa

  • 本文向大家介绍Java中的Struts2框架拦截器之实例代码,包括了Java中的Struts2框架拦截器之实例代码的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Struts2框架拦截器实例的示例代码,供大家参考,具体内容如下 在看拦截器的小例子的前我们先来看看sturts2的原理   struts2自己是有拦截器的,通过拦截器可以拦截用户请求,并作出处理 拦截器作用有很多,譬如:

  • 我在网上尝试了一些建议,但没有帮助。是否需要在客户端做任何事情来修复CORS相关的问题--或者这都是服务器端的问题?

  • 1.1.1. 设备热词和拦截器 1.1.1. 设备热词和拦截器 设备热词 用户可以在开发平台语音接入处添加设备热词,可以提高本类型设备上 ASR 语音识别的准确率。当设备接收到语音时,ASR语音识别会优先命中热词。每个设备最多可以添加10组热词,每组热词最多500个,每个词最长不超过16个字。 为您的设备添加全局热词 您添加热词组,不与任何技能关联时,则将作为全局热词处理,即该类型的设备使用任意技

  • 拦截驱动器 bp GetDriveTypeA 获取磁盘驱动器类型 bp GetLogicalDrives 获取逻辑驱动器符号 bp GetLogicalDriveStringsA 获取当前所有逻辑驱动器的根驱动器路径