HTTP触发器节点

DataWorks提供HTTP触发器节点,支持您通过调用OpenAPI的方式,从外部环境(如本地环境或跨租户环境)触发某一工作流中的HTTP触发器节点及其后续节点的执行。该功能可帮助您实现本地任务触发,或满足跨租户环境中的任务依赖执行需求。

产品介绍

HTTP触发器节点是一种特殊的虚拟节点,允许你用DataWorks OpenAPI TriggerSchedulerTaskInstance触发本节点及下游节点的调度。

触发器原理

image

当上游任务节点运行完成,且外部调度系统发出调度指令后,HTTP触发节点才会触发下游任务节点运行。触发使用HTTP触发器节点可参见触发器节点使用示意图

触发器节点使用示意图

HTTP触发器节点常用于外部环境与DataWorks调度系统的互通。

image

图示说明

  1. 在数据开发中,创建一个包含HTTP触发器节点的工作流,配置好各节点的依赖关系,并发布到运维中心。

  2. 系统会根据调度时间自动生成周期实例。您可以在这些实例中获取HTTP触发器节点的信息(如节点ID、触发时间)。

  3. 通过传入这些信息,使用Java、Python代码或调试页面调用OpenAPI接口来触发节点运行。若只需触发某个实例及其后续流程,TriggerTime参数可设为固定值。若需动态触发所有实例,则TriggerTime应设为动态变量。HTTP触发器节点接收到并校验触发命令后,将依次执行后续节点。

触发条件

触发HTTP触发器节点需要满足以下条件:

  • HTTP触发器节点已经生成周期实例(在运维中心周期实例中可以找到该实例)。该实例在未被TriggerSchedulerTaskInstanceAPI成功触发前,将处于等待触发状态,其下游节点将被阻塞,直至成功调用TriggerSchedulerTaskInstanceAPI触发HTTP触发器节点执行完成后,下游节点依次执行。

  • HTTP触发器节点所依赖的所有父节点都已经执行成功(实例为成功状态)。

  • HTTP触发器节点生成的周期实例定时时间已到

  • HTTP触发器节点使用的调度资源组,在触发时间点资源充足

  • HTTP触发器节点处于非冻结状态

  • 仅在等待触发状态下的HTTP触发器节点才可被触发(已成功触发过的节点再次触发将不会执行)。

注意事项

  • 当上游任务节点运行完成,且外部环境发出调度指令后,HTTP触发节点才会触发下游任务节点运行。

  • 如果外部环境提前发出调度指令,但是上游任务节点没有运行完成,HTTP触发节点不会触发下游任务节点。系统会保留外部环境的调度指令,待上游任务运行完成后,再通过HTTP触发节点触发下游任务节点运行。

    说明

    外部环境的触发指令仅保留24小时。如果24小时内上游任务节点没有运行完成,则触发指令会丢失,外部环境本次发出的调度指令失效。

  • 当前HTTP触发器节点实例被触发执行成功后,不可再进行二次触发。

前提条件

  • RAM账号添加至对应空间(可选)。

    进行任务开发的RAM账号已被添加至对应工作空间中,并具有开发空间管理员(权限较大,谨慎添加)角色权限。添加成员并授权,详情请参见为工作空间添加空间成员

  • 对应空间已绑定Serverless资源组。详情请参见:使用Serverless资源组

  • 进行HTTP触发器节点开发前,需创建对应的HTTP触发器节点,详情请参见:创建周期任务

使用限制

  • HTTP触发器节点功能仅适用DataWorks企业版及以上版本,DataWorks版本详情请参见DataWorks各版本详解

  • HTTP触发器节点仅用于触发任务,无法作为计算型任务使用。您需要将待运行的任务节点设置为HTTP触发器节点的下游节点,以实现任务的触发和执行。

创建HTTP触发器节点

新建HTTP触发器节点

新建入口参考:创建HTTP触发器节点

配置HTTP触发器节点

新建HTTP触发节点后,在HTTP触发节点编辑页面右侧的调度配置中配置以下参数。更多参数配置,详情请参见节点调度

参数

说明

调度资源组

选择您所绑定的Serverless资源组。

实例生成方式

可选择T+1次日生成发布后即时生成

说明
  • HTTP触发器节点为空节点,无需编写节点内容。

  • HTTP触发器节点上游无节点时,默认上游节点为业务流程的根节点。

发布HTTP触发器节点

  1. 完成调度配置后,即可对已完成的HTTP触发器节点提交发布至生产环境,详情请参见:节点/工作流发布

  2. 发布完成的任务,将按照您配置的调度进行周期运行,可在运维中心 > 任务运维 > 周期任务运维 > 周期任务中查看已发布的周期任务,并对任务进行运维操作,详情请参见:运维中心入门

其他调度环境的触发配置

外部调度环境中进行触发配置时,您需要将获取到的HTTP触发节点实例参数配置到以下任一方式中,并通过调用TriggerSchedulerTaskInstance接口来触发HTTP触发器节点的执行。

获取HTTP触发节点实例参数

您可根据配置HTTP触发器节点时选择的实例生成方式,在运维中心查看并记录HTTP实例参数信息。

说明
  • T+1次日生成:需要次日去运维中心查看并记录HTTP实例参数信息。

  • 发布后即时生成:可立即前往运维中心查看并记录HTTP实例参数信息。

  1. 进入运维中心页面。

    登录DataWorks控制台,切换至目标地域后,单击左侧导航栏的数据开发与运维 > 运维中心,在下拉框中选择对应工作空间后单击进入运维中心

  2. 在左侧导航栏单击周期任务运维 > 周期实例,进入周期实例页面。

  3. 在列表中找到您所创建的HTTP触发器节点实例,记录实例的任务ID定时时间

    说明

    鼠标悬浮到HTTP触发器节点实例的名称上方,即可查看实例的任务ID。

方式一:Java调用

  1. 安装Java SDK,详情可参见通过IDE使用阿里云Java SDK

    其中,DataWorksSDK请用下面的pom配置。

    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>dataworks_public20240518</artifactId>
      <version>6.2.0</version>
    </dependency>
  2. 代码示例

    您可进入TriggerSchedulerTaskInstance调试页面,在SDK示例页签查看完整的Java示例。

    package com.example.demo;
    
    import com.aliyun.dataworks_public20240518.Client;
    import com.aliyun.dataworks_public20240518.models.TriggerSchedulerTaskInstanceRequest;
    import com.aliyun.dataworks_public20240518.models.TriggerSchedulerTaskInstanceResponse;
    import com.aliyun.teaopenapi.models.Config;
    import com.aliyun.teautil.models.RuntimeOptions;
    
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    
    public class CrossTenantTriggerSchedulerTaskTo {
        // 触发DataWorks节点运行的方法
        public static TriggerSchedulerTaskInstanceResponse runTriggerScheduler(com.aliyun.dataworks_public20240518.Client client, Long nodeId, String EnvType, Long TriggerTime) throws Exception {
            TriggerSchedulerTaskInstanceRequest request = new TriggerSchedulerTaskInstanceRequest(); // 创建API请求对象
            request.setTaskId(nodeId); // 设置要触发的节点ID
            request.setEnvType(EnvType); // 设置项目环境
            request.setTriggerTime(TriggerTime); //设置定时触发时间(毫秒级时间戳)
            RuntimeOptions runtime = new RuntimeOptions(); // 初始化运行时配置
            return client.triggerSchedulerTaskInstanceWithOptions(request, runtime); // 执行API调用并返回响应
        }
    
        public static void main(String[] args) throws Exception {
            // 初始化节点ID(示例值)
            String nodeId = "xxx";
            // 初始化项目环境(示例值)
            String EnvTypeStr = "xxx";
            // 初始化定时时间(示例值)
            String cycTimeStr = "xxx";
            //设置服务端点
            String endpoint = "xxx";
            // 将字符串转换为Long类型节点ID
            Long nodeId1 = Long.parseLong(nodeId);
            // 输出程序使用说明
            System.out.println("Usage: java -jar test-1.0-SNAPSHOT.jar nodeId EnvTypeStr cycTimeParam");
            // 解析定时时间并转换为时间戳
            SimpleDateFormat sdft = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(sdft.parse(cycTimeStr)); // 解析时间字符串
            Long cycTime = calendar.getTimeInMillis(); // 获取毫秒级时间戳
            // 输出调试信息(时间戳)
            System.out.println("定时时间戳:" + cycTime);
            // 初始化OpenAPI配置对象
            Config config = new Config();
            config.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")); // 从环境变量获取访问密钥ID
            config.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));// 从环境变量获取访问密钥Secret
            config.setEndpoint(endpoint);
            // 创建阿里云客户端实例
            Client client = new Client(config);
            // 执行触发节点操作
            TriggerSchedulerTaskInstanceResponse response = runTriggerScheduler(client, nodeId1,EnvTypeStr, cycTime);
            // 输出API响应结果(JSON格式)
            System.out.println(com.aliyun.teautil.Common.toJSONString(com.aliyun.teautil.Common.toMap(response)));
        }
    }

    按照以下参数说明,将上述代码中的相关参数替换成业务所需实际值。

    参数

    说明

    nodeId

    获取HTTP触发节点实例参数步骤获取的HTTP触发器节点任务ID

    EnvTypeStr

    HTTP触发器节点所在的项目环境。

    生产环境用Prod

    开发环境用Dev

    cycTimeStr

    获取HTTP触发节点实例参数步骤获取的HTTP触发器节点任务的定时时间。时间格式为yyyy-MM-dd HH:mm:ss

    endpoint

    目标HTTP触发器节点所在工作空间的服务地址,详情请参见阿里云OpenAPI开发者服务地址

    ALIBABA_CLOUD_ACCESS_KEY_ID

    目标HTTP触发器节点所在阿里云账号的AccessKey ID

    1. 获取AccessKey信息。

      登录DataWorks控制台,将鼠标悬停在顶部菜单栏右侧的用户头像上,单击进入AccessKey管理页面,获取AccessKey IDAccessKey Secret信息。

    2. 配置环境变量。 将获取到的 AccessKey ID 和 AccessKey Secret 配置为当前环境的环境变量。后续在代码中可通过读取环境变量的方式动态获取AK信息,从而避免明文存储带来的安全风险。详情请参见管理访问凭据

    ALIBABA_CLOUD_ACCESS_KEY_SECRET

    目标HTTP触发器节点所在阿里云账号的AccessKey Secret

方式二:Python调用

  1. 安装Python SDK,详情可参见集成SDK

    其中,DataWorksSDK请使用下面的命令安装。

    pip install alibabacloud_dataworks_public20240518==6.2.0
  2. 代码示例。

    您可进入TriggerSchedulerTaskInstance调试页面,在SDK示例页签查看完整的Python示例。

    image

方式三:API调试工具

您可进入TriggerSchedulerTaskInstance调试页面,在以下区域设置对应参数,单击下方的发起调用。

参数

说明

TaskId

获取HTTP触发节点实例参数步骤获取的HTTP触发器节点任务ID

EnvType

HTTP触发器节点所在的项目环境。

生产环境Prod

开发环境Dev

TriggerTime

获取HTTP触发节点实例参数步骤获取的HTTP触发器节点任务的定时时间。时间格式需要转换为毫秒时间戳。

image

相关文档

DataWorks提供HTTP触发器节点功能,能够在跨租户的场景中实现任务的触发与执行,详情请参见HTTP触发器节点实现跨租户触发节点执行