cronner 分布式定时任务框架

来源:互联网 发布:nginx 不同目录转发 编辑:程序博客网 时间:2024/05/23 23:44

cronner 定时任务框架将作业的配置和应用程序剥离,实现了集中作业配置和管理。支持作业分片和失效转移。 源代码参考了开源项目elastic-job。

githup地址:https://github.com/fang-yan-peng/cronner

一、架构图


Cronner 内部分为调度节点和执行节点。调度节点负责作业配置、作业分片和任务调度,多台调度节点之间是互为备份关系,如果一个节点down机,其它的调度节点会接管任务调度。执行节点负责任务的运行、失效转移。

二 例子

Cronner 支持spring、springboot和main方法启动的进程。Cronner 配置十分简单,通过几个注解就可以实现作业的调度。以下以spring boot为例,其它的例子github的代码里都提供了。目前jar包还没有上传到maven私服,正在申请的过程中。运行例子需要下载源码编译jar包。

  1. 添加依赖.

     <dependency>     <groupId>org.jfaster.cronner</groupId>     <artifactId>spring-boot-starter-cronner</artifactId>     <version>1.0.1</version> </dependency> <dependency>     <groupId>org.jfaster.cronner</groupId>     <artifactId>spring-boot-starter-zookeeper</artifactId>     <version>1.0.1</version> </dependency>
  2. 创建一个作业。

    src/main/java/cronner/jfaster/org/example/job/listener/JobListenerExample.java

    src/main/java/cronner/jfaster/org/example/job/SimpeCronnerJobSpringboot.java

        package cronner.jfaster.org.example.job.listener;        import cronner.jfaster.org.executor.ShardingContexts;    import cronner.jfaster.org.job.api.listener.CronnerJobListener;        /**     * @author fangyanpeng     */        public class JobListenerExample implements CronnerJobListener{            @Override        public void beforeJobExecuted(ShardingContexts shardingContexts) {            System.out.println(String.format("----SpringBoot Job: %s begin----",shardingContexts.getJobName()));        }            @Override        public void afterJobExecuted(ShardingContexts shardingContexts) {            System.out.println(String.format("----SpringBoot Job: %s end----",shardingContexts.getJobName()));        }    }
        package cronner.jfaster.org.example.job;        import cronner.jfaster.org.job.annotation.Job;    import cronner.jfaster.org.example.job.listener.JobListenerExample;    import cronner.jfaster.org.job.api.ShardingContext;    import cronner.jfaster.org.job.api.simple.SimpleJob;        import java.util.concurrent.TimeUnit;        /**     * @author fangyanpeng     */    @Job(name = "cronner-simple-job",listener = JobListenerExample.class)    public class SimpeCronnerJobSpringboot implements SimpleJob {        @Override        public void execute(ShardingContext shardingContext) {            try {                TimeUnit.SECONDS.sleep(2);            } catch (InterruptedException e) {                e.printStackTrace();            }            System.out.println(String.format("jobName=%s,jobParameter=%s,shardingItem=%s,shardingParameter=%s",shardingContext.getJobName(),shardingContext.getJobParameter(),shardingContext.getShardingItem(),shardingContext.getShardingParameter()));        }    }
  3. 配置yml文件,并启动作业。

        ########### Zookeeper Configuration Start ###########    zookeeper:          serverLists: 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183          namespace: cronner          baseSleepTimeMilliseconds: 1000          maxSleepTimeMilliseconds: 3000          maxRetries: 3        ############ Zookeeper Configuration End ###########        ########### cronner packege Configuration Start ###########        cronner:          package: cronner.jfaster.org.example.job        ############ cronner packege Configuration End ###########    

    src/main/java/cronner/jfaster/org/example/CronnerSpringBootMain.java

        package cronner.jfaster.org.example;        import org.springframework.boot.SpringApplication;    import org.springframework.boot.autoconfigure.SpringBootApplication;    import org.springframework.context.ConfigurableApplicationContext;        /**     * @author fangyanpeng     */    @SpringBootApplication    public class CronnerSpringBootMain {        public static void main(String[] args) {            ConfigurableApplicationContext context = SpringApplication.run(CronnerSpringBootMain.class,args);        }    }

    执行main方法,就会启动作业,就是一个执行节点。每个执行节点都会启动一个端口接收调度节点的命令,默认端口9233。如果同一台机器启动多个执行节点,通过java -Dcronner.executor.port=8888指定端口,避免端口冲突。

  4. 启动调度节点,添加作业调度项

    • tar -zxvf cronner-manager-1.0.1.tar.gz
    • cd cronner-manager-1.0.1
    • vim conf/cronner.conf 修改登陆后台的用户名、密码、端口号、数据库地址、zk地址、jvm参数等。
    • sh bin/cronner.sh start 启动节点
    • 默认启动2145 端口
    • 访问 http://127.0.0.1:2145端口

    就会出现作业的配置页面,点击  作业配置》配置管理》添加   进行添加作业,都是页面可视化的,具体的配置和添加步骤github都有例子。注意添加的作业名称一定要与要调度的作业名一致,例如上面的 cronner-simple-job

原创粉丝点击