选择任务创建方法

您可以使用 BufferTask 方法或 CreateTask 方法创建 HTTP 任务。本页面提供了有关如何在两种创建 HTTP 任务的方法之间进行选择的指南。

借助 BufferTask 方法,您可以通过向队列发送 HTTP 请求来创建任务。借助 CreateTask 方法,您可以通过构建任务对象来创建任务。对于大多数用例,无需显式构建任务对象。创建任务的最佳方法取决于队列是否具有队列级路由。

准备工作

请查看以下用例列表,看看是否有任何用例适用于您:

  • 您想使用 RPC API 或客户端库(而非 REST API)创建任务
  • 您希望将任务创建为 App Engine 任务对象(而不是将其创建为可能或不可能为 App Engine 目标的通用 HTTP 目标的更典型任务对象)

如果您符合上述任一条件,则无需选择任务创建方法,因为系统仅支持一种方法(CreateTask 方法)。直接前往与您的任务类型对应的 CreateTask 文档:

检查您的队列是否具有队列级路由

  1. 在终端中运行 gcloud tasks queues describe 命令:

    gcloud tasks queues describe QUEUE_NAME \
        --location=LOCATION

    替换以下内容:

    • QUEUE_NAME:队列的名称。
    • LOCATION:队列所在的区域。如果未指定,并且存在关联的应用,则系统会使用项目的 App Engine 应用的位置。
  2. 在输出中,查找 httpTarget 字段,并检查是否已设置 uriOverride

具有队列级路由的队列

对于具有队列级路由的队列,任务创建方法取决于任务的路由要求:

  • 任务的路由要求与队列级别指定的要求相同:使用 BufferTask。了解如何使用 BufferTask 方法创建任务。
  • 任务的路由要求与队列级别指定的路由要求不同:将队列的 UriOverrideEnforceMode 设置为 IF_NOT_EXISTS,以确保队列级路由适用于没有路由的任务(例如 BufferTask 任务),但会遵循具有自身路由规范的任务的路由。然后使用 CreateTask。借助此方法,您可以为任务指定单独的路由。了解如何使用 CreateTask 方法创建任务。

不使用队列级路由的队列

对于没有队列级路由的队列,请使用 CreateTask 方法创建任务(或配置队列级路由)。CreateTask 方法包括为任务指定路由,对于尚未在队列级别具有路由信息的队列,此操作是必需的。了解如何使用 CreateTask 方法创建任务。

了解队列级路由

借助队列级路由,您可以根据任务所在的队列为任务指定默认路由信息。您可以指定默认路由仅适用于没有自己的路由信息的任务,还是适用于所有任务。

如果您希望:

  • 使用标准 HTTP 请求(而非通过构建任务对象)创建任务
  • 在目标服务前面使用队列作为缓冲区

按目标设置的方案

队列级路由最适合与为每个目标服务使用一个队列的架构搭配使用。借助此模型,您可以:

  • 根据任务的目标进行管理(例如,在目标服务宕机时重定向一组任务)
  • 将队列中的所有任务发送到同一目标
  • 使用 BufferTask 方法创建任务,而无需显式构建任务对象

启用和停用队列级替换行为

配置队列级路由后,您可以通过设置队列的 UriOverrideEnforceMode 来决定何时强制执行路由。

  • IF_NOT_EXISTS:只有当任务不包含自己的路由信息时,队列级路由才适用。如果您希望队列能够将任务调度到不同的目标,请使用此设置。
  • ALWAYS:即使任务包含自己的路由信息,队列级路由始终会应用。队列级路由会覆盖在任务级别设置的所有路由信息。如果您想要求给定队列中的任务使用相同的路由信息,请使用此设置。