将任务添加到 Cloud Tasks 队列

本快速入门允许您通过 Cloud Tasks API 使用 Cloud Tasks 队列尝试执行基本操作。

本快速入门中的示例以 App Engine 处理程序为目标,因此您必须部署 App Engine 应用。如果您不使用 App Engine 作为目标,则无需部署 App Engine 应用,并可以停用任何现有的 App Engine 应用。

例如,如果您仅使用 HTTP Target 处理程序,则无需使用 App Engine 应用。对于通用 HTTP 目标,Cloud Tasks 服务会根据任务的配置方式将任务请求转发到位于任何通用 HTTP 端点的工作器。如需详细了解如何使用 HTTP 目标,请参阅创建 HTTP 目标任务

准备工作

如需为本快速入门设置 Cloud 环境,请创建一个 Google Cloud 项目并添加启用结算功能的 App Engine 应用。如果您在创建 Google Cloud 项目时已拥有结算账号,则系统会自动启用结算功能。

详细了解如何管理 Google Cloud 项目、App Engine 应用和常规结算

  1. 创建或选择 Google Cloud 项目:

    转到“App Engine”页面

    1. 使用右上角的按钮选择现有项目名称或创建新项目名称。
    2. 记下左上角的下拉框中的项目 ID。该项目 ID 将用作您的 Cloud Tasks 请求的参数。
  2. 将 App Engine 应用添加到您的项目中:

    1. 欢迎使用 App Engine 页面点击创建应用

    2. 为您的应用选择一个区域。 此位置将用作 Cloud Tasks 请求的 LOCATION_ID 参数,因此请记下该位置。请注意,App Engine 命令中名为 europe-westus-central 的两个位置在 Cloud Tasks 命令中分别称为 europe-west1us-central1

    3. 开始页面,只需点击下一页即可。稍后您将处理此问题。如果这是一个新项目,则构建执行环境。

    4. 如果系统弹出启用结算窗口,请选择您的结算账号。如果您目前没有结算帐号,请点击创建结算帐号并按照向导说明操作。

    5. 下一步页面上,只需点击以后再说即可。您稍后将访问这些示例并下载 SDK。

  3. 启用 Cloud Tasks API。

    转到 Cloud Tasks API 页面

  4. 为 API 设置身份验证。

    选择标签页以了解您打算如何使用本页面上的示例:

    C#

    如需从本地开发环境使用本页面上的 .NET 示例,请安装并初始化 gcloud CLI,然后使用用户凭据设置应用默认凭据。

    1. 安装 Google Cloud CLI。
    2. 如需初始化 gcloud CLI,请运行以下命令:

      gcloud init
    3. 为您的 Google 账号创建本地身份验证凭据:

      gcloud auth application-default login

    如需了解详情,请参阅 Google Cloud 身份验证文档中的为本地开发环境设置身份验证

    Go

    如需从本地开发环境使用本页面上的 Go 示例,请安装并初始化 gcloud CLI,然后使用用户凭据设置应用默认凭据。

    1. 安装 Google Cloud CLI。
    2. 如需初始化 gcloud CLI,请运行以下命令:

      gcloud init
    3. 为您的 Google 账号创建本地身份验证凭据:

      gcloud auth application-default login

    如需了解详情,请参阅 Google Cloud 身份验证文档中的为本地开发环境设置身份验证

    Java

    如需从本地开发环境使用本页面上的 Java 示例,请安装并初始化 gcloud CLI,然后使用用户凭据设置应用默认凭据。

    1. 安装 Google Cloud CLI。
    2. 如需初始化 gcloud CLI,请运行以下命令:

      gcloud init
    3. 为您的 Google 账号创建本地身份验证凭据:

      gcloud auth application-default login

    如需了解详情,请参阅 Google Cloud 身份验证文档中的为本地开发环境设置身份验证

    Node.js

    如需从本地开发环境使用本页面上的 Node.js 示例,请安装并初始化 gcloud CLI,然后使用用户凭据设置应用默认凭据。

    1. 安装 Google Cloud CLI。
    2. 如需初始化 gcloud CLI,请运行以下命令:

      gcloud init
    3. 为您的 Google 账号创建本地身份验证凭据:

      gcloud auth application-default login

    如需了解详情,请参阅 Google Cloud 身份验证文档中的为本地开发环境设置身份验证

    PHP

    如需从本地开发环境使用本页面上的 PHP 示例,请安装并初始化 gcloud CLI,然后使用用户凭据设置应用默认凭据。

    1. 安装 Google Cloud CLI。
    2. 如需初始化 gcloud CLI,请运行以下命令:

      gcloud init
    3. 为您的 Google 账号创建本地身份验证凭据:

      gcloud auth application-default login

    如需了解详情,请参阅 Google Cloud 身份验证文档中的为本地开发环境设置身份验证

    Python

    如需从本地开发环境使用本页面上的 Python 示例,请安装并初始化 gcloud CLI,然后使用用户凭据设置应用默认凭据。

    1. 安装 Google Cloud CLI。
    2. 如需初始化 gcloud CLI,请运行以下命令:

      gcloud init
    3. 为您的 Google 账号创建本地身份验证凭据:

      gcloud auth application-default login

    如需了解详情,请参阅 Google Cloud 身份验证文档中的为本地开发环境设置身份验证

    Ruby

    如需从本地开发环境使用本页面上的 Ruby 示例,请安装并初始化 gcloud CLI,然后使用用户凭据设置应用默认凭据。

    1. 安装 Google Cloud CLI。
    2. 如需初始化 gcloud CLI,请运行以下命令:

      gcloud init
    3. 为您的 Google 账号创建本地身份验证凭据:

      gcloud auth application-default login

    如需了解详情,请参阅 Google Cloud 身份验证文档中的为本地开发环境设置身份验证

设置示例

这些示例提供了一个框架,可尝试通过 Cloud Tasks API 向 Cloud Tasks 队列添加任务。

C#

C# 示例包含两个应用,其中一个应用 (CreateAppEngineTask) 作为命令行工具在本地运行,用于创建任务以及将任务添加到队列;另一个应用 (CloudTasks) 作为工作器部署在 App Engine 柔性环境中,用于“处理”任务。

要下载并安装示例应用,请执行以下操作:

  1. 确保安装了.NET Core SDK 2.0 版或更高版本。

  2. 将示例应用代码库克隆到本地机器:

    git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples

  3. 转到包含 CreateTask 示例代码的目录:

    cd dotnet-docs-samples/cloudtasks/api/TasksSample/

  4. 安装所有依赖项:

    dotnet restore

  5. 转到包含 CloudTasks 示例代码的目录 (dotnet-docs-samples/cloudtasks/appengine/) 并安装所有依赖项:

    dotnet restore

  6. 编译应用并为部署做好准备:

    dotnet publish

  7. 将工作器服务 (CloudTasks) 部署到 App Engine 柔性环境:

    gcloud app deploy .\bin\Debug\netcoreapp2.1\publish\app.yaml

  8. 验证索引页面是否正在提供服务:

    gcloud app browse

    您的浏览器会打开 https://{YOUR_PROJECT_ID}.appspot.com/,然后显示 Hello, World!

Go

Golang 示例应用包含两个文件,其中一个文件 (tasks/create_task/create_task.go) 作为命令行工具在本地运行,用于创建任务以及将任务添加到队列;另一个文件 (tasks/handle_task/handle_task.go) 作为工作器部署在 App Engine 中,用于“处理”任务。

要下载并安装示例应用,请执行以下操作:

  1. 确保已安装 gcloud App Engine Go 组件:

    gcloud components install app-engine-go

  2. 将示例应用代码库克隆到本地机器:

    git clone https://github.com/GoogleCloudPlatform/golang-samples.git

  3. 导航到工作器示例代码的 tasks/handle_task 目录。

    cd golang-samples/appengine/go11x/tasks/handle_task

  4. 请注意 app.yaml 文件,它包含必要的配置信息。

  5. 将工作器服务 (handle_task.go) 部署到 App Engine:

    gcloud app deploy

  6. 执行检查以确保包含该服务的应用正在运行:

    gcloud app browse

    您的浏览器会打开 https://{YOUR_PROJECT_ID}.appspot.com/,然后显示 Hello, World!

Java

此 Java 11 示例使用两个应用:

  • tasks 应用作为命令行工具在本地运行,用于创建任务并将其添加到队列中。
  • tasks-handler Spring Boot 应用作为处理 Cloud Tasks 请求的工作器,充当接收任务请求的端点。这是您部署的主 App Engine 应用。

要部署示例应用,请执行以下操作:

  1. 下载并安装 Java SE 11 开发工具包 (JDK)
  2. 完成 Cloud Tasks 设置说明
  3. 下载并安装 Maven 以构建、部署和管理您的应用。

  4. 安装 gcloud CLI app-engine-java 组件:

    gcloud components install app-engine-java
    

要下载并安装示例应用,请执行以下操作:

  1. 将示例应用代码库克隆到本地机器:

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
    或者,您也可以下载该示例的 zip 文件并将其解压缩。

  2. 导航到 tasks-handler 应用的顶级目录:

    cd java-docs-samples/appengine-java11/tasks-handler/

  3. tasks-handler 应用部署到 App Engine:

    mvn package appengine:deploy -Dapp.deploy.projectId=PROJECT_ID

    PROJECT_ID 替换为您的 Google Cloud 项目的 ID。 如果您的 pom.xml 文件已经指定了您的项目 ID,则您无需在运行的命令中添加 -Dapp.deploy.projectId 属性。

Node.js

Node.js 示例应用包含两个文件,其中一个文件 (createTask.js) 作为命令行工具在本地运行,用于创建任务以及将任务添加到队列;另一个文件 (server.js) 作为工作器部署在 App Engine 中,用于“处理”任务。

要下载并安装示例应用,请执行以下操作:

  1. 将示例应用代码库克隆到本地机器:

    git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git

  2. 导航到包含示例代码的目录:

    cd nodejs-docs-samples/cloud-tasks/snippets

  3. 安装所有依赖项。

    您可以使用 npm

    npm install
    或者您可以使用 yarn
    yarn install

  4. 将工作器服务 (server.js) 部署到 App Engine 标准环境:

    gcloud app deploy app.yaml

  5. 执行检查以确保包含该服务的应用正在运行:

    gcloud app browse

    您的浏览器会打开 https://{YOUR_PROJECT_ID}.appspot.com/,然后显示 Hello, World!

PHP

PHP 示例应用包含两个文件,其中一个文件 (/snippets/src/create_task.php) 作为命令行工具在本地运行,用于创建任务以及将任务添加到队列;另一个文件 (/apps/handler/index.php) 作为工作器部署在 App Engine 中,用于“处理”任务。

要下载并安装示例应用,请执行以下操作:

  1. 将示例应用代码库克隆到本地机器:

    git clone https://github.com/GoogleCloudPlatform/php-docs-samples

  2. 导航到 Tasks 示例的顶级目录:

    cd php-docs-samples/appengine/standard/tasks

    tasks 目录中,您将看到两个子目录:

    • apps/handler:包含要部署到 App Engine 的工作器服务的代码
    • snippets:包含本地命令行工具的代码
  3. 确保已安装 Composer。如果要在本地使用,请确保 composer.phar 位于两个子目录中。如需了解本地运行与全局运行,请参阅 Composer 文档。

  4. snippets 目录中,安装所有依赖项:

    composer install
    如果仅在本地运行,请使用以下命令:
    php composer.phar install

  5. apps/handler 目录中,安装所有依赖项:

    composer install
    如果仅在本地运行,请使用以下命令:
    php composer.phar install

  6. apps/handler 目录中,使用 gcloud app deploy 命令将工作器服务部署到 App Engine:

    gcloud app deploy

  7. 执行检查以确保包含该服务的应用正在运行:

    gcloud app browse

    您的浏览器会打开 https://{YOUR_PROJECT_ID}.appspot.com/,然后显示 Hello, World!

Python

Python 示例应用包含两个文件,其中一个文件 (create_app_engine_queue_tasks.py) 作为命令行工具在本地运行,用于创建任务以及将任务添加到队列;另一个文件 (main.py) 作为工作器部署在 App Engine 中,用于“处理”任务。

要下载并安装示例应用,请执行以下操作:

  1. 将示例应用代码库克隆到本地机器:

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git

  2. 导航到包含示例代码的目录:

    cd python-docs-samples/appengine/flexible_python37_and_earlier/tasks/

  3. 安装所有依赖项:

    pip install -r requirements.txt

  4. 将工作器服务 (main.py) 部署到 App Engine:

    gcloud app deploy

  5. 验证索引页面是否正在提供服务:

    gcloud app browse

    您的浏览器会打开 https://{YOUR_PROJECT_ID}.appspot.com/,然后显示 Hello, World!

Ruby

Ruby 示例应用包含两个文件,其中一个文件 (create_Task.rb) 作为命令行工具在本地运行,用于创建任务以及将任务添加到队列;另一个文件 (app.rb) 作为工作器部署在 App Engine 中,用于“处理”任务。

要下载并安装示例应用,请执行以下操作:

  1. 将示例应用代码库克隆到本地机器:

    git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples.git

  2. 导航到包含示例代码的目录:

    cd ruby-docs-samples/appengine/cloud-tasks

  3. 安装依赖项:

    bundle install

  4. 将工作器服务 (app.rb) 部署到 App Engine 柔性环境:

    gcloud app deploy app.yaml

  5. 执行检查以确保包含该服务的应用正在运行:

    gcloud app browse

    您的浏览器会打开 https://{YOUR_PROJECT_ID}.appspot.com/,然后显示 Hello, World!

如需详细了解如何创建 App Engine 任务处理程序,请参阅创建 App Engine 任务处理程序

创建 Cloud Tasks 队列

使用 gcloud CLI gcloud 队列管理功能在您刚才准备的环境中创建队列。

  1. 在命令行中输入以下内容:

    gcloud tasks queues create my-queue --location=LOCATION

    LOCATION 替换为队列的首选位置,例如 us-west2。如果您未指定位置,则 gcloud CLI 会选择默认值。

  2. 等待队列初始化,然后使用 describe 来验证队列是否已成功创建:

    gcloud tasks queues describe my-queue --location=LOCATION

    LOCATION 替换为队列的位置。

  3. 检查输出是否类似于以下内容:

    name: projects/PROJECT_ID/locations/LOCATION_IDqueues/QUEUE_NAME # Note these ids
    rateLimits:
      maxBurstSize: 100
      maxConcurrentDispatches: 1000
      maxDispatchesPerSecond: 500.0
    retryConfig:
      maxAttempts: 100
      maxBackoff: 3600s
      maxDoublings: 16
      minBackoff: 0.100s
    state: RUNNING
    

向 Cloud Tasks 队列添加任务

C#

在本地创建一项任务,将其添加到您设置的队列,然后将该任务交付给一个异步工作器:

  1. 您可以通过在示例应用的代码中手动设置或通过别名设置机器上的以下环境变量。示例应用使用这些变量来创建将任务添加到队列的请求:

    export GOOGLE_PROJECT_ID=my-project-id # The project ID you set up above
    export GCP_QUEUE=my-queue # the queue you created above
    export LOCATION_ID=my-location-id # The region in which your queue is running

    您可以使用以下 gcloud 命令查找 App Engine 应用的地理位置 ID:

    gcloud tasks locations list

  2. 导航到 TasksSample 文件夹:

    cd ../api/TasksSample

  3. 使用 test 创建一项任务并添加载荷(字符串“hello”)。 您之前部署的 CloudTasks 应用具有一个端点 log_payload,该端点通过记录载荷来对其进行处理。

    dotnet test

  4. 请检查日志以确保端点已接收到任务:

    gcloud app logs read

Go

在本地创建一项任务,将其添加到您设置的队列,然后将该任务交付给一个异步工作器:

  1. 如果您仍在 tasks/handle_task 目录中,请导航到 tasks/create_task 目录。

  2. 您可以在机器上手动设置以下环境变量,也可以在示例应用的代码中通过别名进行设置。客户端使用此信息来创建请求:

     export PROJECT_ID=PROJECT_ID # The project ID from above
     export LOCATION_ID=LOCATION_ID # The region in which your queue is running
     export QUEUE_ID=my-queue # The queue you created above
    注意:您可以使用以下 gcloud 命令找到地理位置 ID:
    gcloud tasks locations list

  3. 使用载荷 hello 创建任务,并将该任务添加到队列中。 负载可以是工作器完成任务处理过程所需的请求中的任何数据:

    go run . $PROJECT_ID $LOCATION_ID $QUEUE_ID hello 

  4. 通过显示工作器服务的日志来验证是否已收到负载。

    gcloud app logs read

Java

在本地创建任务,将其添加到您设置的队列,然后将任务交付给异步工作器:

  1. 进入 appengine-java11/tasks 目录并编译应用:

    cd ../tasks
    mvn package

  2. 在您的机器上设置以下环境变量。示例应用使用这些环境变量来创建将任务添加到队列的请求:

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID // The project ID you set up above
    export LOCATION_ID=LOCATION_ID // The region in which your queue is running
    export QUEUE_ID=MY_QUEUE // The queue you created above
    注意:您可以使用以下 gcloud 命令找到地理位置 ID:
    gcloud tasks locations list

  3. 使用指定载荷创建以您部署的任务处理程序控制器上的 /tasks/create 端点为目标的任务。载荷可以是工作器完成任务处理所需的请求中的任何数据;在此示例中,该载荷会硬编码到示例中,因此无需指定:

     mvn exec:java -Dexec.mainClass="com.example.task.CreateTask"
     
    一旦任务被传递给工作器,并且工作器处理了任务,工作器将向 Cloud Tasks 服务返回 2xx 成功状态代码,并自动从队列中删除该任务。

  4. 通过显示工作器服务的日志来验证是否已收到任务:

    gcloud app logs read

Node.js

在本地创建一项任务,将其添加到您设置的队列,然后将该任务交付给一个异步工作器:

  1. 您可以在机器上手动设置以下环境变量,也可以在示例应用的代码中通过别名进行设置。客户端使用此信息来创建请求:

    export PROJECT_ID=PROJECT_ID # The project ID from above
    export LOCATION_ID=LOCATION_ID # The region in which your queue is running
    export QUEUE_ID=my-queue # The queue you created above
    注意:您可以使用以下 gcloud 命令找到地理位置 ID:
    gcloud tasks locations list

  2. 使用载荷 hello 创建任务,并将该任务添加到队列中。 负载可以是工作器完成任务处理过程所需的请求中的任何数据:

    node createTask.js $PROJECT_ID $QUEUE_ID $LOCATION_ID hello 

  3. 通过显示工作器服务的日志来验证是否已收到负载。

    gcloud app logs read

PHP

在本地创建任务,将其添加到您设置的队列,然后将该任务交付给异步工作器:

  1. 导航到 snippets 目录。

  2. 您可以在机器上手动设置以下环境变量,也可以在示例应用的代码中通过别名进行设置。示例应用使用这些环境变量来创建将任务添加到队列的请求:

    export PROJECT_ID=PROJECT_ID # The project ID from above
    export LOCATION_ID=LOCATION_ID # The region in which your queue is running
    export QUEUE_ID=my-queue # The queue you created above
    注意:您可以使用以下 gcloud 命令找到地理位置 ID:
    gcloud tasks locations list

  3. 使用本地代码段 create_task.php 创建任务,然后添加 hello 的载荷。负载可以是工作器完成任务处理过程所需的请求中的任何数据:

    php src/create_task.php $PROJECT_ID $LOCATION_ID $QUEUE_ID hello
    

  4. 检查日志以验证是否收到了负载:

    gcloud app logs read

Python

在本地创建任务,将其添加到您设置的队列,并将该任务交付给异步工作器:

  1. 您可以在机器上手动设置以下环境变量,也可以在示例应用的代码中通过别名进行设置。示例应用使用这些变量来创建将任务添加到队列的请求:

    export PROJECT_ID=PROJECT_ID # The project ID you set up above
    export LOCATION_ID=LOCATION_ID # The region in which your queue is running
    export QUEUE_ID=my-queue # The queue you created above
    注意:您可以使用以下 gcloud 命令找到地理位置 ID:
    gcloud tasks locations list

  2. 使用本地 create_app_engine_queue_task.py 创建任务,然后添加 hello 的载荷。负载可以是工作器完成任务处理过程所需的请求中的任何数据:

    python create_app_engine_queue_task.py --project=$PROJECT_ID \
    --location=$LOCATION_ID --queue=$QUEUE_ID --payload=hello

  3. 验证是否收到了负载:

    gcloud app logs read

Ruby

在本地创建一项任务,将其添加到您设置的队列,然后将该任务交付给一个异步工作器:

  1. 您可以在机器上手动设置以下环境变量,也可以通过示例应用的代码进行设置,或者通过别名进行设置。客户端使用此信息来创建请求:

    export GOOGLE_CLOUD_PROJECT=my-project-id # The project ID from above
    export LOCATION_ID=my-location-id # The region in which your queue is running
    export QUEUE_ID=my-queue # The queue you created above
    注意:您可以使用以下 gcloud 命令找到地理位置 ID:
    gcloud tasks locations list

  2. 使用载荷 hello 创建任务,并将该任务添加到队列中。 负载可以是工作器完成任务处理过程所需的请求中的任何数据:

    ruby create_task.rb $GOOGLE_CLOUD_PROJECT_ID $LOCATION_ID $QUEUE_ID hello

  3. 通过显示工作器服务的日志来验证是否已收到负载。

    gcloud app logs read

清理

为避免因本页中使用的资源导致您的 Google Cloud 账号产生费用,请按照以下步骤操作。

  1. 在 Google Cloud 控制台中,进入管理资源页面。

    转到“管理资源”

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。

后续步骤

现在您已完成向 Cloud Tasks 队列添加任务的操作,请查看以下页面,继续探索 Cloud Tasks: