一、介绍
这是调度平台开放出来提供给用户实现一些自定义功能的API,可根据此OpenAPI构建出自己的执行器,适用于官方未涉及的异构系统(官方已有Java和Go执行器)。
二、接口签名
所有API都需要进行签名验证,包括执行器发请求给调度器,也包括调度器发请求给执行器,签名算法如下:
- 待签名参数
- signKey :调度平台的密钥,需要保持与调度器一致。
- times:请求时的时间戳,单位为毫秒级。
- token:固定值为
not-need-token
,目前暂未使用。 - rb:请求体的JSON字符串。
- 将待签名参数按照参数名的ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。
- 对字符串stringA进行MD5运算,得到字符串sign。
- 请求头增加Header参数:
- sign:签名字符串。
- times:请求时的时间戳,单位为毫秒级。
- token:固定值为
not-need-token
,目前暂未使用。
- 可参考Java的代码实现:
https://github.com/HoraceDH/cron-job/blob/master/cronjob-commons/src/main/java/cn/horace/cronjob/commons/httpclient/DefaultRequestInterceptor.java
三、执行器相关API
公共请求头
参数名 | 参数值 | 备注 |
---|---|---|
User-Agent | CronJob-语言-SDK | 例如:CronJob-Java-SDK |
Content-Type | application/json; charset=utf-8 | |
SDK-Version | 执行器SDK版本 | 例如:Java-1.0.0 |
sign | 签名后MD5字符串 | 上一步签名得到的值 |
times | 请求时的时间戳 | 单位为毫秒级 |
token | 固定值为not-need-token | 预留,目前暂未使用 |
1. 注册执行器
POST /openapi/executor/register 以Body(entity)的方式提交参数,参数如下:
- 请求内容
{
"tenant" : "horace", // 租户编码
"appName" : "go-example-executor", // 应用名称
"appDesc" : "Go示例执行器", // 应用描述
"hostName" : "HoraceiMacProMax.local", // 主机名称
"tag" : "common", // 执行器标签
"version" : "Go-1.0.0", // 执行器SDK版本
"address" : "192.168.16.51:8527" // 执行器WEB端口地址
}
- 响应内容 code = 0 表示成功,其他表示失败
{"code": 0, "msg": ""}
2. 注销执行器
POST /openapi/executor/unregister
3. 注册任务
POST /openapi/task/register 以Body(entity)的方式提交参数,参数如下:
- 请求内容
[
{
"appDesc" : "Go示例执行器", // 应用描述
"appName" : "go-example-executor", // 应用名称
"cron" : "* * * * * ? ", // Cron表达式
"expiredStrategy" : 2, // 过期策略
"expiredTime" : 180000, // 过期时间
"failureRetryInterval" : 5000, // 失败重试间隔
"failureStrategy" : 1, // 失败策略
"maxRetryCount" : 5, // 最大重试次数
"method" : "go-example-executor/main.DemoTask.Handle", // 任务方法标识
"name" : "Go测试任务", // 任务名称
"remark" : "", // 任务备注
"routerStrategy" : 1, // 路由策略
"tag" : "common", // 任务标签
"tenant" : "horace", // 租户编码
"timeout" : 10000 // 超时时间
}
]
- 响应内容 code = 0 表示成功,其他表示失败
{"code": 0, "msg": ""}
4. 执行器心跳
POST /openapi/executor/heartbeat 以Body(entity)的方式提交参数,参数如下:
- 请求内容
{
"address" : "192.168.16.51:8527" // 执行器WEB端口地址
}
- 响应内容 code = 0 表示成功,其他表示失败
{"code": 0, "msg": ""}
5. 任务完成回调
POST /openapi/task/complete 以Body(entity)的方式提交参数,参数如下:
- 请求内容
{
"taskLogId": 0, // 任务日志ID
"taskId": 0, // 任务ID
"state": 4, // 任务执行状态
"failedReason": "", // 失败原因
"realExecutionTime": 0, // 实际执行时间,毫秒级时间戳
"elapsedTime": 0, // 任务执行耗时
"address": "127.0.0.1:8527" // 执行器地址
}
- 响应内容 code = 0 表示成功,其他表示失败
{"code": 0, "msg": ""}
6. 调度器派发任务给执行器
POST /dispatch 以Body(entity)的方式提交参数,参数如下:
{
"page": 1, // 分页页码
"total": 1, // 总页数
"taskLogId": 6376237640206782465, // 任务日志ID
"taskId": 6372593233301606401, // 任务ID
"method": "go-example-executor/main.DemoTask.Handle", // 任务方法标识
"exeType": 0, // 执行类型
"cron": "* * * * * ?", // Cron表达式
"tag": "", // 任务标签
"executionTime": 1744822072000, // 执行时间
"params": "" // 任务参数
}
- 响应内容 code = 0 表示成功,其他表示失败
{"code": 0, "msg": ""}
7. 具体细节可参考Java的执行器实现
https://github.com/HoraceDH/cron-job/tree/master/cronjob-executor
最后更新