如何控制 Google Cloud Tasks 中的任务重复数据删除功能

ras*_*man 5 google-cloud-platform

我正在查看此处的文档:
https : //cloud.google.com/tasks/docs/dual-overview
在配额中:
https : //cloud.google.com/tasks/docs/quotas
我仍然不确定如何启用或禁用此重复数据删除功能。想知道能不能设置Task de-duplication window

And*_*s S 7

任务重复数据删除是指确保任务名称不重复。

根据文档,它的工作原理如下:

显式指定任务 ID 可以启用任务重复数据删除。如果任务的 ID 与现有任务或最近删除或执行的任务的 ID 相同,则调用将失败并显示google.rpc.Code.ALREADY_EXISTS如果任务的队列是使用 Cloud Tasks 创建的,则在删除或执行原始任务后约 1 小时内无法创建同名的另一个任务。
如果任务的队列是使用queue.yaml或queue.xml创建的,则在删除或执行原始任务后约9天内无法创建同名的另一个任务。

由于识别重复任务名称需要额外的查找成本,因此这些tasks.create调用显着增加了延迟

  • @WerBn是的,显然它是task.name,由“${parent}/tasks/YOUR_TASK_ID”组成,其中“parent”是您从“client.queuePath(...)”获得的值 (3认同)

小智 6

我们有同样的问题。

为了不向用户发送垃圾邮件,我们一直在寻找一种机制来控制某些通知类型的重复数据删除功能。

由于它们检查 TASK_ID - 我们可以通过添加一些独特的东西来使用它来控制重复数据删除。例如时间戳。

TASK_ID 是任务名称的最后部分。任务名称看起来像这样 - projects/PROJECT_ID/locations/LOCATION_ID/queues/QUEUE_ID/tasks/TASK_ID

如果我们需要创建一个每 10 秒执行一次的任务 - 我们可以生成这样的名称 - projects/PROJECT_ID/locations/LOCATION_ID/queues/QUEUE_ID/tasks/notification-like-${timestamp}

在这 10 秒内创建的其他任务将被拒绝并出现错误。

生成任务名称的 JavaScript 片段

/**
 * Round time up to given coefficient.
 * @param {number} coefficient - Coefficient in milliseconds.
 */
const roundTime = (coefficient) => {
    const date = new Date();
    return new Date(Math.ceil(date.getTime() / coefficient) * coefficient).getTime();
};

const coefficient = 1000 * 10; // Trigger once per 10 seconds
const taskId = `notification-like-${roundTime(coefficient)}`;
const taskName = `projects/PROJECT_ID/locations/LOCATION_ID/queues/QUEUE_ID/tasks/${taskId}`;

console.log(taskName);
// projects/PROJECT_ID/locations/LOCATION_ID/queues/QUEUE_ID/tasks/notification-like-1643898560000
Run Code Online (Sandbox Code Playgroud)