基于Redis的任务调度

基于redis的动态任务调度平台,支持 动态groovy任务和静态任务(任务要继承IJob接口)

任务调度平台:
这里假设任务失败有两种类型:
一、worker节点与master节点失去联系,认为任务失败
二、worker节点执行任务出错,这里认为该出错一定可以被worker节点捕获,worker节点会停止任务
规范:
worker:
启动一个任务: /job/start/taskID 首先获取执行任务的锁,然后获取task:如果为空则执行任务,如果等于自己地址则返回正在执行,如果不等于自己地址,则返回skip,执行:从redis获取任务的配置信息,执行调度 ok/skip/error msg,只有启动了才返回ok
停止一个任务: /job/stop/taskID 停止任务,删除task:taskID ok/skip/error msg,只有停止了才返回ok,或略返回skip
任务完成回调:任务完成后删除task:taskID,删除schedule:taskID
任务失败回调:任务失败后删除task:taskID
master:
/job/add 简单检查参数合法后保存到 taskID conf 下
/job/del/taskID 首先stop所有task 如果失败返回失败(失败只网络连接成功,但http返回失败),如果成功删除任务配置

/job/start/taskID 获取jobconf,设置schedule:taskID ,设置fire:taskID //直接分发任务到各个worker节点
/job/stop/taskID 删除fire:taskID,删除schedule:taskID,给所有节点发送stop命令


// 对于周期任务,master只要不断设置fire:taskID就可,对于单次执行任务,master应该监测任务是否执行成功


key: worker:ip:port value poolSize (worker端心跳设置,master端读取来发送任务请求)即表示一个注册Worker节点,又表示该节点上的任务数量(resume job的时候选择Job数量最少的节点执行Job)
key: task:taskID value: ip:port (worker端设置)表示某个任务在某个worker节点上执行,单次有效,执行完毕或者被stop都会清除,而且还有个过期时间,过期后才能重试任务
key: lock:task:taskID value: 0/1 表示某个任务的分布式锁,只有获取到锁的时候才能执行任务,锁的作用:在Master节点分配任务时防止子节点重复执行任务

key: schedule:taskID value on/off 标记某个任务正在接受调度,当单次任务完成或者任务stop/del时这个值会被移除
key:taskID value:conf 代表某个任务的具体信息,conf代表任务的详细详细,应该包含执行该任务的所有信息

key: fire:taskID value:delayTime 某个任务、周期任务到下一次执行的时间

关于任务是否会重复执行:
任务执行时先检查 task:taskID这个key如果不存在才执行,如果存在,并地址不匹配自己则不会执行,否则才执行任务


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值