选择任务创建方法

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

使用 BufferTask 方法,您可以通过将 HTTP 请求发送到 队列。借助 CreateTask 方法,您可以通过构建任务来创建任务 对象。对于大多数使用场景,明确构造任务对象 不需要。创建任务的最佳方法取决于队列是否具有队列级路由。

准备工作

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

  • 您希望使用 RPC API 或客户端库(而不是 REST API)
  • 您想以如下身份创建任务: App Engine 任务对象(而不是 用于常规 HTTP 目标的更典型任务对象, App Engine 目标)

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

检查您的队列是否使用队列级路由

  1. 在终端中运行以下 gcloud CLI 命令:

    gcloud tasks queues describe QUEUE_NAME

    QUEUE_NAME 替换为队列的名称。

  2. 在输出中,查找 httpTarget 字段,并检查是否已设置 uriOverride

    • 如果输出包含 uriOverride 行,其中指定了 host, 您的队列具有队列级路由。如需选择任务创建方法,请参阅 使用队列级路由的队列部分。

    • 如果输出结果不包含 uriOverride 对应的行或 uriOverride 说明未显示指定的 host,您的队列显示了 没有队列级路由。如需选择任务创建方法,请参阅 部分无队列级路由的队列部分(或者 配置队列级路由)。

采用队列级路由的队列

对于使用队列级路由的队列,任务创建方法依赖于 任务的路由要求:

  • 任务的路由要求与队列级别指定的要求相同:使用 BufferTask。了解如何使用 BufferTask 方法创建任务。
  • 任务的路由要求与在队列级别指定的要求不同: 将队列的 UriOverrideEnforceModeIF_NOT_EXISTS,以确保队列级路由适用于 哪个路由不存在(例如 BufferTask 任务),但遵循 具有自身路由规范的任务的路由。然后使用 CreateTask。通过此方法,您可以为任务指定单独的路由。 了解如何使用 CreateTask 方法。

无队列级别路由的队列

对于没有队列级路由的队列,请使用 CreateTask 创建任务 方法(或 配置 队列级路由)。CreateTask 方法包括为以下对象指定路由: 任务,对于尚无路由的队列而言,是必需的 查看队列级别的信息了解如何使用 CreateTask 方法创建任务。

了解队列级路由

队列级路由可让您为基于任务的任务指定默认路由信息 加入队列。您可以指定默认路由仅适用于没有自己的路由信息的任务,还是适用于所有任务。

在以下情况下,请选择队列级路由:

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

基于目标的方法

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

  • 根据任务的目标管理任务(例如,重定向一组 任务)
  • 将队列中的所有任务发送到同一目标
  • 使用 BufferTask 种方式

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

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

  • IF_NOT_EXISTS:只有当任务不包含自己的路由信息时,队列级路由才适用。如果您想加入队列,请使用此设置 能够将任务分派给不同的目标。
  • ALWAYS:即使任务包含自己的路由信息,队列级路由始终会应用。在任务级别设置的任何路由信息 会被队列级路由覆盖。如果您想执行以下操作,请使用此设置 要求给定队列中的任务使用相同的路由信息。