Anim 接口缓存限流插件
Anim 提供了基于接口级别的数据缓存与限流熔断能力
快速使用
安装 Anim 插件
bash
npm install @ssv-lab/anim-plugin-fegateway --save
注意该 npm 包为 Coding Npm 的私有源,请先确定已经正确配置了 Coding Npm
- 点击开发者工具中的菜单栏:工具 --> 构建 npm
- 点击开发者工具中的菜单栏:设置 --> 项目设置 --> 勾选“使用 npm 模块”选项
- 构建完成后即可使用
初始化插件
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 业务状态码
}
}
]
}