节点重复
为 HTTP 请求执行重试的节点模块 .
它是一个包裹周围 node-fetch 图书馆。 它有如下所描述的默认重试逻辑以及可配置参数. 它还对Apache OpenWhisk动作进行了内置支持,调整了超时以反映动作超时.
安装
npm install @adobe/node-fetch-retry
使用量
这个图书馆的工作和正常一样 fetch api,但带有一些新增的功能.
默认行为
不配置任何参数,重试行为如下:
- 60年代的重试
- 重试 100 ms 的内延, 并带有指数回放, 可配置为乘数默认为 2
- 只重试于 5xx 响应
- 在所有获取错误中重试
- 30s的套接字超时
const fetch = require('@adobe/node-fetch-retry');
async main() {
const response = await fetch(url);
}
此示例只使用自定义头并会使用默认的重试设置 :
const fetch = require('@adobe/node-fetch-retry');
async main() {
const response = await fetch(url, {
headers: {
'custom-header': '<<put custom header value here>>'
}
});
}
可选自定义参数
所有重试选项可配置并可以设置在 retryOptions 输入 options 对象传递到 fetch。 。 。 .
| 参数 | 格式 | 说明 | 环境变量 | 默认值 |
|---|---|---|---|---|
retryMaxDuration | 数目 | 重试时间以毫秒为单位,直到出现错误 | NODE_FETCH_RETRY_MAX_RETRY | 60 000毫秒( |
retryInitialDelay | 数目 | 在复试之间等待的时间( 毫秒) | NODE_FETCH_RETRY_INITIAL_WAIT | 100分钟 |
retryBackoff | 数目 | 复试之间等待时间的后退因子 | NODE_FETCH_RETRY_BACKOFF | 2.0 数据 |
retryOnHttpResponse | 函数 | (单位:千美元) 函数 确定是否重试 HTTP 响应。 能够同步 | 无 | 在所有 5xx 错误上重试 |
retryOnHttpError | 函数 | (单位:千美元) 函数 以 HTTP 出错例外来决定是否重试 。 能够同步 | 无 | 全部重试 FetchError类型 system |
socketTimeout | 数目 | 以毫秒计,直到套接字超时. 说明: socketTimeout 这是 qq retryMaxDuration,它会自动调整套接字超时, 以精确的半数 retryMaxDuration。要禁用此特性,请参见 forceSocketTimeout 下级 | NODE_FETCH_RETRY_SOCKET_TIMEOUT | 30 000 毫秒( |
forceSocketTimeout | 布尔 | 如果为真, 套接字超时将被迫使用 socketTimeout 所申报的财产,不论 retryMaxDuration。 。 。 . 注:这一功能旨在帮助单位测试,无意在实践中使用 | NODE_FETCH_RETRY_FORCE_TIMEOUT | 虚假 |
注:如果未设置相应的参数,则环境变量将超过默认值。 这些设备旨在帮助单位测试。 通过参数仍然会覆盖环境变量
自定义参数示例
此示例减少了 retryMaxDuration 并让重试延迟一个静态500ms。 这样只能重复4次了.
const fetch = require('@adobe/node-fetch-retry');
async main() {
const response = await fetch(url, {
retryOptions: {
retryMaxDuration: 2000, // 30s retry max duration
retryInitialDelay: 500,
retryBackoff: 1.0 // no backoff
}
});
}
此示例显示如何配置对 HTTP 特定响应的重试 :
const fetch = require('@adobe/node-fetch-retry');
async main() {
const response = await fetch(url, {
retryOptions: {
retryOnHttpResponse: function (response) {
if ( (response.status >= 500) || response.status >= 400) { // retry on all 5xx and all 4xx errors
return true;
}
}
}
});
}
此示例使用自定义 socketTimeout 值 :
const fetch = require('@adobe/node-fetch-retry');
async main() {
const response = await fetch(url, {
retryOptions: {
retryMaxDuration: 300000, // 5min retry duration
socketTimeout: 60000, // 60s socket timeout
}
});
}
此示例使用自定义 socketTimeout 值和自定义标题 :
const fetch = require('@adobe/node-fetch-retry');
async main() {
const response = await fetch(url, {
retryOptions: {
retryMaxDuration: 300000, // 5min retry duration
socketTimeout: 60000, // 60s socket timeout
},
headers: {
'custom-header': '<<put custom header value here>>'
}
});
}
此示例显示如何重试所有 HTTP 错误作为例外 :
const fetch = require('@adobe/node-fetch-retry');
async main() {
const response = await fetch(url, {
retryOptions: {
retryOnHttpError: function (error) {
return true;
}
}
});
}
禁用重试
您可以通过设置来禁用所有重试行为 retryOptions 改为 false。 。 。 .
const fetch = require('@adobe/node-fetch-retry');
async main() {
const response = await fetch(url, {
retryOptions: false
});
}
无法重试行为不会阻止使用设置在 options 对象.
关于重试期限的补充说明
如果抓取失败, 重试逻辑将决定下次尝试要等待多久 。 如果剩余时间将超过重试MaxDuration所允许的总时间,那么将不会再次尝试. 在测试代码中,有这样操作的例子.
Apache OpenWhisk 动作支持
如果您在 OpenWhisk 动作中运行此选项, 它会在设定动作超时时时考虑此选项 retryMaxDuration它使用 __OW_ACTION_DEADLINE 用于确定是否有动作运行的环境变量.
行为:
若为 retryMaxDuration 大于动作暂停前的时间,它将调整 retryMaxDuration 与行动暂停的时间相等.
捐款
欢迎捐款! 读取 贡献指南 更多信息.
许可证发放
这个项目根据Apache V2许可证获得许可. 见 自由主义 更多信息.