HTTP任务
Schedulerx HTTP任务需要安装Agent进行调度,Serverless执行方式需要配置公网域名,存在稳定与安全性风险,建议使用XXL-JOB版HTTP任务。
前提条件
-
Serverless执行方式:通过云函数或无服务器架构触发HTTP任务。适用于公网API调用和轻量级任务。
-
Agent执行方式:通过在目标设备上安装SchedulerX Agent执行HTTP任务,需要提前部署schedulerxAgent。适用于内网服务调用和需要复杂处理的场景。
Serverless和Agent模式选择,您可以在控制台创建HTTP任务时,选择执行方式配置项为Serverless或者Agent。
执行方式
SchedulerX的HTTP任务和MSE-XXLJOB HTTP任务对比如下表:
|
SchedulerX Serverless(不再运维) |
Schedulerx Agent |
MSE-XXL-JOB |
|
|
是否需要接入客户端 |
否,由服务端发起调用 |
是,服务端将命令发给客户端,再由客户端发起调用 |
否,由服务端发起调用 |
|
请求方式 |
目前只支持GET、POST,后续根据用户需求陆续开通其他方法 |
||
|
请求定义 |
仅支持Cookie设置,POST方法的参数设置 |
支持HTTP任务所有参数设置,包括Header/Query/Body |
|
|
响应定义 |
|
||
|
是否支持秒级任务 |
否,仅支持到分钟级别 |
是 |
是 |
|
是否支持内部URL |
否 |
是 |
|
|
是否支持不挂载域名 |
否 |
是,支持K8s Service接入,不需要挂载网关和域名 |
|
|
是否支持广播分片 |
否 |
是 |
|
|
任务名解析 |
如果任务名是中文,后端可以通过URLDecode.decode(jobName, "utf-8")解码 |
||
如何创建HTTP任务
您可以通过GET和POST两种请求方式,创建HTTP任务。
步骤一:基本配置
GET
-
部署可访问的HTTP服务。
-
如果已具备可访问的HTTP服务,继续步骤 2中在任务调度控制台创建HTTP任务。确保已经准备好目标HTTP服务的URL、请求方法(如 GET 或 POST)以及其他相关配置信息。
-
尚未部署HTTP服务。请参考以下使用Java语言开发HTTP接口的示例代码:
@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; }
-
-
在分布式任务调度平台中创建HTTP任务。
HTTP任务GET方法的相关配置如下所示。关于创建调度任务,请参见创建调度任务。配置以下参数:任务名设置为
http_get,任务类型选择 Http,完整的url填写目标请求地址,请求方式选择 GET,应答解析模式选择 自定义JSON,返回校验key填写code,返回校验value填写200,执行超时时间设置为10秒,执行方式选择 serverless。
POST
-
部署可访问的HTTP服务。
-
如果已具备可访问的HTTP服务,继续步骤 2中在任务调度控制台创建HTTP任务。确保已经准备好目标HTTP服务的URL、请求方法(如 GET 或 POST)以及其他相关配置信息。
-
尚未部署HTTP服务。请参考以下使用Java语言开发HTTP接口的示例代码:
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; }
-
-
在分布式任务调度平台中创建HTTP任务。
HTTP任务POST方法相关配置信息如下所示。关于创建调度任务,请参见创建调度任务。设置任务名为
http_post,任务类型选择 Http,完整的url填写目标接口地址,请求方式选择 POST,应答解析模式选择自定义JSON,返回校验key填写code,返回校验value填写200,执行超时时间设置为10秒,ContentType选择 application/x-www-form-urlencoded,post参数按key1=value1&key2=value2格式填写,执行方式选择 serverless。
Serverless HTTP和Agent HTTP任务参数说明:
Serverless HTTP与Agent HTTP执行方式在任务调度控制台配置项相同。
|
配置项 |
描述 |
|
任务名 |
自定义任务名称。 |
|
描述 |
任务描述,尽量简洁地描述业务,便于后续搜索。 |
|
应用ID |
任务所属分组。可以在下拉列表中选择。 |
|
任务类型 |
指任务所实现的语言,当前选择HTTP类型。 |
|
完整的url |
需要填写完整的URL,以HTTP或者HTTPS开头。 |
|
请求方式 |
选择GET/POST请求方式。 |
|
应答解析模式 |
选择应答解析模式。支持的模式如下:
|
|
选择应答解析模式为http响应码时: |
|
|
http响应码 |
设置HTTP响应码Code,默认为200。 |
|
选择应答解析模式为自定义JSON时: |
|
|
返回校验key |
仅支持返回值JSON格式,成功返回校验Key。 |
|
返回校验value |
仅支持返回值JSON格式,成功返回校验Value。 |
|
选择应答解析模式为自定义字符串时: |
|
|
自定义字符串 |
设置自定义字符串。 |
|
执行超时时间 |
|
|
ContentType |
当请求方式为POST时,指定请求体的数据格式,支持的数据格式如下:
|
|
post参数 |
当请求方式为POST时,指定POST表单参数,示例如下:
|
|
cookie |
例如 |
|
执行方式 |
|
|
高级配置 |
|
|
任务失败重试次数 |
任务执行失败后重试次数,默认为0次。 |
|
任务失败重试间隔 |
任务执行失败后重试间隔,默认为30,单位秒。 |
|
任务并发数 |
同一个任务同一时间允许运行的最大实例个数,1表示不允许重复执行。如果超过并发数,会跳过当前调度。 |
|
清理策略 |
任务执行历史记录的清理策略,默认为保留最近N条,N为保留记录数。
|
|
保留记录数 |
任务历史执行记录的保留记录数,默认300条。 |
步骤二:定时配置
在定时配置配置向导页,设置定时参数和高级配置参数,然后单击下一步。
定时参数说明如下:
|
配置名称 |
意义 |
|
时间类型 |
|
|
cron表达式(仅适用于cron时间类型) |
填写Cron表达式。可以直接按照Cron语法填写,也可以使用工具生成并验证。 |
|
固定频率(仅适用于fixed_rate时间类型) |
填写固定频率,单位为秒,只支持60秒以上。例如,200表示每200s调度一次。 |
|
固定延迟(仅适用于second_delay时间类型) |
填写固定延迟,单位为秒。范围为1秒~60秒。例如,5表示延迟5秒触发调度。 |
|
调度时间(仅适用于one_time时间类型) |
选择日期和时间。例如, |
|
高级配置 |
|
|
时间偏移 |
数据时间相对于调度时间的偏移,可以在调度时从上下文获取该值。 |
|
时区 |
可以根据实际情况选择不同时区,包括一些常用国家或地区,也包括标准的GMT表达方式。 |
|
日历 |
设置任务生效日历。
|
|
生效时间 |
设置任务生效时间。
|
步骤三:通知配置
HTTP任务支持错误报警,当出现上述超时以及返回值不符合预期的问题时,您可以在创建任务时设置报警条件,接收相应的报警信息。
-
在通知配置配置向导页,设置报警参数及联系人,然后单击完成。
可配置的参数包括:超时报警(开启)、超时时间(单位为秒)、超时终止(关闭)、成功通知(关闭)、失败报警(开启)、连续失败次数(设为1)、无可用机器报警(开启)。通知渠道及联系人可选择应用分组联系人或自定义。
-
任务创建成功后,在任务管理页面,单击目标任务操作列的运行一次。
在任务实例记录的详情页,查看任务的执行结果和执行日志。
如何获取任务基本信息
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常量基本信息如下所示:
|
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。
任务执行失败时,单击详情可查看具体失败原因,如下所示:
-
返回值和期望不相同。实例详情页的结果或错误信息字段显示具体失败原因。例如错误信息为
The returned value is different from the expected value,表示返回的 JSON 中"success":false与期望值不一致,导致任务判定失败。 -
执行超时。HTTP任务执行超时时,实例详情页的结果或错误信息字段显示
java.net.SocketTimeoutException异常,表示套接字连接超时。