Cloud Tasks客户端忽略重试配置

时间:2019-09-18 15:12:32

标签: google-app-engine google-cloud-platform task-queue spring-cloud-task

基本上是标题所说的。 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)

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

3 个答案:

答案 0 :(得分:0)

您可以传递自定义谓词以重试不同的异常。没有正式的迹象表明此参数阻止重试。您可以查看重试page了解详细信息。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

任务级重试参数在Google App Engine捆绑服务中可用,用于任务排队Task Queues。如果您的应用程序基于GAE(我猜是因为您的问题被标记为google-app-engine),那么您可以从Cloud Tasks切换到GAE Task Queues。

当然,如果您的应用依赖于Cloud Tasks独有的功能(例如beta HTTP终结点),则捆绑服务将无法正常工作(请参见new features列表,不必担心“ List Queues命令”,因为您始终可以在捆绑服务中使用的配置中看到该信息)。除非有这些,否则在切换到任务队列之前,需要考虑一些事项。

注意事项

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