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
我正在尝试创建一个 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