一、介绍

这是调度平台开放出来提供给用户实现一些自定义功能的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-AgentCronJob-语言-SDK例如:CronJob-Java-SDK
Content-Typeapplication/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
最后更新