在xxl-job的git markdown文档中详细介绍了xxl-job中包含的RESTful api的功能以及应用场景。详细内容如下:
大家都知道,xxl-job作为一个分布式定时任务调度框架,主要是实现了控制器Admin以及执行器Executor这两部分的解耦。然后同时实现了控制器的集群部署,以及指定appname的执行器集群部署。执行器与控制器之间通过RESTful API进行系统交互,完成例如:执行期的注册、去注册或者控制器查询执行器是否存活(心跳检测)、是否繁忙检测等等。双方RESTful API的定义接口如下:
1.控制器端实现
1.1 控制器RESTful API接口:
public interface AdminBiz {
// ---------------------- callback ----------------------
/**
* callback
*
* @param callbackParamList
* @return
*/
public ReturnT<String> callback(List<HandleCallbackParam> callbackParamList);
// ---------------------- registry ----------------------
/**
* registry
*
* @param registryParam
* @return
*/
public ReturnT<String> registry(RegistryParam registryParam);
/**
* registry remove
*
* @param registryParam
* @return
*/
public ReturnT<String> registryRemove(RegistryParam registryParam);
// ---------------------- biz (custome) ----------------------
// group、job ... manage
}
主要功能分别为:
1. 执行器任务执行完成回调让控制器回显结果(callback)
2. 执行器注册(registry)
3. 执行器去注册(registry)
基于这个接口,xxl-job有两个实现类,一定要注意的是这两个实现类不是功能上实现繁复还是简单的问题,恰恰是这两个类是应用场景的问题(一个类作为客户端去请求,一个是作为服务端做响应处理)。不仅是控制器,执行器是同样的道理。一开始我也是这点没有搞清楚,导致代码看的云山雾罩。关键是看的源码比较少,还得努力。
1.1.1 该接口的客户端实现类:
public class AdminBizClient implements AdminBiz {
public AdminBizClient() {
}
public AdminBizClient(String addressUrl, String accessToken) {
this.addressUrl = addressUrl;
this.accessToken = accessToken;
// valid
if (!this.addressUrl.endsWith("/")) {
this.addressUrl = this.addressUrl + "/";
}
}
private String addressUrl ;
private String accessToken;
private int timeout = 3;
@Override
public ReturnT<String> callback(List<HandleCallbackParam> callbackParamList) {
return XxlJobRemotingUtil.postBody(addressUrl+"api/callback", accessToken, timeout, callbackParamList, String.class);
}
@Override
public ReturnT<String> registry(RegistryParam registryParam) {
return XxlJobRemotingUtil.postBody(addressUrl + "api/registry", accessToken, timeout, registryParam, String.class);
}
@Override
public ReturnT<String> registryRemove(RegistryParam registryParam) {
return XxlJobRemotingUtil.postBody(addressUrl + "api/registryRemove", accessToken, timeout, registryParam, String.class);
}
}
这个实现类的作为控制器RESTful API的客户端调用 XxlJobRemotingUtil.postBody 的功能来发送对应的控制器RESTful请求。其中构造器的两个参数分别代表的是远端控制器的url 以及是否采用安全token的接入形式。
public AdminBizClient(String addressUrl, String accessToken) {
this.addressUrl = addressUrl;
this.accessToken = accessToken;
// valid
if (!this.addressUrl.endsWith("/")) {
this.addressUrl = this.addressUrl + "/";
}
}
其中XxlJobRemotingUtil.postBody的实现形式如下,就是简单的构造了一个http请求,也就是此处最终要调用的RESTful 请求。