异步执行代码

您可以对使用 Cloud Tasks REST API、RPC API 或 Google Cloud 客户端库的异步代码执行任务排队,并使用 Java 11 App Engine 标准服务作为推送目标。

此示例使用了两个应用:

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

准备工作

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

  1. 下载并安装 Java SE 11 开发工具包 (JDK)
  2. 完成 Cloud Tasks 设置说明
  3. 下载并安装 Maven 来构建、部署和管理应用。
  4. 初始化 gcloud 工具并将其配置为使用您刚才创建的项目。
  5. 安装 Cloud SDK 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 替换为您的 Cloud 项目 ID。如果您的 pom.xml 文件已经指定了您的项目 ID,则您无需在运行的命令中添加 -Dapp.deploy.projectId 属性。

创建队列

使用 Cloud SDK gcloud queues 命令创建队列。

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

    gcloud tasks queues create MY_QUEUE

  2. 等待队列初始化。使用 describe 命令来验证队列的创建:

    gcloud tasks queues describe MY_QUEUE

    输出应类似于以下内容:

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

向队列添加任务

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

  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

后续步骤

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