elastic job (一) elastic-job-lite----SimpleJob
来源:互联网 发布:spss mac 教程 编辑:程序博客网 时间:2024/05/12 05:41
elastic-job分为elastic-job-lite 和elastic-job-cloud两部分,笔者最近打算再深度学习一下elastic-job,看了下版本升级到2.1.5了,我们就按照这个版本来学习elastic-job。
文档官网:http://dangdangdotcom.github.io/elastic-job/elastic-job-lite/01-start/quick-start/
首先我们要了解一下什么是任务调度,调度就是将一个任务套上一个时间,让该任务可以在时间规律上去循环执行。一般的技术quartz、spring task、java.util.Timer,这几种如果在单一机器上跑其实问题不大,但是如果一旦应用于集群环境做分布式部署,就会带来一个致命的问题,那就是重复执行,当然解决方案有,但是必须依赖数据库,将任务执行状态持久化下来。所以当当就把quartz和zookeeper结合起来达到分布式调度,并且添加其他功能,形成了elastic-job。
功能列表:
分布式调度协调
弹性扩容缩容
失效转移
错过执行作业重触发
作业分片一致性,保证同一分片在分布式环境中仅一个执行实例
自诊断并修复分布式不稳定造成的问题
支持并行调度
支持作业生命周期操作
丰富的作业类型
Spring整合以及命名空间提供
运维平台
下面我们来学习一下elastic-job-lite
首先我们可以先将运维平台搭建起来:
1、https://github.com/dangdangdotcom/elastic-job
下载源码
找到elastic-job-lite 下面的elastic-job-lite-console,然后用mvn 打包。
最终得到elastic-job-lite-console-2.1.5.tar.gz。保存下来上传到linux下,并且解压,在bin文件夹下执行./start.sh (-p 可以指定端口号)
启动成功访问 地址:端口号
能访问到这个页面就算搭建成功了。
(elastic-job 是依赖zookeeper来做协调的,所以还需要有zookeeper环境,搭建很简单,我就不贴出来)
现在开始编写任务代码:
job类型分为 SimpleJob 简单任务、Dataflow类型作业、Script类型作业
我们先来最简单的SimpleJob
首先将依赖的包引入进来:
<dependency> <groupId>com.dangdang</groupId> <artifactId>elastic-job-lite-core</artifactId> <version>2.1.5</version> </dependency>
写一个任务:
package cn.job;import com.dangdang.ddframe.job.api.ShardingContext;import com.dangdang.ddframe.job.api.simple.SimpleJob;import java.util.Date;/** * Created by siliang 2017/7/27. */public class SimpleJobDemo implements SimpleJob{ @Override public void execute(ShardingContext shardingContext) { System.out.println(new Date()+" job名称 = "+shardingContext.getJobName() +"分片数量"+shardingContext.getShardingTotalCount() +"当前分区"+shardingContext.getShardingItem() +"当前分区名称"+shardingContext.getShardingParameter() +"当前自定义参数"+shardingContext.getJobParameter()+"============start================="); }}
然后再写一个main函数来启动
package cn.job;import com.dangdang.ddframe.job.api.simple.SimpleJob;import com.dangdang.ddframe.job.config.JobCoreConfiguration;import com.dangdang.ddframe.job.config.dataflow.DataflowJobConfiguration;import com.dangdang.ddframe.job.lite.api.JobScheduler;import com.dangdang.ddframe.job.lite.config.LiteJobConfiguration;import com.dangdang.ddframe.job.reg.base.CoordinatorRegistryCenter;import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperConfiguration;import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperRegistryCenter;/** * Created by siliang on 2017/7/26. */public class TestJob { public static void main(String[] args) { new JobScheduler(createRegistryCenter(), createJobConfiguration("A")).init(); } private static CoordinatorRegistryCenter createRegistryCenter() { //192.168.112.128:2181,192.168.112.128:2182 这个为zk的地址 //demo-job 这个为1个zk环境的下的1个namespace 可以有多个 1个namespace下有多个job CoordinatorRegistryCenter regCenter = new ZookeeperRegistryCenter( new ZookeeperConfiguration("192.168.112.128:2181,192.168.112.128:2182", "demo-job")); regCenter.init(); return regCenter; } private static LiteJobConfiguration createJobConfiguration(String jobParameter) { // mySimpleTest 为jobname 0/10 * * * * ?为cron表达式 2 分片数量 0=北京,1=上海 分片对应内容 jobParameter 自定义参数 JobCoreConfiguration simpleCoreConfig = JobCoreConfiguration.newBuilder("simpleJobDemo", "0/10 * * * * ?", 2).shardingItemParameters("0=北京,1=上海").jobParameter(jobParameter).build(); SimpleJobConfiguration simpleJobConfig = new SimpleJobConfiguration(simpleCoreConfig, SimpleJobDemo.class.getCanonicalName()); JobRootConfiguration simpleJobRootConfig = LiteJobConfiguration.newBuilder(simpleJobConfig).build(); return result; }}
执行一下:
可以看到每隔10秒 2个分片都执行了,这就是 切片功能,可以并行处理。比如2个DB 一个在上海一个在北京,那么就可以按照分片的内容来进行分别执行2个地区的数据。
然后回到运维界面,
在注册中心点击 ADD 注册中心名称:随便定 注册中心地址: zk 地址 命名空间就是之前说到namespace,登录凭证如果没有可以不填。添加完之后点击连接。
连接完之后点击作业维度,可以看到刚刚执行的任务,目前状态是已下线。
现在再把之前的mian函数执行一下,
可以看到状态已经是正常了,并且多了好几个操作。其他的都很明白,就修改比较重要点。点击
可以看到除了上面3个选项其他都可以更改,main函数不关闭,并且在运维平台直接修改配置,会立即生效,大家可以自己试试玩玩。有一点需要提醒的是 如果在平台修改过配置,如果没有在平台将任务删除重新执行main函数的话,配置是会被平台的配置覆盖的。
这是elastic-job-lite 的SimpleJob,下一章我们讨论下DataflowJob。
- elastic job (一) elastic-job-lite----SimpleJob
- Elastic-Job-Lite实现原理
- elastic-job的elastic-job-lite-console部署
- Elastic-JOB
- Elastic-Job
- Elastic job
- Elastic-Job-Lite 项目编译问题
- Elastic-Job-Lite 分析( 作业配置)
- Elastic-Job-Lite详解之作业调度
- Elastic-Job-Lite 源码阅读 ---- 任务初始化
- Elastic-Job-Lite 源码阅读 ---- 作业执行
- Elastic-Job之简单Job
- Elastic-Job-Lite的原理简介和使用(推荐)
- elastic-job 构建
- Elastic-Job中常见问题
- Elastic-Job快速使用
- Elastic-Job的主要功能
- Elastic-Job实现原理
- String类——练习(4)
- ActiveMQ从初识到使用(一)
- 使用md5的算法进行加密
- 技术花絮
- 简易理解php的递归问题
- elastic job (一) elastic-job-lite----SimpleJob
- 求二叉树的高度/销毁一颗二叉树-->Destroy(Node* root)
- 求最大公约数与最小公倍数
- 下拉选项单--QComboBox和ComboBox
- 聊聊Dubbox(一):为何选择
- 线程和进程的区别
- swiper.js 坑点
- JAVA企业面试题精选 Java SE 91-100
- Quartz定时邮件发送多个备份文件