首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Google电子表格API (节点js) -为错误添加一个重试“服务当前不可用”

Google电子表格API (节点js) -为错误添加一个重试“服务当前不可用”
EN

Stack Overflow用户
提问于 2020-05-14 17:56:30
回答 1查看 795关注 0票数 0

我有一个完整的堆栈应用程序,它从用户那里获取输入,并使用他们的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),如下所示:

代码语言:javascript
复制
   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);
     });
   }

重试选项如下:

代码语言:javascript
复制
   // 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:重试:真,

问题:

  1. 谷歌是否提供重试选项?如果是的话,他们有多少次重试?
  2. 这是为电子表格API重新编写代码的好方法,还是我应该做一些不同的事情(您有示例)?

在Alessandro的响应后编辑: npm重试使用指数退避<--这是正确的重试方法

新->“添加了一个超时”

这是等待谷歌重试发生的第一次,避免重复,或只是推迟了最初的检查?

我昨天做了几次测试,但没有看到复制,但这并不意味着它仍然是正确的。我不是百分之百确定。

代码语言:javascript
复制
    setTimeout(function() {
       if (operation.retry(err)) {
         return;
       }
       callback(err ? operation.mainError() : null, res);
    }, 10000)
EN

回答 1

Stack Overflow用户

发布于 2020-05-15 07:54:01

方法

由于错误503的本质是短暂的,所以在应用程序中实现重试逻辑是一种很好的方法。谷歌推荐了一种叫做指数退避的策略。它用于提高并发环境中的带宽利用率和最大限度地提高请求吞吐量。

示例

谷歌指数退避理论

Google指数退避-样本

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61804146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档