将任务添加到 Cloud Tasks 队列
以下说明指导您通过 Cloud Tasks API 使用 Cloud Tasks 队列尝试执行基本操作:
准备工作
如需为本快速入门设置 Cloud 环境,请创建一个 Google Cloud 项目并添加启用结算功能的 App Engine 应用。如果您在创建 Google Cloud 项目时已拥有结算帐号,则系统会自动启用结算功能。如需详细了解 Google Cloud 项目、App Engine 应用和一般结算,请参阅管理。如需详细了解如何使用 HTTP 目标,请参阅创建 HTTP 目标任务。
- 创建或选择 Google Cloud 项目:
转到 App Engine 页面 - 使用右上角的按钮选择现有项目名称或创建新项目名称。
- 记下左上角下拉框中的项目 ID。 该项目 ID 将用作您的 Cloud Tasks 请求的参数。
- 将 App Engine 应用添加到您的项目中:
- 在欢迎使用 App Engine 页面点击创建应用。
- 为您的应用选择一个区域。
此位置将用作 Cloud Tasks 请求的 LOCATION_ID 参数,因此请记下该位置。请注意,App Engine 命令中名为
europe-west
和us-central
的两个位置在 Cloud Tasks 命令中分别称为europe-west1
和us-central1
。 - 在开始页面,只需点击下一页即可。您稍后会处理此内容。如果这是一个新项目,则构建执行环境。
- 如果系统弹出启用结算窗口,请选择您的结算帐号。如果您当前没有结算帐号,请点击创建结算帐号并按照向导中的说明操作。
- 在下一步页面上,只需点击以后再说即可。您稍后将访问这些示例并下载 SDK。
- 启用 Cloud Tasks API。
转到“Cloud Tasks API”页面 - 为 API 设置身份验证。
- 按照相关说明创建服务帐号。使用与帐号关联的 JSON 密钥下载文件并将其存储在本地。 服务帐号密钥授权您的本地代码以编程方式访问 Google Cloud。
- 这些示例使用 Google Cloud 客户端库与 App Engine 交互,因此您需要设置一个环境变量以指向您之前下载的密钥,该库将使用这一密钥对您的请求进行身份验证和授权。您可以在不使用客户端库的情况下创建请求,但客户端库可以帮助您管理与服务器进行低级别通信的详细信息,包括身份验证。
- 安装并设置
gcloud
CLI。这样您就可以访问gcloud
工具了。
设置示例
这些示例提供了一个框架,方便您通过 Cloud Tasks API 尝试向 Cloud Tasks 队列添加任务。
C#
C# 示例包含两个应用,其中一个应用 (CreateAppEngineTask
) 作为命令行工具在本地运行,用于创建任务以及将任务添加到队列;另一个应用 (CloudTasks
) 作为工作器部署在 App Engine 柔性环境中,用于“处理”任务。
要下载并安装示例应用,请执行以下操作:
确保安装了.NET Core SDK 2.0 版或更高版本。
确保已初始化
gcloud
工具并将其配置为使用您刚才创建的 Google Cloud 项目。将示例应用代码库克隆到本地机器:
git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples
转到包含
CreateTask
示例代码的目录:cd dotnet-docs-samples/cloudtasks/api/TasksSample/
安装所有依赖项:
dotnet restore
转到包含
CloudTasks
示例代码的目录 (dotnet-docs-samples/cloudtasks/appengine/
) 并安装所有依赖项:dotnet restore
编译应用并为部署做好准备:
dotnet publish
将工作器服务 (
CloudTasks
) 部署到 App Engine 柔性环境:gcloud app deploy .\bin\Debug\netcoreapp2.1\publish\app.yaml
验证索引页面是否正在提供服务:
gcloud app browse
您的浏览器会打开
https://{YOUR_PROJECT_ID}.appspot.com/
,然后显示Hello, World!
。
Python
Python 示例应用包含两个文件,其中一个文件 (create_app_engine_queue_tasks.py
) 作为命令行工具在本地运行,用于创建任务以及将任务添加到队列;另一个文件 (main.py
) 作为工作器部署在 App Engine 中,用于“处理”任务。
要下载并安装示例应用,请执行以下操作:
将示例应用代码库克隆到本地机器:
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
导航到包含示例代码的目录:
cd python-docs-samples/appengine/flexible/tasks/
安装所有依赖项:
pip install -r requirements.txt
确保已初始化
gcloud
工具并将其配置为使用您刚才创建的项目。将工作器服务 (
main.py
) 部署到 App Engine:gcloud app deploy
验证索引页面是否正在提供服务:
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 插件目标和参数。
如需下载并安装示例应用,请执行以下操作:
将示例应用代码库克隆到本地机器:
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
导航到 Tasks 示例的顶级目录:
cd java-docs-samples/appengine-java8/tasks/quickstart/
确保已初始化
gcloud
工具并将其配置为使用您刚才创建的项目。构建并运行本地命令行工具 (
CreateTask.java
):mvn appengine:run
将工作器服务 (
TaskServlet.java
) 部署到 App Engine:mvn appengine:deploy
PHP
PHP 示例应用包含两个文件,其中一个文件 (/snippets/src/create_task.php
) 作为命令行工具在本地运行,用于创建任务以及将任务添加到队列;另一个文件 (/apps/handler/index.php
) 作为工作器部署在 App Engine 中,用于“处理”任务。
要下载并安装示例应用,请执行以下操作:
将示例应用代码库克隆到本地机器:
git clone https://github.com/GoogleCloudPlatform/php-docs-samples
导航到 Tasks 示例的顶级目录:
cd php-docs-samples/appengine/standard/tasks
在
tasks
目录中,您将看到两个子目录:apps/handler
:包含要部署到 App Engine 的工作器服务的代码snippets
:包含本地命令行工具的代码
确保已安装 Composer。如果要在本地使用,请确保
composer.phar
位于两个子目录中。如需了解本地运行与全局运行,请参阅 Composer 文档。在
snippets
目录中,安装所有依赖项:composer install
如果仅在本地运行,请使用以下命令:php composer.phar install
在
apps/handler
目录中,安装所有依赖项:composer install
如果仅在本地运行,请使用以下命令:php composer.phar install
确保已初始化
gcloud
工具并将其配置为使用您刚才创建的 Google Cloud 项目。在
apps/handler
目录中,使用gcloud app deploy
命令将工作器服务部署到 App Engine:gcloud app deploy
执行检查以确保包含该服务的应用正在运行:
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 中,用于“处理”任务。
要下载并安装示例应用,请执行以下操作:
确保已安装
gcloud
App Engine Go 组件:gcloud components install app-engine-go
确保已初始化
gcloud
工具并将其配置为使用您刚才创建的项目。将示例应用代码库复制到本地机器:
go get github.com/GoogleCloudPlatform/golang-samples/appengine/go11x/tasks/...
导航到工作器示例代码的
tasks/handle_task
目录。cd golang-samples/appengine/go11x/tasks/handle_task
请注意
app.yaml
文件,它包含必要的配置信息。将工作器服务 (
handle_task.go
) 部署到 App Engine:gcloud app deploy
执行检查以确保包含该服务的应用正在运行:
gcloud app browse
您的浏览器会打开
https://{YOUR_PROJECT_ID}.appspot.com/
,然后显示Hello, World!
。
Node.js
Node.js 示例应用包含两个文件,其中一个文件 (createTask.js
) 作为命令行工具在本地运行,用于创建任务以及将任务添加到队列;另一个文件 (server.js
) 作为工作器部署在 App Engine 中,用于“处理”任务。
要下载并安装示例应用,请执行以下操作:
将示例应用代码库克隆到本地机器:
git clone https://github.com/googleapis/nodejs-tasks.git
导航到包含示例代码的目录:
cd nodejs-tasks/samples
安装所有依赖项。
您可以使用 npm:
npm install
或者您可以使用 yarn:yarn install
确保已初始化
gcloud
工具并将其配置为使用您刚才创建的项目。将工作器服务 (
server.js
) 部署到 App Engine 标准环境:gcloud app deploy app.yaml
执行检查以确保包含该服务的应用正在运行:
gcloud app browse
您的浏览器会打开
https://{YOUR_PROJECT_ID}.appspot.com/
,然后显示Hello, World!
。
Ruby
Ruby 示例应用包含两个文件,其中一个文件 (create_Task.rb
) 作为命令行工具在本地运行,用于创建任务以及将任务添加到队列;另一个文件 (app.rb
) 作为工作器部署在 App Engine 中,用于“处理”任务。
要下载并安装示例应用,请执行以下操作:
将示例应用代码库克隆到本地机器:
git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples.git
导航到包含示例代码的目录:
cd ruby-docs-samples/appengine/cloud-tasks
安装依赖项:
bundle install
确保已初始化
gcloud
工具并将其配置为使用您刚才创建的项目。将工作器服务 (
app.rb
) 部署到 App Engine 柔性环境:gcloud app deploy app.yaml
执行检查以确保包含该服务的应用正在运行:
gcloud app browse
您的浏览器会打开
https://{YOUR_PROJECT_ID}.appspot.com/
,然后显示Hello, World!
。
如需详细了解如何创建 App Engine 任务处理程序,请参阅创建 App Engine 任务处理程序。
创建 Cloud Tasks 队列
使用 gcloud
CLI gcloud
队列管理功能在您刚才准备的环境中创建队列。
在命令行中输入以下内容:
gcloud tasks queues create my-queue
等待队列初始化,然后使用
describe
来验证队列是否已成功创建:gcloud tasks queues describe my-queue
检查输出是否类似于以下内容:
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#
在本地创建一项任务,将其添加到您设置的队列,然后将该任务交付给一个异步工作器:
您可以通过示例应用的代码在您的机器上手动设置以下环境变量,或者或通过别名设置以下环境变量。示例应用使用这些变量来创建将任务添加到队列的请求:
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
导航到
TasksSample
文件夹:cd ../api/TasksSample
使用
test
创建一项任务并添加载荷(字符串“hello”)。 您之前部署的CloudTasks
应用具有一个端点log_payload
,该端点通过记录载荷来对其进行处理。dotnet test
请检查日志以确保端点已接收到任务:
gcloud app logs read
Python
在本地创建任务,将其添加到您设置的队列,并将该任务交付给异步工作器:
您可以通过示例应用的代码在您的机器上手动设置以下环境变量,或者或通过别名设置以下环境变量。示例应用使用这些变量来创建将任务添加到队列的请求:
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
使用本地
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
验证是否收到了负载:
gcloud app logs read
Java
在本地创建任务,将其添加到您设置的队列,然后将任务交付给异步工作器:
您可以通过示例应用的代码在您的机器上手动设置以下环境变量,或者或通过别名设置以下环境变量。示例应用使用这些环境变量来创建将任务添加到队列的请求:
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
创建一个以您部署的 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"
检查日志以验证是否收到了负载:
gcloud app logs read
PHP
在本地创建任务,将其添加到您设置的队列,然后将该任务交付给异步工作器:
导航到
snippets
目录。您可以通过示例应用的代码在您的机器上手动设置以下环境变量,或者或通过别名设置以下环境变量。示例应用使用这些环境变量来创建将任务添加到队列的请求:
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
使用本地代码段
create_task.php
创建任务,然后添加hello
的载荷。负载可以是工作器完成任务处理过程所需的请求中的任何数据:php src/create_task.php $PROJECT_ID $LOCATION_ID $QUEUE_ID hello
检查日志以验证是否收到了负载:
gcloud app logs read
Go
在本地创建一项任务,将其添加到您设置的队列,然后将该任务交付给一个异步工作器:
如果您仍在
tasks/handle_task
目录中,请导航到tasks/create_task
目录。您可以通过示例应用的代码在您的机器上手动设置以下环境变量,或者或通过别名设置以下环境变量。客户端使用此信息来创建请求:
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
使用载荷
hello
创建任务,并将该任务添加到队列中。 负载可以是工作器完成任务处理过程所需的请求中的任何数据:go run . $PROJECT_ID $LOCATION_ID $QUEUE_ID hello
通过显示工作器服务的日志来验证是否已收到负载。
gcloud app logs read
Node.js
在本地创建一项任务,将其添加到您设置的队列,然后将该任务交付给一个异步工作器:
您可以通过示例应用的代码在您的机器上手动设置以下环境变量,或者或通过别名设置以下环境变量。客户端使用此信息来创建请求:
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
使用载荷
hello
创建任务,并将该任务添加到队列中。 负载可以是工作器完成任务处理过程所需的请求中的任何数据:node createTask.js $PROJECT_ID $QUEUE_ID $LOCATION_ID hello
通过显示工作器服务的日志来验证是否已收到负载。
gcloud app logs read
Ruby
在本地创建一项任务,将其添加到您设置的队列,然后将该任务交付给一个异步工作器:
您可以通过示例应用的代码在您的机器上手动设置以下环境变量,或者或通过别名设置以下环境变量。客户端使用此信息来创建请求:
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
使用载荷
hello
创建任务,并将该任务添加到队列中。 负载可以是工作器完成任务处理过程所需的请求中的任何数据:ruby create_task.rb $GOOGLE_CLOUD_PROJECT_ID $LOCATION_ID $QUEUE_ID hello
通过显示工作器服务的日志来验证是否已收到负载。
gcloud app logs read
清理
为避免因本页中使用的资源导致您的 Google Cloud 帐号产生费用,请按照以下步骤操作。
- 在控制台中,打开管理资源页面。
- 在项目列表中,选择要删除的项目,然后点击删除。
- 在对话框中输入项目 ID,然后点击关闭以删除项目。
后续步骤
- 按照创建 Cloud Tasks 队列指南创建和配置 Cloud Tasks 队列。
- 在 Cloud Tasks 概览 中详细了解 Cloud Tasks
- 如需详细了解如何使用 RPC 进行队列管理,请参阅 RPC API 参考文档。
- 参阅 REST API 参考,详细了解如何使用 REST 进行队列管理。