快速入门:使用客户端库

本快速入门介绍如何使用客户端库执行工作流和查看执行结果。该示例假定您首先已使用 Cloud Consolegcloud 命令行工具部署工作流 myFirstWorkflow

准备工作

  1. 登录您的 Google Cloud 帐号。如果您是 Google Cloud 新手,请创建一个帐号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 的项目选择器页面上,选择或创建一个 Google Cloud 项目。

    转到“项目选择器”

  3. 确保您的 Cloud 项目已启用结算功能。 了解如何确认您的项目是否已启用结算功能

  4. 启用 Workflows API。

    启用 Workflows API
  5. 在 Cloud Console 中,转到服务帐号页面。

    转到“创建服务帐号”页面
  6. 选择创建服务帐号
  7. 服务帐号名称字段中,输入一个名称。
  8. 点击创建
  9. 角色列表中,选择 Logging > 日志写入者

    注意角色字段为您的服务帐号授予资源访问权限。如需将日志发送到 Cloud Logging,请分配 roles/logging.logWriter 角色。如果您开发的是正式版应用,请始终尽可能授予最小访问权限角色。如需了解详情,请参阅为服务帐号授予角色。如需查看工作流角色列表,请参阅访问权限控制参考文档
  10. 点击继续
  11. 点击完成

获取示例代码

  1. 将示例代码库克隆到本地计算机:

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

    或者,您也可以下载该示例的 zip 文件并将其解压缩。

  2. 切换到包含 Cloud Functions 函数示例代码的目录:

    cd nodejs-docs-samples/workflows/quickstart/
  3. 请查看下面的示例代码:

    const {ExecutionsClient} = require('@google-cloud/workflows');
    const client = new ExecutionsClient();
    
    /**
     * Sleeps the process N number of milliseconds.
     * @param {Number} ms The number of milliseconds to sleep.
     */
    function sleep(ms) {
      return new Promise(resolve => {
        setTimeout(resolve, ms);
      });
    }
    
    // Execute workflow
    try {
      const createExecutionRes = await client.createExecution({
        parent: client.workflowPath(projectId, location, workflow),
      });
      const executionName = createExecutionRes[0].name;
      console.log(`Created execution: ${executionName}`);
    
      // Wait for execution to finish, then print results.
      let executionFinished = false;
      let backoffDelay = 1000; // Start wait with delay of 1,000 ms
      console.log('Poll every second for result...');
      while (!executionFinished) {
        const [execution] = await client.getExecution({
          name: executionName,
        });
        executionFinished = execution.state !== 'ACTIVE';
    
        // If we haven't seen the result yet, wait a second.
        if (!executionFinished) {
          console.log('- Waiting for results...');
          await sleep(backoffDelay);
          backoffDelay *= 2; // Double the delay to provide exponential backoff.
        } else {
          console.log(`Execution finished with state: ${execution.state}`);
          console.log(execution.result);
          return execution.result;
        }
      }
    } catch (e) {
      console.error(`Error executing workflow: ${e}`);
    }

该程序将执行以下操作:

  1. 设置工作流客户端库。
  2. 执行工作流。
  3. 轮询工作流的执行(使用指数退避算法),直到执行终止为止。
  4. 输出执行结果。

安装依赖项

npm install

运行示例

如需运行该示例,请运行以下脚本:

node . PROJECT_ID [CLOUD_REGION] [WORKFLOW_NAME]

替换以下命令行参数:

  • PROJECT_ID(必需):Cloud Platform 项目的 ID
  • CLOUD_REGION:工作流的云端位置(默认值:us-central1
  • WORKFLOW_NAME:工作流的 ID(默认值:myFirstWorkflow

例如:

node . my-custom-project us-central1 userSignupWorkflow

输出示例:

Execution finished with state: SUCCEEDED
["Sunday","Sunday in the Park with George","Sunday shopping","Sunday Bloody Sunday","Sunday Times Golden Globe Race","Sunday All Stars","Sunday Night (South Korean TV series)","Sunday Silence","Sunday Without God","Sunday Independent (Ireland)"]

清理

为避免系统因本快速入门中使用的资源向您的 Google Cloud 帐号收取费用,请按照以下步骤操作。

  1. 转到 Cloud Console 中的工作流页面。
    工作流

  2. 选择删除按钮。

  3. 在出现的提示符处输入工作流的名称。

  4. 选择删除

后续步骤