Google 未创建云任务。错误状态:“409 无法创建任务,因为最近才存在具有此名称的任务”

Google Cloud tasks not getting created. Error status: "409 The task cannot be created because a task with this name existed too recently"

通过向请求提供任务名称来创建云任务。

req = taskspb.CreateTaskRequest{
        Parent: queueID,
        Task: &taskspb.Task{
            Name: taskName,
            MessageType: &taskspb.Task_HttpRequest{
                HttpRequest: &taskspb.HttpRequest{
                    HttpMethod: taskspb.HttpMethod_POST,
                    Url:        url,
                },
            }, ScheduleTime: ts,
        },
    }

有时候有些场景我们需要为最近完成的相同id(任务名称)创建任务。

尝试使用最近完成的云任务创建云任务时 name/id 任务未创建。从任务创建日志中看到 NOT_FOUND error.Logs。如果我在一天后尝试相同的操作,就会创建任务。

{
scheduleTime: "2021-10-15T16:15:09Z"
status: "NOT_FOUND"
targetAddress: "ENDPOINT"
targetType: "HTTP"
}

我将这个问题缩小到一个特定的场景,当我创建一个任务时,可能会为同一个作业创建多个任务。由于重复数据删除,队列 returns ALREADY EXISTS 错误。这按预期工作。第一个任务已创建并调用端点并成功。

409 The task cannot be created because a task with this name existed too recently. For more information about task de-duplication see https://cloud.google.com/tasks/docs/reference/rest/v2/projects.locations.queues.tasks/create#body.request_body.FIELDS.task.

问题: 一段时间后,如果我创建一个具有相同任务的新任务 name/id(数据已更改,需要处理此新任务。任务端点必须触发并处理此已更改的数据),我看到以上错误。在云控制台中,我没有看到具有此任务名称的 运行 任务。即使我尝试 ListTasks api 来获取队列中的当前任务。

从堆栈溢出的其他答案之一中发现问题。问题是,如果任务的队列是使用 Cloud Tasks 创建的,则在删除或执行原始任务后约 1 小时内无法创建另一个同名任务。

https://cloud.google.com/tasks/docs/reference/rest/v2/projects.locations.queues.tasks/create#body.request_body.FIELDS.task