Google Cloud Tasks HTTP 触发器 - 如何禁用重试

Google Cloud Tasks HTTP trigger - how to disable retry

我正在尝试创建一个 Cloud Tasks 队列,它在 HTTP 任务失败时从不重试。

根据 documentation,maxAttempts 应该是我正在寻找的:

Number of attempts per task.

Cloud Tasks will attempt the task maxAttempts times (that is, if the first attempt fails, then there will be maxAttempts - 1 retries). Must be >= -1.

因此,如果 maxAttempts 为 1,则重试次数应该为 0。

但是,例如,如果我 运行

gcloud tasks queues create test-queue --max-attempts=1 --log-sampling-ratio=1.0

然后使用以下 Python 代码创建一个 HTTP 任务:

from google.cloud import tasks_v2beta3
from google.protobuf import timestamp_pb2
client = tasks_v2beta3.CloudTasksClient()
project = 'project_id' # replace by real project ID
queue = 'test-queue'
location = 'us-central1'
url = 'https://example.com/task_handler' # replace by some endpoint that return 5xx status code
parent = client.queue_path(project, location, queue)
task = {
        'http_request': {  # Specify the type of request.
            'http_method': 'POST',
            'url': url  # The full url path that the task will be sent to.
        }
}
response = client.create_task(parent, task)
print('Created task {}'.format(response.name))

在队列的 Stackdriver 日志中(我可以看到,因为我在创建队列时使用了 --log-sampling-ratio=1.0),任务显然重试了一次:有一次调度尝试,然后是调度响应状态不可用,然后是另一个调度尝试,最后是最后一个调度响应(也指示不可用)。

有没有办法重试0次?

备注

关于maxAttempts,文档也说:

This field has the same meaning as task_retry_limit in queue.yaml/xml.

但是,当我转到 description for task_retry_limit 时,它显示:

The number of retries. For example, if 0 is specified and the task fails, the task is not retried at all. If 1 is specified and the task fails, the task is retried once. If this parameter is unspecified, the task is retried indefinitely. If task_retry_limit is specified with task_age_limit, the task is retried until both limits are reached.

这似乎与maxAttempts的描述不一致,因为它表示如果参数为1,任务将重试一次。

我尝试过将 maxAttempts 设置为 0,但这似乎使它假定了默认值 100。

提前致谢。

正如@averi-kitsch 提到的,这是目前我们的 Cloud Tasks 工程师团队正在处理的一个内部问题,遗憾的是我们还没有任何 ETA。

您可以通过此 Public Issue Tracker 关注此问题的进展,点击 "star" 订阅它并接收未来的更新。

作为解决方法,如果您不希望任务在失败后重试,请直接在 queue.yaml.

示例:

queue:
- name: my-queue1
 rate: 1/s
 retry_parameters:
   task_retry_limit: 0