xxl-job-executor内嵌服务器

xxl-job-executor内嵌服务器

xxl-job的执行器,会在业务服务中新开一个内嵌的服务,提供任务调度相关的接口,供调度中心调用。

    private void initEmbedServer(String address, String ip, int port, String appname, String accessToken) throws Exception {

        // fill ip port
        port = port>0?port: NetUtil.findAvailablePort(9999);
        ip = (ip!=null&&ip.trim().length()>0)?ip: IpUtil.getIp();

        // generate address
        if (address==null || address.trim().length()==0) {
            String ip_port_address = IpUtil.getIpPort(ip, port);   // registry-address:default use address to registry , otherwise use ip:port if address is null
            address = "http://{ip_port}/".replace("{ip_port}", ip_port_address);
        }

        // accessToken
        if (accessToken==null || accessToken.trim().length()==0) {
            logger.warn(">>>>>>>>>>> xxl-job accessToken is empty. To ensure system security, please set the accessToken.");
        }

        // start
        embedServer = new EmbedServer();
        embedServer.start(address, port, appname, accessToken);
    }

1. address、ip、port

执行器内嵌服务,要将自己的地址注册到调度中心,也就是xxl-job-group中的address_list。

与此相关的配置有三个:

xxl.job.executor.address=
xxl.job.executor.ip=
xxl.job.executor.port=

这三个都是可配置项,不是必须得。

  1. 如果配置了address,则优先以address为准;
  2. 如果没有配置address,则使用ip+port拼成address:http://ip:port;
  3. ip和port如果也没有配置,会自动获取;ip默认就是本机ip,port默认9999。
  4. 如果配置了addressport,但是address中的port port不一致,这种情况执行器也能启动,但是调度中心则无法访问执行器的内嵌服务。因为执行器的内嵌服务器绑定的端口是port,而调度中心通过address来访问执行器的内嵌服务,端口不一致,自然无法访问。

配置建议

ip和port配置具体的值,address使用二者拼接。

#如果是传统服务器部署
xxl.job.executor.ip=执行器服务ip
#如果是k8s部署
xxl.job.executor.ip=service名称.namespace名称

xxl.job.executor.port=执行器服务port
xxl.job.executor.address=http://${xxl.job.executor.ip}:${xxl.job.executor.port}/

关键是执行器的ip
生产环境,执行器服务和调度中心服务,可能是传统的服务器部署,也可能是k8s部署。
如果是传统的服务器部署,则配置服务器的ip(如果服务器只有一个网卡,可以自动注册,如果有多网卡,此时建议执行器不要自动注册了,而是手动录入);

如果是k8s部署,集群内部通过clusterIp访问,执行器的ip就要配置:service名称.namespace名称。

2. accessToken

执行器和调度中心,要么都不配置,要么都配置为同样的值。

3. 启动内嵌服务器

内嵌服务器使用了netty框架,netty相关的内容本文暂不关注。

3.1. 内嵌服务器提供的接口

这些接口的请求方式都是Post。

接口功能
/beat该接口永远返回成功。只要调度中心可以调通这个接口,那么调度中心对执行器的心跳检测就算成功
/idleBeat空闲检测,检测是否有空闲线程可以处理任务
/run任务调度
/kill终止任务
/log调度中心查询执行日志时,调用此接口

执行日志保存在执行器服务的服务器上,调度中心通过执行时间logId查询:

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值