定时任务中间件_taskcontroll

 

一、背景

1、由于xx公司目前的定时任务采用的  spring + quartz 的框架,此框架只适用于本地的任务调度,在部署时只能部1台,对集群环境支持较弱,所以线上就一直有单点故障的隐患存在;

2、另外从开层面讲,采用spring + quartz 的方式,需要写大量的配置文件,平均一个任务需要定义 3-4个 bean, 配置文件繁琐。

3、不易于日常维护管理(时间表达式修改、暂停、恢复任务)

 

 

二、目标需求

1、解决单点故障的问题,使任务的执行方能以集群+负载均衡的方式部署,当业务方主机有任意一台或多台离线时,不影响整体业务的运行。

2、日志集中收集。将任务的执行情况集中收集,量化以下数据:任务平均执行时间、成功率等。

3、简化客户端的开发。

4、集中式管理

 

 

 

三、客户端开发说明

1、在项目pom.xml 中导入以下 jar包

<dependency>

    <groupId>taskcontroller-apigroupId>

    <artifactId>taskcontroller-apiartifactId>

    <version>0.5version>

dependency>

<dependency>

    <groupId>jettygroupId>

    <artifactId>jettyartifactId>

    <version>6.1.26version>

    <classifier>jetty-utilclassifier>

dependency>

<dependency>

    <groupId>jettygroupId>

    <artifactId>jettyartifactId>

    <version>6.1.26version>

    <classifier>jettyclassifier>

dependency>

 

 

2、自定义java类,并实现以下接口  com.cgtz.taskcontroll.executor.TaskExecutor,在execute 方法中完成要执行的任务;

 

import com.cgtz.taskcontroll.executor.TaskExecutor;

@Service

public class TaskExecutorImpl2 implements TaskExecutor {

     public void execute() {

           // 任务执行代码

     }

}

 

3、在spring配置文件中添加 监听服务:

<beanclass="com.cgtz.taskcontroll.core.TaskServer"init-method="init">

<propertyname="port"value="10005"/>

bean>

 

4、启动:以任何方式启动spring容器,加载 TaskServer 即可,无需依赖外部 servlet容器.

factory = newClassPathXmlApplicationContext("/spring.xml");

factory.start();

 

 

四、服务端使用说明

1、添加与修改任务

1、登录taskcontroller-server, 地址:http://172.16.34.174:9390/index.htm

2、点击左侧导航栏 <任务管理>,打开相应页面

3、点击页面上的<新增>按钮,弹出新增表单窗口,并完成必填项,

 定时任务中间件_taskcontroll_第1张图片

 

注:

1)、任务调用url: http://客户端 ip地址:sprig中配置的端口号/任务的类名

2)、任务状态:勾选启用,点击保存后任务会立即启动。

 

4、修改

在列表中点击要修改的任务,点击编辑按钮,弹出编辑窗口,即可完成修改操作。

注:在修改确认时,任务状态如果为启用,则通知服务器重新加载任务配置,并启动任务。

 

 

2、任务管理

操作按钮:



Ø  任务信息维护

增、删、查、改

 

Ø  恢复

用于恢复已暂停的任务

 

Ø  暂停

用于暂停正在执行中的任务

 

Ø  立即执行

无论任务处理运行中、还是已暂停状态,都可立即执行该任务一次。

 

Ø  测试连接

用于检察客户端连接是否断开,主要用于检查 任务调用url全局变量配置是否正确。

 定时任务中间件_taskcontroll_第2张图片

Ø  任务调用记录查看

选中任何一条任务记录,下方表格中即会刷出该任务的调用记录详情。

 

 

3、全局变量设置

全局变量的作用:

1、简化任务url配置, 

2、任务调度的负载均衡与错误重试

 

使用举例:

1、定义一个全局变量  server_url,有3个值

http://192.168.10.29:10010

http://192.168.10.29:10020

http://192.168.10.29:10030

定时任务中间件_taskcontroll_第3张图片 



2、此时在任务编辑窗口里就可以使用以下 url

{server_url}/test.task.TaskExecutorImpl2

它代表test.task.TaskExecutorImpl2  任务发布在  192.168.10.29:10010、192.168.10.29:10020、192.168.10.29:10030  这三台机器上,相当于给该任务配了3个可调用的地址:

http://192.168.10.29:10010/test.task.TaskExecutorImpl2

http://192.168.10.29:10020/test.task.TaskExecutorImpl2

http://192.168.10.29:10030/test.task.TaskExecutorImpl2

那么taskcontroll-server在调度时会随机调用其中一台,如果失败会调用其它机器,直到成功为止。(如果全部失败,会记录失败日志)

 

定时任务中间件_taskcontroll_第4张图片 

 

4、服务器状态

背景:

Taskcontroll-server 是工作在集群环境中的,生产环境中会发布多台,多台server中同一时间只有一台会进行任务调度工作,称为 leader。如果leader 离线, 会通过选举算法从其它备用 server中选 出一台作 leaer,来接管任务调度工作,从而保证业务方定时任务的按时执行。 Leader切换的时间在 500ms左右。

 

本页面主要用于查看服务器状态,如果出现故障以及时修复。

注:多个taskcontroll-server 相互之间必须要保障通信正常。

 



配置文件信息:

 #服务ID
server_ids=1,2

#服务发布地址:端口
server_urls=10.151.244.130:8080, 10.162.50.188:8080


5、任务调用日志

该页面放在首页,通过该页面可以查看每一次任务调度时的详情信息。

根据任务名称、执行结果可筛选相应记录,单击一条记录右侧会显示详情。

任务执行结果:

Ø  执行中: 业务方主机正在执行任务

Ø  执行成功: 最理想的状态

Ø  业务异常:指业务方出错,并返回了相关日志

Ø  网络故障:指taskcontroll-server与业务方主机网络通信失败(严重故障)

Ø  执行超时:指taskcontroll-server在15秒内没有收到业务方主机的反馈信息。只有业务方主机在执行任务的过程中因各种原因离线,才会导致执行超时,如:硬件宕机、突发网络故障、jvm异常等。

Ø  任务不存在:配置有误

日志截图

定时任务中间件_taskcontroll_第5张图片



五、架构设计图


基础架构图:
定时任务中间件_taskcontroll_第6张图片
核心流程图:

定时任务中间件_taskcontroll_第7张图片


客户端流程图


定时任务中间件_taskcontroll_第8张图片

任务恢复、暂停、立即执行请求流程

定时任务中间件_taskcontroll_第9张图片


你可能感兴趣的:(mvc框架)