云任务客户端忽略重试配置



基本上是标题所说的。API 和客户端文档声明重试可以传递给create_task

retry (Optional[google.api_core.retry.Retry]):  A retry object used
to retry requests. If ``None`` is specified, requests will
be retried using a default configuration.

但这根本行不通。传递Retry实例不执行任何操作,仍使用队列级别设置。例如:

from google.api_core.retry import Retry
from google.cloud.tasks_v2 import CloudTasksClient
client = CloudTasksClient()
retry = Retry(predicate=lambda _: False)
client.create_task('/foo', retry=retry)

这应该会创建一个不重试的任务。我尝试了各种不同的配置,每次它都只使用队列上设置的任何设置。

您可以传递自定义谓词以重试不同的异常。没有正式指示此参数阻止重试。您可以查看"重试"页面以了解详细信息。

Google Cloud Support 已确认目前不支持任务级重试。此客户端库的文档不正确。此处 https://issuetracker.google.com/issues/141314105 存在功能请求。

Google App Engine 捆绑服务中提供了任务级重试参数,用于任务队列。如果您的应用程序在 GAE 上,我猜是因为您的问题被标记为google-app-engine,您可以从云任务切换到 GAE 任务队列。

当然,如果您的应用程序依赖于云任务独有的内容,例如测试版 HTTP 端点,捆绑服务将无法工作(请参阅新功能列表,并且不必担心"列出队列命令",因为您始终可以在捆绑服务中使用的配置中看到它(。除此之外,在切换到任务队列之前,需要考虑以下事项。

考虑

  • 供应商偏好- 谷歌似乎更喜欢云任务。来自推送队列迁移指南的介绍:"Cloud Tasks 现在是处理 App Engine 推送队列的首选方式"
  • 锁定- 即使您的应用在 GAE 上,将您的队列解决方案移动到 GAE 捆绑解决方案也会增加您对 GAE 托管的"锁定"(即,如果您想更改运行应用程序的位置,它会使您更难离开 GAE,因为您将失去任务队列解决方案,并且除了处理新托管之外还必须处理这个问题(
  • 重试排队- GAE 任务队列到云任务迁移指南部分重试失败的任务建议为每组重试参数创建一个专用队列,然后相应地对任务进行排队。这可能是继续使用云任务的合适方法

最新更新