Skip to content
On this page

Anim 接口缓存限流插件

Anim 提供了基于接口级别的数据缓存与限流熔断能力

快速使用

安装 Anim 插件

bash
npm install @ssv-lab/anim-plugin-fegateway --save

注意该 npm 包为 Coding Npm 的私有源,请先确定已经正确配置了 Coding Npm

  1. 点击开发者工具中的菜单栏:工具 --> 构建 npm
  2. 点击开发者工具中的菜单栏:设置 --> 项目设置 --> 勾选“使用 npm 模块”选项
  3. 构建完成后即可使用

初始化插件

js
// app.js
import Anim from '@ssv-lab/anim'
import FeGatewayPlugin from '@ssv-lab/anim-plugin-fegateway'

// 接口安全插件需要提前引入
Anim
  .use(FeGatewayPlugin, {
        url: 'https://cp-1253536773.cos.ap-guangzhou.myqcloud.com/current-limiting.json',
    })

远端 JSON 配置

根据下列配置远端 JSON 文件,即可启用接口缓存与限流熔断能力。

js
{
  // 是否开启主动限流, 是:1 否:0
  "openActiveLimit": 1,
    // 是否开启被动限流(当接口返回某些状态码/错误码时,自动触发被动限流), 是:1 否:0
    "openPassiveLimit": 1,
    // 多久后重新获取这个限流文件,单位秒
    "refreshConfigTime": 60, // 60秒后
  // 接口列表
  "apiList": [
    {
      // 路径,可以带域名
      // 同时支持 /path/** 方式,
      // 可匹配到/path/isLoginV1 或者/path/isLoginV2, 
      // ** 只能匹配到非/内的路径字符,无法匹配到/
      "path": "/path/isLoginV2",
      // 被动限流配置
      "passiveLimit": {
        // 根据接口返回的状态码进行被动限流
        "httpCodes": [
          // 下面配置解释(配置了当前接口限流后,后续请求的所有接口都会限流):
          // wx.request访问isLoginV2接口,回调函数(success)因为503状态码返回了限流信息
          // limitData:{"statusCode":503,"limitData":{"hitTime":1651134682386,"remainTime":3000,"hitTime":1651134682386,"coolingTime":10,"statusCode":503}},
          // 那么10秒内,通过wx.request访问A/B/C接口,回调函数(fail)会直接返回限流信息
          // limitData(刚刚isLoginV2接口返回的内容):{"statusCode":503,"limitData":{"hitTime":1651134682386,"remainTime":3000,"coolingTime":10,"statusCode":503}}
          // 业务方根据limitData去做定制处理
          {
            "statusCode": 503, // 必填:状态码
            "effect": 2, // 影响范围1:访问当前接口被限流,2:访问上次限流的同域名接口会被限流,不填或者填写不符合规范,默认1
            "coolingTime": 10, // 必填:秒,限流冷却时间,在这段时间发起的请求不会到达后端,不填或者填写不符合规范,默认6秒
          }
        ],
        // 根据接口body返回的errcode进行被动限流
        "errCodes": [
          {
            "codeKey": "errcode", // 必填:错误码的键 errcode code?
            "errCode": 10002, // 必填:body返回的错误码
            "effect": 2, // 必填:影响范围1:访问当前接口被限流,2:访问上次限流的同域名接口会被限流
            "coolingTime": 10, // 必填:秒,限流冷却时间,在这段时间发起的请求不会到达后端
          }
        ],
      },
      // 缓存配置   resp.statusCode / get(resp.data, codeKey)
      "cache": {
        // 必填:该请求缓存时间,单位为秒, 大于0的数字
        "cacheTime": 60,
        // 缓存参数值,会根据该值确定缓存是否生效
        // 必填:提供的参数为 query/data/header,可以通过模版进行组合
        "cacheKey": "${header.sid}-${data['x-table']}-${data.params[0]['x-table']}-${query.id}",

        // 必填:状态码
        "statusCode": 200, // 必填:http response 状态码
        "codeKey": "errcode", // 必填:http response data 业务状态码字段
        "errCode": 0 // // 必填:http response data 业务状态码
      }
    }
  ]
}

Released under the MIT License.