一、原理

elastic-job有lite版和cloud版,最大的区别是有无调度中心,笔者采用的是lite版本,无中心化。

tips:

  • 第一台服务器上线触发主服务器选举。主服务器一旦下线,则重新触发选举,选举过程中阻塞,只有主服务器选举完成,才会执行其他任务。

  • 某作业服务器上线时会自动将服务器信息注册到注册中心,下线时会自动更新服务器状态。

  • 主节点选举,服务器上下线,分片总数变更均更新重新分片标记。

  • 定时任务触发时,如需重新分片,则通过主服务器分片,分片过程中阻塞,分片结束后才可执行任务。如分片过程中主服务器下线,则先选举主服务器,再分片。

  • 通过上一项说明可知,为了维持作业运行时的稳定性,运行过程中只会标记分片状态,不会重新分片。分片仅可能发生在下次任务触发前。

  • 每次分片都会按服务器IP排序,保证分片结果不会产生较大波动。

  • 实现失效转移功能,在某台服务器执行完毕后主动抓取未分配的分片,并且在某台服务器下线后主动寻找可用的服务器执行任务。

 作业启动流程

作业执行流程

二、应用

引入maven依赖

<!-- elastic-job start -->
<dependency>
    <groupId>com.dangdang</groupId>
    <artifactId>elastic-job-lite-core</artifactId>
    <version>2.0.0</version>
</dependency>
<dependency>
    <groupId>com.dangdang</groupId>
    <artifactId>elastic-job-lite-spring</artifactId>
    <version>2.0.0</version>
</dependency>
<!-- elastic-job end -->

<!-- zookeeper -->
<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.4.9</version>
</dependency>

作业开发

public class TestTask implements SimpleJob{

public void execute(ShardingContext context) {
    System.out.println("定时任务测试");
    }

}

作业配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:reg="http://www.dangdang.com/schema/ddframe/reg"
    xmlns:job="http://www.dangdang.com/schema/ddframe/job"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.dangdang.com/schema/ddframe/reg
http://www.dangdang.com/schema/ddframe/reg/reg.xsd
http://www.dangdang.com/schema/ddframe/job
http://www.dangdang.com/schema/ddframe/job/job.xsd
        ">

<!-- 配置注册中心 ,任务的信息都会在zk中存储 -->
<reg:zookeeper id="regCenter" server-lists="127.0.0.1:2181" namespace="test-job"
    base-sleep-time-milliseconds="1000" max-sleep-time-milliseconds="3000" max-retries="3" />

<!-- 配置简单作业   -->
<job:simple id="testTask"
    class="com.xxx.TestTask"
    registry-center-ref="regCenter" cron="0 10 * * * ?"
    sharding-total-count="1" overwrite="true"><!-- 分片为1,即不需要分片;支持覆盖,即会用本次的配置覆盖缓存在zk中的配置 -->
    <job:event-log /><!-- job运行日志记录到log -->
    <job:event-rdb driver="${ds1.jdbc.driver_class_name}" <!-- job运行日志记录到DB, 详细参考:http://dangdangdotcom.github.io/elastic-job/post/user_guide/common/event_trace/-->
        url="${ds1.jdbc.url}" username="${ds1.jdbc.username}" password="${ds1.jdbc.password}"
        log-level="INFO" />
</job:simple>

</beans>

三、运维工具

部署方式

部署运维平台war文件(elastic-job-lite-console.war)至任何支持Servlet的Web容器(可选)。
运维平台以war包形式提供,可自行部署至tomcat或jetty等支持servlet的web容器中。elastic-job-console.war可通过mvn
install编译或maven中央仓库获取。

WEB-INF/classes/conf/auth.properties记录的是登录用户和密码

功能说明

两个维度查看:job维度、服务器维度

job维护:手动触发job,停止job,删除job,修改job配置,job状态查看。lite版本没有手动添加任务功能

最新文章

  1. java--POI解析excel兼容性问题
  2. cookie 使用笔记
  3. Java Swing的进化
  4. 使用WPF来创建 Metro UI程序
  5. php的递归函数
  6. PHPcurl抓取AJAX异步内容(转载)
  7. kibo.js 处理键盘事件的Javascript工具库
  8. -_-#【Angular】定义服务
  9. c++设计模式之策略模式
  10. 64位CentOS 6.0下搭建LAMP环境
  11. 入门级(python)
  12. Dynamics Crm2011 Removes an option from an Option Set control
  13. 鸟哥Linux私房菜基础学习篇学习笔记3
  14. RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2-模块管理按子系统进行分类管理
  15. git 远程
  16. Windows下安装 Memcache
  17. 用XPath查找HTML节点或元素
  18. Linux命令(十四) 查看工作目录文件 ls
  19. php获取星期几周几
  20. IE浏览器中不支持cookie问题

热门文章

  1. 我的Android进阶之旅------>真正在公司看几天代码的感触
  2. When Programmers and Testers Collaborate
  3. 【windows】如何让一个程序开机自启动
  4. 升级pip3的正确姿势
  5. Linux线程的几种结束方式
  6. 如何用命令行删除EasyBCD开机选择项?
  7. 深入理解JVM - 虚拟机类加载机制 - 第七章
  8. C++配置Opencv
  9. animate旋转动画练习,css3形变练习
  10. L95