Uncode-Schedule 分布式任务调度组件

GPLv2
Java
跨平台
2015-05-29
冶卫军

基于zookeeper+spring task/quartz的分布式任务调度组件,确保所有任务在集群中不重复,不遗漏的执行。支持动态添加和删除任务。

功能概述

  1. 基于zookeeper+spring task/quartz的分布任务调度系统。
  2. 确保每个任务在集群中不同节点上不重复的执行。
  3. 单个任务节点故障时自动转移到其他任务节点继续执行。
  4. 任务节点启动时必须保证zookeeper可用,任务节点运行期zookeeper集群不可用时任务节点保持可用前状态运行,zookeeper集群恢复正常运期。
  5. 支持动态添加和删除任务。
  6. 添加ip黑名单,过滤不需要执行任务的节点。
  7. 简单管理后台

说明:

  • 单节点故障时需要业务保障数据完整性或幂等性
  • 具体使用方式和spring task相同k

模块架构

模块架构 Worker构成


Uncode-Schedule

Spring bean

public class SimpleTask {

    private static int i = 0;

    public void print() {
        System.out.println("===========start!=========");
        System.out.println("I:"+i);i++;
        System.out.println("=========== end !=========");
    }
}

xml配置

<!-- 分布式任务管理器 -->
<bean id="zkScheduleManager" class="cn.uncode.schedule.ZKScheduleManager"
    init-method="init">
    <property name="zkConfig">
           <map>
              <entry key="zkConnectString" value="127.0.0.1:2181" />
              <entry key="rootPath" value="/uncode/schedule" />
              <entry key="zkSessionTimeout" value="60000" />
              <entry key="userName" value="ScheduleAdmin" />
              <entry key="password" value="password" />
              <entry key="isCheckParentPath" value="true" />
              <entry key="ipBlacklist" value="127.0.0.2,127.0.0.3" />
           </map>
    </property>
</bean>

API

1 动态添加任务

ConsoleManager.addScheduleTask(TaskDefine taskDefine);

2 动态删除任务

ConsoleManager.delScheduleTask(String targetBean, String targetMethod);

3 查询任务列表

ConsoleManager.queryScheduleTask();


基于Spring Task的XML配置

XML方式

1 Spring bean

public class SimpleTask {

    private static int i = 0;

    public void print() {
        System.out.println("===========start!=========");
        System.out.println("I:"+i);i++;
        System.out.println("=========== end !=========");
    }
}

2 xml配置

<!-- 分布式任务管理器 -->
<bean id="zkScheduleManager" class="cn.uncode.schedule.ZKScheduleManager"
    init-method="init">
    <property name="zkConfig">
           <map>
              <entry key="zkConnectString" value="127.0.0.1:2181" />
              <entry key="rootPath" value="/uncode/schedule" />
              <entry key="zkSessionTimeout" value="60000" />
              <entry key="userName" value="ScheduleAdmin" />
              <entry key="password" value="password" />
              <entry key="isCheckParentPath" value="true" />
              <entry key="ipBlacklist" value="127.0.0.2,127.0.0.3" />
           </map>
    </property>
</bean>
<!-- Spring bean配置 -->
<bean id="taskObj" class="cn.uncode.schedule.SimpleTask"/>
<!-- Spring task配置 -->
<task:scheduled-tasks scheduler="zkScheduleManager">
    <task:scheduled ref="taskObj" method="print"  fixed-rate="5000"/>
</task:scheduled-tasks>

Annotation方式

1 Spring bean

@Component
public class SimpleTask {

    private static int i = 0;

    @Scheduled(fixedDelay = 1000) 
    public void print() {
        System.out.println("===========start!=========");
        System.out.println("I:"+i);i++;
        System.out.println("=========== end !=========");
    }

}

2 xml配置

<!-- 配置注解扫描 -->
<context:annotation-config />
<!-- 自动扫描的包名 -->
<context:component-scan base-package="cn.uncode.schedule" />
<!-- 分布式任务管理器 -->
<bean id="zkScheduleManager" class="cn.uncode.schedule.ZKScheduleManager"
    init-method="init">
    <property name="zkConfig">
           <map>
              <entry key="zkConnectString" value="127.0.0.1:2181" />
              <entry key="rootPath" value="/uncode/schedule" />
              <entry key="zkSessionTimeout" value="60000" />
              <entry key="userName" value="ScheduleAdmin" />
              <entry key="password" value="password" />
              <entry key="isCheckParentPath" value="true" />
              <entry key="ipBlacklist" value="127.0.0.2,127.0.0.3" />
           </map>
    </property>
</bean>
<!-- Spring定时器注解开关-->
<task:annotation-driven scheduler="zkScheduleManager" />

基于Quartz的XML配置

注意:spring的MethodInvokingJobDetailFactoryBean改成cn.uncode.schedule.quartz.MethodInvokingJobDetailFactoryBean

<bean id="zkScheduleManager" class="cn.uncode.schedule.ZKScheduleManager"
        init-method="init">
    <property name="zkConfig">
           <map>
              <entry key="zkConnectString" value="183.131.76.147:2181" />
              <entry key="rootPath" value="/uncode/schedule" />
              <entry key="zkSessionTimeout" value="60000" />
              <entry key="userName" value="ScheduleAdmin" />
              <entry key="password" value="password" />
              <entry key="autoRegisterTask" value="true" />
              <entry key="ipBlacklist" value="127.0.0.2,127.0.0.3" />
           </map>
    </property>
</bean> 


<bean id="taskObj" class="cn.uncode.schedule.SimpleTask"/>

<!-- 定义调用对象和调用对象的方法 -->
<bean id="jobtask" class="cn.uncode.schedule.quartz.MethodInvokingJobDetailFactoryBean">
    <!-- 调用的类 -->
    <property name="targetObject" ref="taskObj" />
    <!-- 调用类中的方法 -->
    <property name="targetMethod" value="print" />
</bean>
<!-- 定义触发时间 -->
<bean id="doTime" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
    <property name="jobDetail">
        <ref bean="jobtask"/>
    </property>
    <!-- cron表达式 -->
    <property name="cronExpression">
        <value>0/3 * * * * ?</value>
    </property>
</bean>
<!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序  -->
<bean id="startQuertz" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
        <list>
            <ref bean="doTime"/>
        </list>
    </property>
</bean>

uncode-schedule管理后台

访问URL:项目名称/uncode/schedule

img1img2


大家都在使用uncode-schedule


关于

作者:冶卫军(ywj_316@qq.com,微信:yeweijun)

技术支持QQ群:47306892


加载中

评论(10)

老衲大海
国产开源作业调度工具TASKCTL已经开源,可关注:https://www.oschina.net/p/taskctl 了解更多。
wanglu_bj
wanglu_bj
Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/boot/SpringApplication at cn.uncode.schedule.UncodeScheduleApplication.main(UncodeScheduleApplication.java:18) Caused by: java.lang.ClassNotFoundException: org.springfram
t
tlk20071p
ERROR: com.mryx.schedule.ZKScheduleManager - Check task owner error. java.lang.NullPointerException at com.mryx.schedule.ZKScheduleManager$1.run(ZKScheduleManager.java:252)
水梦星光
水梦星光
貌似坑较多 文档不全
Y.S
Y.S
虽然没怎么看懂,但是感觉挺赞的
Derrick_Zhao
Derrick_Zhao
springboot怎么用?
冶卫军
冶卫军
支持一下
JuST4iT
JuST4iT
TaskDefine.valueOf(TaskDefine taskDefine) 方法BUG if(StringUtils.isNotBlank(taskDefine.getTargetMethod())){ this.targetMethod = taskDefine.getTargetBean(); }
小小行者
小小行者
支持支持
clarkhan
clarkhan
github的库不更新了? #Uncode-Schedule#

Uncode-Schedule 1.1.0 发布,分布式任务调度组件

Uncode-Schedule 分布式任务调度组件,非常小巧,目前还是保持一个 jar 包,确保所有任务在集群中不重复,不遗漏的执行。 Uncode-Schedule 1.1.0 发布,新增分布式任务功能,分布式任务整体流...

04/02 16:35

Uncode-Schedule 1.0.3 发布,分布式任务调度组件

Uncode-Schedule分布式任务调度组件,非常小巧,无需任何修改就可以使quartz/spring task具备分布式特性,确保所有任务在集群中不重复,不遗漏的执行。 Uncode-Schedule 1.0.3 发布,本次版本...

2017/07/02 13:45

Uncode-Schedule 1.0.2 发布,分布式任务调度组件

Uncode-Schedule分布式任务调度组件,非常小巧,无需任何修改就可以使quartz/spring task具备分布式特性,确保所有任务在集群中不重复,不遗漏的执行。 Uncode-Schedule 1.0.2 发布,本次版本...

2017/03/30 13:09

Uncode-Schedule 1.0.0 发布,分布式任务调度组件

Uncode-Schedule分布式任务调度组件,非常小巧,无需任何修改就可以使quartz/spring task具备分布式特性,确保所有任务在集群中不重复,不遗漏的执行。 Uncode-Schedule 1.0.0 发布,本次版本...

2017/03/18 16:22

Uncode-Schedule 0.8.0 发布,分布式任务调度组件

Uncode-Schedule分布式任务调度组件,非常小巧,无需任何修改就可以使quartz/spring task具备分布式特性,确保所有任务在集群中不重复,不遗漏的执行。 Uncode-Schedule 0.8.0 发布,本次版本...

2017/01/22 13:55

Uncode-Schedule 0.7.0 发布,分布式任务调度组件

Uncode-Schedule分布式任务调度组件,非常小巧,无需任何修改就可以使quartz/spring task具备分布式特性,确保所有任务在集群中不重复,不遗漏的执行。 Uncode-Schedule 0.7.0 发布,本次版本...

2016/08/11 16:46

Uncode-Schedule 0.6.0 发布,分布式任务调度组件

Uncode-Schedule 是基于 zookeeper+quartz/spring task 的分布式任务调度组件,非常小巧,无需任何修改就可以使quartz/spring task具备分布式特性,确保所有任务在集群中不重复,不遗漏的执行...

2016/05/12 17:43

Uncode-Schedule 0.5.0 发布,分布式任务调度组件

Uncode-Schedule 是基于 zookeeper+quartz/spring task 的分布式任务调度组件,非常小巧,无需任何修改就可以使quartz/spring task具备分布式特性,确保所有任务在集群中不重复,不遗漏的执行...

2015/12/09 09:11

Uncode-Schedule 0.4.0 发布,分布式任务调度组件

Uncode-Schedule 是基于 zookeeper+quartz/spring task 的分布式任务调度组件,非常小巧,无需任何修改就可以使quartz/spring task具备分布式特性,确保所有任务在集群中不重复,不遗漏的执行...

2015/09/17 08:54

Uncode-Schedule 0.3.0 发布,分布式任务调度组件

Uncode-Schedule 是基于 zookeeper+quartz/spring task 的分布式任务调度组件,非常小巧,无需任何修改就可以使quartz/spring task具备分布式特性,确保所有任务在集群中不重复,不遗漏的执行...

2015/07/15 08:59

没有更多内容

加载失败,请刷新页面

暂无问答

分布式定时任务框架---Uncode Schedule

分布式定时任务框架---Uncode Schedule rabbitGYK 关注 2016.11.27 20:36* 字数 1446 阅读 7141评论 5喜欢 36赞赏 1 博客原文 作为一个支付公司的项目组,经常会有很多对账功能(签约对账、支...

11/02 13:33
28
0
Uncode系列开源后端开发组件

Uncode 是基于Java 语言的一系列开源后端开发组件,主要包括:移动后端开发框架Uncode-BaaS,通用数据库访问组件Uncode-DAL和分布式任务调度组件Uncode-Schedule。其核心设计目标是使移动后端...

2016/02/15 14:51
3K
5
这些优秀的国产分布式任务调度系统,你用过几个?

分布式调度在互联网企业中占据着十分重要的作用,尤其是电子商务领域,由于存在数据量大、高并发的特点,对数据处理的要求较高,既要保证高效性,也要保证准确性和安全性,相对比较耗时的业务...

04/18 11:47
26
0
uncode移动后端云【www.uncode.cn】--简介

Uncode移动后端云,专注于移动应用后端服务,专业的MBaaS服务商! 任何企业或个人,通过Uncode移动后端云,都可以给移动应用快速定制个性化的后端业务逻辑,可以大大降低后端开发时间和成本。...

2014/08/16 20:39
1K
0
Uncode移动后端云--MBaaS简介

MBaaS(移动后端即服务:Mobile Backend as a Service)是一种新兴移动中间服务,已经成为当今技术市场中最热门的趋势之一。与SaaS(软件即服务:Software as a Service)、IaaS(基础设施即...

2014/08/21 23:31
403
1
轻量级java消息中间件简介

自已实现了一个轻量级的java消息中间件,欢迎学习交流。https://github.com/uncodecn/uncode-mq

2016/08/03 18:26
467
1
使用Python内建chr, ord实现的简单的加/解密

###Python中有两个个内建方法,用于解决0-255与相应ascii码转换: 1. chr() Return a string of one character with ordinal i; 0 <= i < 256. 也就是,返回代表整数范围内0-255对应的字符。...

2014/03/25 20:54
2K
0
Java通用数据访问层 Uncode-DAL

Uncode-DAL 网站 : http://git.oschina.net/uncode/uncode-dal-all 本着不重复造轮子的原则,基于mybatis、spring jdbc、hibernate等ORM的通用数据访问层,支持基于datasource的读写分离、主...

2016/04/09 10:06
87
2
Mybatis---xml if表达式判断问题

测试别人的报表,前台报错提示查询失败。马上看后台报下面这个错误: ### Cause: java.lang.NumberFormatException: For input string: "y" at org.mybatis.spring.MyBatisExceptionTranslat...

09/18 18:07
26
0
汉字与区位码(2) - 分析

在没有 Uncode 的时代, 用 256 个 ACSII 只是方便了英文, 其他文字怎么办? 那时是各自为政的, 譬如中文就有: GB2312-80(国内简体)、Big5(台湾繁体)、HKSCS(香港繁体), 但它们互不兼容. GB231...

2014/09/26 15:32
9
0

没有更多内容

加载失败,请刷新页面

返回顶部
顶部