快速入门:将任务添加到 Cloud Tasks 队列

将任务添加到 Cloud Tasks 队列

以下说明指导您通过 Cloud Tasks API 使用 Cloud Tasks 队列尝试执行基本操作:

  1. 准备工作(设置您的环境)
  2. 设置示例代码
  3. 创建队列
  4. 创建任务并将其添加到队列中
  5. 清理资源

准备工作

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

如需详细了解 Google Cloud 项目、App Engine 应用和一般结算,请参阅管理。如需详细了解如何使用 HTTP 目标,请参阅创建 HTTP 目标任务

  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 设置身份验证。
    1. 按照相关说明创建服务帐号。使用与帐号关联的 JSON 密钥下载文件并将其存储在本地。 服务帐号密钥授权您的本地代码以编程方式访问 Google Cloud。
    2. 这些示例使用 Google Cloud 客户端库与 App Engine 交互,因此您需要设置一个环境变量以指向您之前下载的密钥,该库将使用这一密钥对您的请求进行身份验证和授权。您可以在不使用客户端库的情况下创建请求,但客户端库可以帮助您管理与服务器进行低级别通信的详细信息,包括身份验证。
  5. 安装并设置 gcloud CLI。这样您就可以访问 gcloud 工具了。

设置示例

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

C#

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

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

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

  2. 确保已初始化 gcloud 工具并将其配置为使用您刚才创建的 Google Cloud 项目。

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

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

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

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

  5. 安装所有依赖项:

    dotnet restore

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

    dotnet restore

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

    dotnet publish

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

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

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

    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/tasks/

  3. 安装所有依赖项:

    pip install -r requirements.txt

  4. 确保已初始化 gcloud 工具并将其配置为使用您刚才创建的项目。

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

    gcloud app deploy

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

    gcloud app browse

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

Java

Java 8 示例应用包含两个文件,其中一个应用 (CreateTask.java) 作为命令行工具在本地运行,用于创建任务以及将任务添加到队列;另一个应用 (TaskServlet.java) 作为工作器部署在 App Engine 中,用于“处理”任务。如需使用 Java 11 运行该示例,请参见 Java 11 异步执行代码

注意:要使用 Java 示例应用,您还必须有以下附加组件:

  • Maven
  • gcloud CLI 的 app-engine-java 组件
  • 提供的示例 pom.xml 文件中已指定 App Engine Maven 插件

如需了解有关这些组件的更多信息,请参阅使用 Apache Maven 和 App Engine 插件以及 Maven 插件目标和参数

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

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

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

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

    cd java-docs-samples/appengine-java8/tasks/quickstart/

  3. 确保已初始化 gcloud 工具并将其配置为使用您刚才创建的项目。

  4. 构建并运行本地命令行工具 (CreateTask.java):

    mvn appengine:run

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

    mvn appengine:deploy

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. 确保已初始化 gcloud 工具并将其配置为使用您刚才创建的 Google Cloud 项目。

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

    gcloud app deploy

  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. 确保已初始化 gcloud 工具并将其配置为使用您刚才创建的项目。

  3. 将示例应用代码库复制到本地机器:

    go get github.com/GoogleCloudPlatform/golang-samples/appengine/go11x/tasks/...

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

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

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

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

    gcloud app deploy

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

    gcloud app browse

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

Node.js

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

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

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

    git clone https://github.com/googleapis/nodejs-tasks.git

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

    cd nodejs-tasks/samples

  3. 安装所有依赖项。

    您可以使用 npm

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

  4. 确保已初始化 gcloud 工具并将其配置为使用您刚才创建的项目。

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

    gcloud app deploy app.yaml

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

    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. 确保已初始化 gcloud 工具并将其配置为使用您刚才创建的项目。

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

    gcloud app deploy app.yaml

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

    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

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

    gcloud tasks queues describe my-queue

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

    name: projects/[PROJECT_ID]/locations/[LOCATION_ID]/queues/my-appengine-queue # 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

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

Java

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

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

    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

  2. 创建一个以您部署的 servlet 上的 /task/create 端点为目标、以 hello 为载荷的任务。负载可以是工作器完成任务处理过程所需的请求中的任何数据:

    mvn exec:java -Dexec.mainClass="com.example.task.CreateTask"
      -Dexec.args="--project-id $GOOGLE_CLOUD_PROJECT
      --queue $QUEUE_ID --location $LOCATION_ID --payload 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

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

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

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. 在控制台中,打开管理资源页面。

    打开“管理资源”

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

后续步骤