XXL-JOB源码解析:2.控制器与执行器RESTful api实现浅谈

       在xxl-job的git markdown文档中详细介绍了xxl-job中包含的RESTful api的功能以及应用场景。详细内容如下:

doc/XXL-JOB官方文档.md · 许雪里/xxl-job - Gitee.comhttps://gitee.com/xuxueli0323/xxl-job/blob/master/doc/XXL-JOB%E5%AE%98%E6%96%B9%E6%96%87%E6%A1%A3.md#61-%E8%B0%83%E5%BA%A6%E4%B8%AD%E5%BF%83-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 请求。


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值