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=
这三个都是可配置项,不是必须得。
- 如果配置了
address,则优先以address为准; - 如果没有配置
address,则使用ip+port拼成address:http://ip:port; - ip和port如果也没有配置,会自动获取;ip默认就是本机ip,port默认9999。
- 如果配置了
address和port,但是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查询:


2488

被折叠的 条评论
为什么被折叠?



