Cloud Tasks 队列快速入门

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

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

准备工作

要设置 Cloud 环境,请创建 GCP 项目并添加能启用结算功能的 App Engine 应用。您必须在项目中拥有已启用的 App Engine 应用才能运行队列。如需详细了解 GCP 项目、App Engine 应用和常规结算功能,请点击此处

  1. 创建或选择 GCP 项目:
    转 到 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. 安装并设置 Cloud SDK。这样您就可以使用 gcloud 工具了。

设置示例

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

C#

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

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

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

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

  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 中,用于“处理”任务。队列本身在 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 中,用于“处理”任务。队列本身在 App Engine 上运行。如需使用 Java 11 运行该示例,请参见 Java 11 异步执行代码

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

  • Maven
  • Cloud SDK 的 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 中,用于“处理”任务。队列本身在 App Engine 上运行。

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

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

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

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

    cd php-docs-samples/appengine/php72/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 工具并将其配置为使用您刚才创建的 GCP 项目。

  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 中,用于“处理”任务。队列本身在 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 中,用于“处理”任务。队列本身在 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 中,用于“处理”任务。队列本身在 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 队列

使用 Cloud SDK 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 命令查找位置 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. 在 Cloud Console 中,转到管理资源页面。

    转到“管理资源”页面

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

后续步骤