cronner 分布式定时任务框架

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值