我有一个完整的堆栈应用程序,它从用户那里获取输入,并使用他们的API服务将数据发布到Google电子表格。
直到几个月前,该服务才完全正常运行,其中一个来自客户端的请求未能发布,并给出了错误: 2020-03-09T11:42:49.035293+00:00 appweb.1: API返回了一个错误: error:服务当前不可用。
在调查之后,这个错误引用了503,解决方案是重试,所以我决定使用一个名为' retry‘的npm包,并在"listMajors“函数中添加了这个包(参见电子表格API示例in:https://developers.google.com/sheets/api/quickstart/nodejs),如下所示:
function listMajors(auth) {
const sheets = google.sheets({version: 'v4', auth});
// 3 Attempt wrapper
function listMajorsWrapper(callback) {
operation.attempt(function(currentAttempt) {
sheets.spreadsheets.values.append({
spreadsheetId: config.spreadsheetId,
range: 'Requests',
valueInputOption: 'USER_ENTERED',
insertDataOption: 'INSERT_ROWS',
resource: {
"values":
[
data
]
}
}, (err, res) => {
if (operation.retry(err)) {
return;
}
callback(err ? operation.mainError() : null, res);
//if (err) return console.log('The API returned an error: ' + err);
});
})
}
listMajorsWrapper(function(err, result) {
console.log(err, result);
});
}重试选项如下:
// RETRY configuration
var operation = retry.operation({
retries: 2, // try 1 time and retry 2 times if needed, total = 3
minTimeout: 10 * 1000, // the number of milliseconds before starting the first retry
maxTimeout: 60 * 1000 // the maximum number of milliseconds between two retries
});昨天,我做了大约5次测试,其中两次给了我一个副本。
在搜索日志之后,我找到了"retry: true“。
2020-05-14T13:46:52.070771+00:00附录1:“内容-类型”:“应用程序/json”,
2020-05-14T13:46:52.070772+00:00附录1:接受:‘申请/json’},
2020年-05-14T13:46:52.070772+00:00附录1: params:
2020-05-14T13:46:52.070772+00:00附录1:{ valueInputOption:'USER_ENTERED',
2020-05-14T13:46:52.070773+00:00附录1: insertDataOption:'INSERT_ROWS‘},
2020-05-14T13:46:52.070773+00:00附录1: validateStatus:函数,
2020-05-14T13:46:52.070773+00:00附录1:重试:真,
问题:
在Alessandro的响应后编辑: npm重试使用指数退避<--这是正确的重试方法
新->“添加了一个超时”
这是等待谷歌重试发生的第一次,避免重复,或只是推迟了最初的检查?
我昨天做了几次测试,但没有看到复制,但这并不意味着它仍然是正确的。我不是百分之百确定。
setTimeout(function() {
if (operation.retry(err)) {
return;
}
callback(err ? operation.mainError() : null, res);
}, 10000)发布于 2020-05-15 07:54:01
方法
由于错误503的本质是短暂的,所以在应用程序中实现重试逻辑是一种很好的方法。谷歌推荐了一种叫做指数退避的策略。它用于提高并发环境中的带宽利用率和最大限度地提高请求吞吐量。
示例
https://stackoverflow.com/questions/61804146
复制相似问题