以前的公司项目分布式调度用的两种方式,一是通过配置文件进行分区,一是用阿里的一个dtss控件;配置文件的方式就不说了,比较挫;而阿里的dtss控件存在问题,而且该控件也已经停止维护更新(别的控件又要收钱)。
所以找到了这个elastic-job,目前只用到了其中的SimpleJob,后续的再更新。。。
官方文档
官网地址:http://elasticjob.io/index_zh.html
官网文档:http://elasticjob.io/docs/elastic-job-lite/00-overview/
使用
简单介绍:
这个框架的任务分派,简单来说就是,通过zookeeper知道线上总共有多少台执行机器,然后把分片平均分到线上的机器上,而每次机器的上线、下线都会触发分片的重新分配。
而分片其实就是数字,数字将平均分配到几台机器上,例如:
设置总分片数为4片(0,1,2,3总共4个分片),线上2台机器,机器A可能被分配到0、1两个数字,机器B被分配到2、3两个数字,然后就可以根据这个被分配到的数字进行任务划分。
依赖添加:
<!-- 引入elastic-job-lite核心模块 -->
<dependency>
<groupId>com.dangdang</groupId>
<artifactId>elastic-job-lite-core</artifactId>
<version>2.1.5</version>
</dependency>
<!-- 使用springframework自定义命名空间时引入 -->
<dependency>
<groupId>com.dangdang</groupId>
<artifactId>elastic-job-lite-spring</artifactId>
<version>2.1.5</version>
</dependency>
实现类:
public class TestJob implements SimpleJob{
private Logger logger = LoggerFactory.getLogger(TestJob.class);
@Override
public void execute(ShardingContext shardingContext) {
// 分片数字以及作业的一些信息都在ShardingContext这个类中
logger.info(...);
}
}
启动方法:
有两种启动方式:代码启动和配置文件加载启动,
代码启动:
// 启动方法
public void init(){
new JobScheduler(getRegistryCenter(), getJobConfiguration()).init();
}
// 配置zookeeper连接信息,以及进行连接
public CoordinatorRegistryCenter getRegistryCenter() {
// 连接Zookeeper服务器的列表,包括IP地址和端口号,多个地址用逗号分隔,如: host1:2181,host2:2181
// Zookeeper的命名空间
CoordinatorRegistryCenter regCenter = new ZookeeperRegistryCenter(new ZookeeperConfiguration(zookeeperIps, zookeeperNamespace));
regCenter.init();
return regCenter;
}
// 配置job的信息
public LiteJobConfiguration getJobConfiguration(){
// 定义作业核心配置
JobCoreConfiguration simpleCoreConfig = getJobCoreConfiguration();
// 定义SIMPLE类型配置
SimpleJobConfiguration simpleJobConfig = getSimpleJobConfiguration(simpleCoreConfig);
// 定义Lite作业根配置
LiteJobConfiguration simpleJobRootConfig = getLiteJobConfiguration(simpleJobConfig);