HTTP任务(Serverless)

更新时间:

SchedulerX 2.0支持调度HTTP任务,包含Serverless、Agent两种执行方式,通过控制台配置后即可使用。本文介绍如何在控制台配置HTTP任务。

HTTP任务简介

HTTP任务不同执行方式的区别与使用限制如下所示。

执行模式

Serverless

Agent

是否需要接入客户端

否,请求由SchedulerX发起调用。

是,请求由接入的用户端发起调用。

请求方式

目前支持GET、POST。

结果解析

HTTP请求返回结果需为JSON格式,服务端通过解析指定Key的值与设定值是否一致判断本次请求是否成功。

是否支持秒级任务

否,仅支持到分钟级别。

是。

是否支持内部URL

否,Serverless执行方式下,请求URL需要有公网权限,如果HTTP接口地址的格式为ip:port,需要机器开通公网权限。

是。

任务名解析

如果任务名是中文,后端可通过URLDecode.decode(jobName, "utf-8")解码。

如何创建HTTP任务

您可以通过GET和POST两种请求方式,创建HTTP任务。

GET

使用GET请求方式需要在客户端中添加配置,然后在控制台中创建任务。

第一步:基本配置

  1. 在客户端中添加配置GET方法配置。

    相关配置如下所示。关于客户端接入SchedulerX的详细步骤,请参见Spring Boot应用接入SchedulerX

    @GET
    @Path("hi")
    @Produces(MediaType.APPLICATION_JSON)
    public RestResult hi(@QueryParam("user") String user) {
        TestVo vo = new TestVo();
        vo.setName(user);
        RestResult result = new RestResult();
        result.setCode(200);
        result.setData(vo);
        return result;
    }
  2. 在控制台创建HTTP任务。

    HTTP任务GET方法的相关配置如下所示。关于创建调度任务,请参见创建调度任务HTTP Serverles 任务

    Serverless HTTP任务参数说明:

    配置项

    说明

    任务名

    任务名称。

    描述

    任务描述。简洁地描述业务,便于后续搜索。

    应用ID

    选择目标应用。

    任务类型

    指任务所实现的类型,当前支持JavaShellPythonGohttpxxljobDataWorks等类型,其中ShellPythonGo会弹出编辑框,在编辑框中编写任务脚本。本示例选择http

    完整的URL

    需要填写完整的URL,包括http://

    请求方式

    本示例选择GET

    应答解析模式

    选择应答解析模式。支持的模式如下:

    • HTTP响应码

      通过HTTP响应码应答,您需要设置标准的HTTP请求响应返回Code值。

    • 自定义JSON

      返回校验Key和返回校验Value。

      服务端默认HTTP请求结果为JSON格式,根据填写的Key和Value校验结果是否成功。

      {
        "code": 200,
        "data": "true",
        "message": "",
        "requestId": "446655068791923614103381232971",
        "success": true
      }

      上方示例代码可以校验Key为Success,校验value:true或者校验Code是否为200。

    • 自定义字符串

      根据自定义的返回字符串内容是否完全匹配,判断任务是否执行成功。

    返回校验Key

    仅支持返回值JSON格式,成功返回校验Key。

    返回校验Value

    仅支持返回值JSON格式,成功返回校验Value。

    执行超时时间(秒)

    serverless:基础版最大30秒,专业版最大120秒。agent:无限制。

    cookie

    例如key1=val1;key2=val2。多个值用半角分号(;)隔开,最大长度为300字节。

    执行方式

    serverless:由服务端发起请求,需要公网可访问的URL。

    agent:需要提前部署schedulerxAgent,由客户端发起请求,可以配置内部URL。(仅支持1.8.2以上的客户端版本)。部署schedulerxAgent,请参见Agent接入(脚本或HTTP任务)

第二步:定时配置

  1. 定时配置配置向导页,设置定时参数和高级配置参数,然后单击下一步

    image

    定时参数说明如下:

    配置名称

    意义

    时间类型

    • none:无调度方式,一般通过工作流触发。

    • cron:Cron表达式。

    • api:通过API触发。

    • fixed_rate:固定频率。

    • second_delay:秒级固定延迟。

    • onetime:一次性任务。

    cron表达式(仅适用于cron时间类型)

    填写Cron表达式。可以直接按照Cron语法填写,也可以使用工具生成并验证。

    固定频率(仅适用于fixed_rate时间类型)

    填写固定频率,单位为秒,仅支持60秒以上。例如,200表示每200s调度一次。

    固定延迟(仅适用于second_delay时间类型)

    填写固定延迟,单位为秒。范围为1秒~60秒。例如,5表示延迟5秒触发调度。

    当时间类型选择Cron后,可以进行高级配置。高级配置参数说明如下:

    配置名称

    说明

    时间偏移

    数据时间相对于调度时间的偏移,可以在调度时从上下文获取该值。

    时区

    可以根据实际情况选择不同时区,包括一些常用国家或地区,也包括标准的GMT表达方式。

第三步:通知配置

HTTP任务支持错误报警,当出现上述超时以及返回值不符合预期的问题时,您可以在创建任务时设置报警条件,接收相应的报警信息。

  1. 通知配置配置向导页,设置报警参数及联系人,然后单击完成

    创建任务-报警配置

  2. 任务创建成功后,在任务管理页面的操作列,单击运行一次

    出现以下结果,表明任务执行成功。Serverless HTTP 任务结果

POST

使用POST请求方式,需要在客户端中添加配置,然后在控制台中创建任务。

第一步:基本配置

  1. 在客户端中添加POST配置。

    POST方法的配置信息如下所示。关于客户端接入SchedulerX的详细步骤,请参见Spring Boot应用接入SchedulerX

    import com.alibaba.schedulerx.common.constants.CommonConstants;
    
    @POST
    @Path("createUser")
    @Produces(MediaType.APPLICATION_JSON)
    public RestResult createUser(@FormParam("userId") String userId, 
            @FormParam("userName") String userName) {
        TestVo vo = new TestVo();
        System.out.println("userId=" + userId + ", userName=" + userName);
        vo.setName(userName);
        RestResult result = new RestResult();
        result.setCode(200);
        result.setData(vo);
        return result;
    }
  2. 在控制台创建HTTP任务。

    HTTP任务相关配置信息如下所示。关于创建调度任务,请参见创建调度任务Serverless HTTP POST

    Serverless HTTP任务参数说明:

    配置项

    描述

    完整的URL

    需要填写完整的URL,包括http://

    应答解析模式

    选择应答解析模式。支持的模式如下:

    • HTTP响应码

      通过HTTP响应码应答,您需要设置标准的HTTP请求响应返回Code值。

    • 自定义JSON

      返回校验Key和返回校验Value。

      服务端默认HTTP请求结果为JSON格式,根据填写的Key和Value校验结果是否成功。

      {
        "code": 200,
        "data": "true",
        "message": "",
        "requestId": "446655068791923614103381232971",
        "success": true
      }

      上面的示例代码可以校验Key为Success,校验value:true或者校验Code是否为200。

    • 自定义字符串

      按您自定义的返回字符串内容完全匹配判断任务是否执行成功。

    返回校验key返回校验value

    服务端默认HTTP请求结果为JSON格式,根据填写的Key和Value校验结果是否成功。

    {
      "code": 200,
      "data": "true",
      "message": "",
      "requestId": "446655068791923614103381232971",
      "success": true
    }

    上面的示例代码可以校验Key为Success,校验value:true或者校验Code是否为200。

    执行超时时间(秒)

    最大30秒,超过会报错。

    post参数

    POST表单参数,例如key1=val1;key2=val2

    cookie

    例如key1=val1;key2=val2。多个值用半角分号(;)隔开,最大长度为300字节。

    执行方式

    serverless:由服务端发起请求,需要公网可访问的URL。

    agent:需要提前部署schedulerxAgent,由客户端发起请求,可以配置内部URL。(仅支持1.8.2以上的客户端版本)。部署schedulerxAgent,请参见Agent接入(脚本或HTTP任务)

第二步:定时配置

定时配置配置向导页,设置定时参数和高级配置参数,然后单击下一步

创建任务-定时配置

定时参数说明如下:

配置名称

意义

时间类型

  • none:无调度方式,一般通过工作流触发。

  • cron:Cron表达式。

  • api:通过API触发。

  • fixed_rate:固定频率。

  • second_delay:秒级固定延迟。

  • onetime:一次性任务。

cron表达式(仅适用于cron时间类型)

填写Cron表达式。可以直接按照Cron语法填写,也可以使用工具生成并验证。

固定频率(仅适用于fixed_rate时间类型)

填写固定频率,单位为秒,只支持60秒以上。例如,200表示每200s调度一次。

固定延迟(仅适用于second_delay时间类型)

填写固定延迟,单位为秒。范围为1秒~60秒。例如,5表示延迟5秒触发调度。

当时间类型选择Cron后,可以进行高级配置。高级配置参数说明如下:

配置名称

意义

时间偏移

数据时间相对于调度时间的偏移,可以在调度时从上下文获取该值。

时区

可以根据实际情况选择不同时区,包括一些常用国家或地区,也包括标准的GMT表达方式。

第三步:通知配置

HTTP任务支持错误报警,当出现上述超时以及返回值不符合预期的问题时,您可以在创建任务时设置报警条件,接收相应的报警信息。

  1. 通知配置配置向导页,设置报警参数及联系人,然后单击完成

    创建任务-报警配置

  2. 任务创建成功后,在任务管理页面的操作列,单击运行一次

    出现以下结果,表明任务执行成功。Serverless HTTP 任务结果

如何获取任务基本信息

HTTP任务的基本信息在Header中,如需获取任务的基本信息,需要在客户端的pom.xml中增加以下依赖。

<dependency>
    <groupId>com.aliyun.schedulerx</groupId>
    <artifactId>schedulerx2-common</artifactId>
    <version>1.6.0</version>
</dependency>

以GET方法为例,通过以下方式获取任务基本信息。

import com.alibaba.schedulerx.common.constants.CommonConstants;

@GET
@Path("hi")
@Produces(MediaType.APPLICATION_JSON)
public RestResult hi(@QueryParam("user") String user,
        @HeaderParam(CommonConstants.JOB_ID_HEADER) String jobId,
        @HeaderParam(CommonConstants.JOB_NAME_HEADER) String jobName) {
    TestVo vo = new TestVo();
    vo.setName("armon");
    //若JobName是中文,需要进行URLDecode解码。
    String decodedJobName = URLDecoder.decode(jobName, "utf-8");
    System.out.println("user=" + user + ", jobId=" + jobId + ", jobName=" + decodedJobName);
    RestResult result = new RestResult();
    result.setCode(200);
    result.setData(vo);
    return result;
}

可以获取的任务基本信息如下所示。

CommonConstants常量

key

value描述

JOB_ID_HEADER

schedulerx-jobId

任务ID。

JOB_NAME_HEADER

schedulerx-jobName

任务名。仅支持英文命名。

SCHEDULE_TIMESTAMP_HEADER

schedulerx-scheduleTimestamp

调度时间的时间戳。

DATA_TIMESTAMP_HEADER

schedulerx-dataTimestamp

数据时间的时间戳。

GROUP_ID_HEADER

schedulerx-groupId

应用ID。

USER_HEADER

schedulerx-user

用户名。

MAX_ATTEMPT_HEADER

schedulerx-maxAttempt

实例最大重试次数。

ATTEMPT_HEADER

schedulerx-attempt

实例当前重试次数。

JOB_PARAMETERS_HEADER

schedulerx-jobParameters

任务参数。

INSTANCE_PARAMETERS_HEADER

schedulerx-instanceParameters

任务实例参数,需要API触发。

结果验证

HTTP任务执行结果在执行列表页可以进行查询,关于成功结果,请参见GET

任务执行失败时,单击详情可查看具体失败原因,如下所示。

  • 返回值和期望不相同返回值和期望不相同

  • 执行超时执行超时