分布式定时任务程序
介绍
基于zookeeper实现的分布式定时任务程序。
软件架构
包含:
1.zookeeper
2.quartz
3.curator
4.rabbitmq
5.springboot
6.redisson
描述
1.是通过curator内置的选举类来操作选举master。
2.master注册定时任务
3.当有接入worker时,会开始将任务发送给mq。
使用
1.配置zookeeper的连接地址(目前写死在AbstractInitParam类中),在resources/properties中配置redis和rabbitmq。
2.编写定时任务,需要使用注解@Schedule标注类,@ScheduleGetBeanFromMethod标注Bean方法,具体请查看com.l.scheduleserver.exampleScheduleBean包下的例子。
3.只会有一个leader,其他新接入的都为worker,worker动态接入。
使用说明
当前程序只完成了分布的分配与注册定时任务的获取,定时任务只能写在Java类中继承Job接口。
剩余需要完成项:
1.zookeeper的连接配置后续支持:properties格式解析。
2.增加告警提醒:邮件提醒。
3.新增elasticsearch,用于对打印日志搜索,降低维护成本。
4.新增脚本执行(优先级最高)。
目前的问题
1.目前master只能为1个,所以当注册的任务过多时,会成为瓶颈。
2.目前无法想到如何才能使得mq中的请求同步,在执行任务会重复调用。
3.目前只能写成代码的定时任务,局限性太大。当前的模式传输模式应该是对于sql脚本、shell脚本等才行。(目前这块还需要学习,无法实现)
V1.0
已初步完成主要逻辑。
V1.1
改变传输的逻辑,将原来的http调用注册,改为将任务发送至mq中,worker监听执行。