天天看点

Easy Task —— 强大而简单的分布式任务调度平台

简单易用的分布式任务调度平台。来源于淘宝彩票调度平台,并先后在淘宝内容抓取平台和铁甲二手机任务调度平台中使用。具有如下特点:

去中心化。

支持上百台不同业务的应用服务器接入。任务在每个应用上独立执行,充分利用应用本身资源。

故障转移。应用如有多台执行机器,一台机器挂掉,其上的任务会切到其它机器。

管理控制台统一对任务修改、启动、停止等。控制台挂掉不影响任务的执行。

可以在线查看任务日志,实时了解任务执行情况。

下载并启动一个控制台。控制台同时也是worker,也能执行任务,缺省会启动一个内置的demoPlugin任务。

下载并启动

然后执行命令启动: java -jar task-console.jar

2) 方式二:直接剪出task-console spring boot代码模块,导入IDE中,执行com.cehome.task.console.TaskConsoleApplication启动。

如果你想快速部署一套简单可用的调度系统,可以采用方式二,在task-console代码里面添加插件,并部署使用。

如果你有多个应用,想接入调度平台,采用方式一,部署的console只做管理,不做任务执行。

点击“查看日志”按钮,可以看到任务执行日志(如果没有,可以停10秒再刷新一下)

点击“修改”查看或修改任务配置。系统基于spring,Bean名称“demoPlugin"就是内置的一个spring bean。

点击“停止”可以停止任务。

注:

1)控制台缺省内置了一个H2数据库(端口9092)来保存任务配置。你也可以采用外部H2或mysql数据库。

2)采用方式二剪出task-console代码模块,例子中的demoPlugin对应类为com.cehome.task.console.DemoPlugin,你可以直接修改此插件。

实际使用中,console只是管理任务,不执行任务,任务是在客户端应用中执行的。下面模拟app1和app2两个应用接入调度平台。为了方便,还是用task-console.jar来模拟。执行前,先保证上面的console还在运行状态。

启动另一个命令行窗口,执行如下命令启动app1(端口为8091)

java -jar task-console.jar --task.factory.appName=app1 --server.port=8091

-启动另一个命令行窗口,执行如下命令启动app2, (端口为8092)

java -jar task-console.jar --task.factory.appName=app2 --server.port=8092

观察app2的命令行输出窗口,发现demo已经转移到在app2中执行了。

以 task-spring-boot-client-demo 模块来说明spring boot应用如何接入调度平台。

增加依赖

加入@EnableTimeTaskClient注解

修改配置信息application.properties

需求配置的信息说明:

task.factory.appName - 应用名称,不同应用应该不一样。

task.factory.name - 集群名称,同时也是数据库表名,定了以后不要随意改动。

task.datasource.* 配置数据库信息,支持H2和mysql数据库,建议生产环境使用mysql数据库。

task.log.path - logback任务日志输出路径。

task.log.packages - 任务执行类所在包名,记录日志用。多个包名用半角分号隔开。如果不好确定,就用ROOT根日志。

开发任务插件

任务插件可以继承com.cehome.task.client.TimeTaskPlugin,由于执行方法是run()是固定的,在console配置任务信息时候就可以不指定方法名。stop()方法会在点击停止任务时候触发,代码应用停止任务执行和释放必要的资源。

任务插件也可以是普通的spring bean,但在console配置任务信息时候,需要指定要执行的方法。

启动应用task-spring-boot-client-demo

“应用”选择“boot-client-demo”;计划时间填5s(5秒);Bean名称跟上面开发插件一致,填写“bootDemoPlugin”;其它必填字段自己随意。

保存并关闭,点击“启动”,然后过10多秒钟点击“查看”日志,如果看到“task run……”日志,说明一切正常。

-

以 task-spring-mvc-client-demo 模块来说明。

spring xml中导入bean:

在spring xml 中引入配置信息spring/config.properties

在对应的spring/config.properties添加配置信息:

在spring mvc xml配置远程在线日志查看的controller。 不配这个controller则console无法在线连接到应用查看日志。

任务插件可以继承com.cehome.task.client.TimeTaskPlugin,由于执行方法是run()是固定的,在console配置任务信息时候就可以不配置。stop()方法会在点击停止任务时候触发,代码应用停止任务执行和释放必要的资源。

在spring xml 加入插件的扫描路径

启动应用task-spring-mvc-client-demo

应用选择“mvc-client-demo”;计划时间填5s(5秒);Bean名称跟上面开发插件一致,填写“mvcDemoPlugin”;其它必填字段自己随意。

缺省的情况下,console会启动一个内部的数据库,生产环境建议用外部数据库。还是以H2数据库来说明:

启动H2数据库

java -cp h2*.jar org.h2.tools.Server -tcpPort 9092 -tcpAllowOthers -webPort 8082 -webAllowOthers

修改console或client数据库配置信息

如果是console,可以修改task.h2.start=false 表示禁用内部数据库

独立mysql数据库

console 至少两个node

若干应用,每个应用至少保持两个node