如何覆盖 Google Cloud Tasks Node.js Client 的重试配置



我一直在尝试探索是否有办法重试createTask函数。原因是因为我不时遇到超过截止日期的错误,如下所示:

错误:4 DEADLINE_EXCEEDED:在 Object.onReceiveStatus (/srv/node_modules/grpc/src/common.js:91:15) 在 Object.onReceiveStatus (/srv/node_modules/grpc/src/client_interceptors.js:1204:28) 在 client_interceptors.js node_modules InterceptingListener._callNext Object.onReceiveStatus (/srv//grpc/src/:1204:28) 在 Object.onReceiveStatus (/srv/node_modules/grpc/src/

client_interceptors.js:618:8) 在回调 (/srv/node_modules/grpc/src/client_拦截器.js:845:24)

阅读createTask函数背后的代码,我发现默认超时配置仅为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);
}

但是我没有看到正在重试创建任务。但是根据这里的评论,我们应该能够覆盖默认设置,包括重试。

我做错了什么?请帮忙。

在看来,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
}
}
};

看:

  • https://googleapis.github.io/gax-nodejs/global.html#CallOptions
  • https://googleapis.github.io/gax-nodejs/global.html#RetryOptions
  • https://googleapis.github.io/gax-nodejs/global.html#BackoffSettings

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

看:

  • https://cloud.google.com/tasks/docs/creating-appengine-queues#retry

最新更新