简体   繁体   English

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

[英]How to override the retry configuration for Google Cloud Tasks Node.js Client

I've been trying explore if there's a way to retry the createTask function . 我一直在尝试探索是否有办法重试createTask函数 The reason being is because I keep on encountering deadline exceeded error from time to time like so: 原因是因为我不时会遇到截止日期超出错误:

Error: 4 DEADLINE_EXCEEDED: Deadline Exceeded at Object.exports.createStatusError (/srv/node_modules/grpc/src/common.js:91:15) at Object.onReceiveStatus (/srv/node_modules/grpc/src/client_interceptors.js:1204:28) at InterceptingListener._callNext (/srv/node_modules/grpc/src/client_interceptors.js:568:42) at InterceptingListener.onReceiveStatus (/srv/node_modules/grpc/src/client_interceptors.js:618:8) at callback (/srv/node_modules/grpc/src/client_interceptors.js:845:24) 错误:4 DEADLINE_EXCEEDED:Object.onReceiveStatus上的Object.exports.createStatusError(/srv/node_modules/grpc/src/common.js:91:15)截止日期超过(/srv/node_modules/grpc/src/client_interceptors.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)

Reading on the code behind the createTask function, I found out that the default timeout configuration was just 10 seconds. 阅读createTask函数后面的代码,我发现默认的超时配置只有10秒。

At the moment, I have tried to extend the timeout to 30s (which I believe is the maximum) by doing this: 目前,我已经尝试通过执行以下操作将超时延长到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);
}

And it appears that it works. 它似乎有效。 However, I would also like to cover the case if the API wasn't able to respond within 30 seconds. 但是,如果API无法在30秒内响应,我还想了解此案例。

I've tried this code: 我试过这段代码:

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);
}

But I don't see the createTask being retried. 但我没有看到createTask正在重试。 But based on the comment here , we should be able to override the default settings including retries. 但根据此处的评论,我们应该能够覆盖默认设置,包括重试。

What am I doing wrong? 我究竟做错了什么? Please help. 请帮忙。

It seems to that callOptions is wrong. 似乎callOptions是错误的。

  const callOptions = {
    timeout: 2000, // I've set it to 2 seconds to be able to reproduce the deadline exceeded error easily
    retry: {
      backoffSettings: {
        initialRetryDelayMillis: 100,
        retryDelayMultiplier: 1.3,
        maxRetryDelayMillis: 60000,
        initialRpcTimeoutMillis: 20000,
        // rpc_timeout_multiplier: 1.0,  not exists
        maxRpcTimeoutMillis: 20000,
        totalTimeoutMillis: 300000
      }
    }
  };

See: 看到:

But I think that to set retry parameters using cli is better. 但我认为使用cli设置重试参数更好。

See: 看到:

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM