我们正在开发一个基于 GCP Cloud Task 的队列进程,该进程会在特定 Firestore 文档写入触发器触发时发送状态电子邮件。我们使用 Cloud Tasks 的原因是可以在发送电子邮件之前创建延迟(在未来使用 scheduleTime 属性 2 分钟),并控制重复数据删除(通过使用格式化为的任务名称:[firestore-collection-name ]-[doc-id]),因为在创建文档时可以多次触发 Firestore 文档上的“写入”触发器,然后由后端云功能快速更新。
一旦达到任务的延迟期,云任务就会运行,并发送包含更新的 Firestore 文档信息的电子邮件。之后从队列中删除任务,一切都很好。
除了:
如果用户更新 Firestore 文档(比如 20 或 30 分钟后),我们希望重新发送状态电子邮件,但无法使用相同的任务名称创建任务。我们收到以下错误:
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.
这是出乎意料的,因为此时队列为空,因为最后一个任务已成功完成。错误消息中引用的文档说:
如果任务的队列是使用 Cloud Tasks 创建的,则在删除或执行原始任务后约 1 小时内无法创建另一个同名任务。
问题:有没有什么方法可以通过减少时间来绕过这个限制,或者甚至一起取消限制?