因为需要用到java系的调度系统,所以最近在调研。
国内的主要有xxl-job、saturn、quartz和sia-task,因为quartz有数据库锁的问题,saturn没有说明是否可以做任务依赖,所以初步选择xxl-job和sia-task。
github: https://github.com/xuxueli/xxl-job/
xxl-job部署非常方便,起mysql、起调度中心和执行器即可:
docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
启动后初始化脚本在 /xxl-job/doc/db/tables_xxl_job.sql
参考 https://www.xuxueli.com/xxl-job/#二、快速入门
摘抄自: https://blog.csdn.net/hu_zhiting/article/details/83097799
原理:每个Bean模式任务都是一个Spring的Bean类实例,它被维护在“执行器”项目的Spring容器中。任务类需要加“@JobHandler(value=“名称”)”注解,因为“执行器”会根据该注解识别Spring容器中的任务。任务类需要继承统一接口“IJobHandler”,任务逻辑在execute方法中开发,因为“执行器”在接收到调度中心的调度请求时,将会调用“IJobHandler”的execute方法,执行任务逻辑。
原理:每个 “GLUE模式(Java)” 任务的代码,实际上是“一个继承自“IJobHandler”的实现类的类代码”,“执行器”接收到“调度中心”的调度请求时,会通过Groovy类加载器加载此代码,实例化成Java对象,同时注入此代码中声明的Spring服务(请确保Glue代码中的服务和类引用在“执行器”项目中存在),然后调用该对象的execute方法,执行任务逻辑。
执行器实际上是一个内嵌的Jetty服务器,默认端口9999(配置项:xxl.job.executor.port)。
在项目启动时,执行器会通过“@JobHandler”识别Spring容器中“Bean模式任务”,以注解的value属性为key管理起来。
“执行器”接收到“调度中心”的调度请求时,如果任务类型为“Bean模式”,将会匹配Spring容器中的“Bean模式任务”,然后调用其execute方法,执行任务逻辑。如果任务类型为“GLUE模式”,将会加载GLue代码,实例化Java对象,注入依赖的Spring服务,然后调用execute方法,执行任务逻辑。
github: https://github.com/siaorg/sia-task
相对比较新,今年五月份开源的。
官网上docker的部署方式有问题,虚拟机部署方式也折腾了好久。
docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
初始化: https://github.com/siaorg/sia-task/blob/master/DEPLOY.md
推荐是3节点的集群,这里做实验就部署一个节点。
docker run --name some-zookeeper -p 2181:2181 --restart always -d zookeeper
启动后用client进去看看是否成功:
docker run -it --rm --link some-zookeeper:zookeeper zookeeper zkCli.sh -server zookeeper
brew install node
然后按照官网:
nginx.conf按照https://github.com/siaorg/sia-task/blob/master/DEPLOY.md 配置,然后把资源指向上一步编出来的dist文件夹。
nginx -s reload