一、xxl-job-admin
通过nginx为调度中心集群做负载均衡
①分别启动8001和8002端口的xxl-job-admin实例
②配置Nginx进行负载均衡,启动nginx
http {
upstream yj{
server 192.168.124.129:8001;
server 192.168.124.129:8002;
}
server{
listen 8088;
location / {
proxy_pass http://yj;
}
}
}
③成功后,我们可以通过nginx来访问xxl-job-admin集群了
http://192.168.124.129:8088/xxl-job-admin
配置执行器和任务
路由策略置为轮询,cron表达式设置为每五秒调度一次
二 、执行器项目
新建执行器项目XXL-Task,pom.xml文件引入依赖,似乎存在与SpringBoot版本不兼容的情况,启动会报异常,此处采用的SpringBoot版本为1.5.18.RELEASE
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.18.RELEASE</version>
<relativePath />
</parent>
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.0.1</version>
</dependency>
application.properties文件
server.port=9001
#xxl-job调度中心工程的地址
xxl.job.admin.addresses=http://192.168.124.129:8088/xxl-job-admin
#xxl-job executor
xxl.job.executor.appname=testAppName
xxl.job.executor.ip=
xxl.job.executor.port=9999
#xxl-job log path
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
#xxl-job, access token
xxl.job.accessToken=
#执行器Log文件定期清理功能,指定日志保存天数,日志文件过期自动删除。限制至少保持3天,否则功能不生效
xxl.job.executor.logretentiondays=-1
XxlJobConfig
package com.yj.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
@Configuration
@ComponentScan(basePackages = "com.yj.handler")
public class XxlJobConfig {
@Value("${xxl.job.admin.addresses}")
private String adminAddresses;
@Value("${xxl.job.executor.appname}")
private String appName;
@Value("${xxl.job.executor.ip}")
private String ip;
@Value("${xxl.job.executor.port}")
private int port;
@Value("${xxl.job.accessToken}")
private String accessToken;
@Value("${xxl.job.executor.logpath}")
private String logPath;
@Value("${xxl.job.executor.logretentiondays}")
private int logRetentionDays;
@Bean(initMethod = "start", destroyMethod = "destroy")
public XxlJobSpringExecutor xxlJobExecutor() {
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
xxlJobSpringExecutor.setAppName(appName);
xxlJobSpringExecutor.setIp(ip);
xxlJobSpringExecutor.setPort(port);
xxlJobSpringExecutor.setAccessToken(accessToken);
xxlJobSpringExecutor.setLogPath(logPath);
xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
return xxlJobSpringExecutor;
}
}
MyJobHandler
package com.yj.handler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.JobHandler;
import com.xxl.job.core.log.XxlJobLogger;
@JobHandler(value = "myJobHandler")
@Component
public class MyJobHandler extends IJobHandler {
private static final Logger log = LoggerFactory.getLogger(MyJobHandler.class);
@Value("${server.port}")
private String port;
@Override
public ReturnT<String> execute(String param) throws Exception {
XxlJobLogger.log("Hello World,port:"+port);
log.info("Hello World,port:"+port);
return SUCCESS;
}
}
分别启动server.port=9001,9002端口的执行器实例,其中,xxl.job.executor.port=9999,9998,xxl.job.executor.appname都为testAppName
启动后在xxl-job-admin控制台(有点类似Eureka)已经能看到注册成功的执行器实例了
查看执行器控制台日志,发现xxl-job-admin对9001和9002的XXL-Task项目进行了负载均衡的调度
15:00:53.254 logback [Thread-28] INFO com.yj.handler.MyJobHandler - Hello World,port:9002
15:00:58.284 logback [Thread-16] INFO com.yj.handler.MyJobHandler - Hello World,port:9001
15:01:03.261 logback [Thread-28] INFO com.yj.handler.MyJobHandler - Hello World,port:9002