如何覆盖Google Cloud Tasks Node.js客户端的重试配置

时间:2019-04-08 16:06:36

标签: javascript node.js google-api google-cloud-tasks

我一直在尝试探索是否有一种方法可以重试createTask function。原因是因为我不断遇到这样的截止时间超出错误:

  

错误:4 DEADLINE_EXCEEDED:截止日期在Object.onReceiveStatus(/srv/node_modules/grpc/src/client_interceptors.Object.exports.createStatusError(/srv/node_modules/grpc/src/common.js:91:15)处超过。 js:1204:28)在InterceptingListener._callNext(/srv/node_modules/grpc/src/client_interceptors.js:568:42)在InterceptingListener.onReceiveStatus(/srv/node_modules/grpc/src/client_interceptors.js:618:8)在回调时(/srv/node_modules/grpc/src/client_interceptors.js:845:24)

通过阅读createTask函数背后的代码,我发现默认超时configuration仅10秒。

此刻,我已尝试通过以下方法将超时时间延长到30秒(我认为是最大):

try {
  console.log("Sending task %j", task);
  const callOptions = {
    timeout: 30000
  };
  // Send create task request.
  const [response] = await client.createTask(request, callOptions);
  const name = response.name;
  console.log(`Created task ${name}`);
} catch (error) {
  console.error("CREATE_TASK_ERROR::", error);
}

看来可行。但是,如果API在30秒内无法响应,我也想谈一谈。

我尝试了以下代码:

try {
  console.log("Sending task %j", task);
  const callOptions = {
    timeout: 2000, // I've set it to 2 seconds to be able to reproduce the deadline exceeded error easily
    retry: {
      initial_retry_delay_millis: 100,
      retry_delay_multiplier: 1.3,
      max_retry_delay_millis: 60000,
      initial_rpc_timeout_millis: 20000,
      rpc_timeout_multiplier: 1.0,
      max_rpc_timeout_millis: 20000,
      total_timeout_millis: 300000
    }
  };
  // Send create task request.
  const [response] = await client.createTask(request, callOptions);
  const name = response.name;
  console.log(`Created task ${name}`);
} catch (error) {
  console.error("CREATE_TASK_ERROR::", error);
}

但是我看不到createTask被重试。但是基于注释here,我们应该能够覆盖默认设置,包括重试。

我在做什么错?请帮忙。

1 个答案:

答案 0 :(得分:0)

似乎callOptions是错误的。

sql = "select * from [table] where Branches not like '%corporate%' and branches not like '%commercial%'";

请参阅:

但是我认为使用cli设置重试参数会更好。

请参阅: