基于zookeeper的定时任务调度

最近这段时间项目改造的需求是一个接着一个,不少前人挖的深坑都得让我们这帮后人们填埋进去,但是项目运行了七八年了,已经不能满足新需求开发要求的迅速和规范。所以开发组研究决定,分步骤的解决这些历史遗留的问题。
首先解决的就是定时任务的调度问题,因为系统中有很多过滤数据以及对外同步数据的job,统计起来有五六十个定时任务,这些任务分别部署在两台机器上,因为定时时间都是设定的一样的,导致有时候同一个定时任务会被执行两次,这样的话会造成数据的混乱。
这是第一个要解决的问题,因为每天维护那些因为定时任务执行两次造成的错误数据就非常让人头疼,首先想到的是用Springcloud的注册中心,后来想到本地开发一直在用zookeeper+dubbo的RPC架构,就想到完全可以利用zookeeper做定时任务的调度中心。

import com.dangdang.ddframe.job.api.ShardingContext;
import com.dangdang.ddframe.job.api.simple.SimpleJob;
import com.zen.elasticjob.spring.boot.annotation.ElasticJobConfig;
import lombok.extern.log4j.Log4j;


@Log4j
@ElasticJobConfig(cron = "0 5 0 * * ?", shardingTotalCount = 1,
        shardingItemParameters = "0=testJobA,1=testJobB",
        startedTimeoutMilliseconds = 5000L,
        completedTimeoutMilliseconds = 10000L)
public class testJob implements SimpleJob {

    @Override
    public void execute(ShardingContext shardingContext) {
        log.error("定时任务开始执行");
        //todo 这里执行定时任务
    }
}

基于标签的使用,实现的过程非常简单。这样的话就可以将全部的定时任务从两台机器上分别注册到zookeeper上面,一台机器挂掉的话,则会立刻重启另一台机器。并且不会有同一个任务同步两次的情况出现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值