一种基于RPC及线程锁的分布式定时任务调度方法技术

技术编号:25890060 阅读:12 留言:0更新日期:2020-10-09 23:30
本发明专利技术涉及信息技术领域,提供了一种基于RPC及线程锁的分布式定时任务调度方法。的目的在于解决传统的定时任务产生堆积,导致定时任务执行准确性和频率性出现故障的问题。主要方案包括,新建定时任务执行器;在调度中心里,新建调度任务;调度中心的调度任务通过已注册的各任务执行器上报任务,将调度任务存到数据库中,执行时会从数据库中取出调度任务,执行具体任务;对执行器发出RPC心跳检测请求,第一个检测为存活状态的执行器会被选定并发送调度请求;任务执行器接收到调度请求后,会根据调度请求实例化一个任务线程,执行任务线程中具体的作业程序处理方法,成功后返回SUCCESS响应消息。

【技术实现步骤摘要】
一种基于RPC及线程锁的分布式定时任务调度方法
本专利技术涉及信息
,提供了一种基于RPC及线程锁的分布式定时任务调度方法。
技术介绍
定时任务调度是一种按照指定时间策略周期性执行任务的应用业务系统或模块,是应用软件中一个常见的模块,用于处理需重复并周期性调用的任务,定时任务调度一般被用于数据同步、交易对账、异常处理等场景中。传统的定时任务通常都是在不同的主机独立运行的,随着定时任务量的增加,运行定时任务需要的资源就会相应增加,到一定的任务量会导致性能瓶颈,任务量产生堆积,导致定时任务执行准确性和频率性出现故障。将定时任务系统扩展到一个分布式集群中是一种可行的改进方法,但由于分布式系统的复杂性,导致分布式定时任务系统的稳定性和可靠性都难以保证。
技术实现思路
本专利技术的目的在于解决传统的定时任务通常都是在不同的主机独立运行的,随着定时任务量的增加,运行定时任务需要的资源就会相应增加,到一定的任务量会导致性能瓶颈,任务量产生堆积,导致定时任务执行准确性和频率性出现故障的问题。本专利技术为解决上述技术问题,采用以下技术方案:一种基于RPC及线程锁的分布式定时任务调度方法,其特征在于,包括以下步骤:步骤1:新建定时任务执行器,得到任务执行器JobHandler,在任务执行器中开发job类,job类中定义了定时任务的时间表达式、定时任务的具体执行方法、定时任务的返回结果集,并最终得到处理结果;步骤2:在调度中心里,新建调度任务,调度任务用于定义调度的方法名称、时间、对应的job类、调度的超时时间、失败后的处理方式;步骤3:调度中心的调度任务通过已注册的各任务执行器上报任务,将调度任务存到数据库中,执行时会从数据库中取出调度任务,执行具体任务;步骤4:任务执行器采取集群部署,调度中心会感知在线的所有执行器,每次请求时,会按照顺序对执行器发出RPC心跳检测请求,第一个检测为存活状态的执行器会被选定并发送调度请求;步骤5:任务执行器接收到调度请求后,会根据调度请求实例化一个任务线程,执行任务线程中具体的作业程序处理方法,成功后返回SUCCESS响应消息;步骤6:调度时,会在日志中心记录一条任务日志,包括任务信息、调度信息、执行信息,任务日志可在日志中心按照日期和状态检索查看并得知定时任务执行结果,至此,整个调度任务周期结束。上述技术方案中,调度相应的调度任务时,采用线程池方式实现,执行时取出线程并加锁,避免线程被占用而引起阻塞。上述技术方案中,步骤1具体包括:步骤1.1:使用spring容器环境新建定时任务执行器,执行器的配置文件需定义任务执行器名称,所在服务器的ip地址和自定义端口;步骤1.2:在springbean实例中,开发job方法,此job方法的Java类格式要求为”publicReturnT<String>execute(Stringparam)”;步骤1.3:为job方法添加注解”@Job(value=”自定义的jobhandler名称,init=”JobHandler初始化方法”,destroy=”JobHandler销毁方法”)”,该注解可以在执行类启动时,在Java虚拟机中自动识别并按照注解的定丈来初始化和销毁执行方法,注解value值对应的是调度中心新建调度任务的名称,init对应调度任务的初始化方法,destroy对应调度任务的销毁方法。步骤1.4:配置完成后,Java虚拟机会根据注解信息生成作业处理程序,通过调度中心新建的任务也会以作业处理程序的形式存在于任务执行器中,Java虚拟机会扫描步骤1.3中添加的注解,发现任务并注入到执行容器中。上述技术方案中,步骤2具体包括:步骤2.1:进入调度中心,在任务执行器中选择步骤1中定义的执行器名称,任务描述简述定时任务的执行目的,定时任务的阻塞策略,cron定义定时任务的定时执行时间规则,定义执行器中的任务方法名称;步骤2.2:配置完成并保存后,此调度任务会在数据库新增一条定时任务信息,定时调度任务新增成功。上述技术方案中,步骤3具体包括:步骤3.1:调度中心通过数据库扫描调度任务时,通过任务执行器的心跳反应判断当前集群中存活的任务执行器,在调度任务数据中加入存活的任务执行器ID,将调度任务与执行器通过ID映射进行关系对应,由调度中心通知给各执行器;步骤3.2:调度中心判断有任务需要被执行时,从数据库中取出已在调度中心配置的触发器数据,由Java虚拟机实例化此定时任务触发器来执行;步骤3.3:如果实例化的定时任务触发器的名称和执行的时间相同,进行去重判断,只有一个节点去执行此任务。上述技术方案中,调度相应的调度任务时,采用线程池方式实现,执行时取出线程并加锁,避免线程被占用而引起阻塞,具体包括以下步骤:步骤A.1:调度中心添加一个已上报的定时调度任务到quartz中,quartz是一个完全由Java编写的开源作业调度框架;步骤A.2:quartz通过快慢线程池去执行已实例化的触发器,1分钟内若有10次运行超过500ms就会启动慢线程池,否者就进入快线程池;步骤A.3:通过定时调度任务在实例化时由调度中心分配的任务ID字段查询数据库中保存的定时任务信息,将任务实例装载到线程池中,并调用执行触发程序;步骤A.4:从数据库中获取任务的线程阻塞策略,默认是serialexecution串行执行,根据任务ID对定时任务执行线程加锁,并继续递交给执行器执行。上述技术方案中,步骤4具体包括:步骤4.1:调度中心实例化一个RpcReferenceBean实例,此实例是RPC调用方法的应用类,用于包装RPC服务,进行消息的放松和接收,通过此实例初始化一个netty_http服务端和客户端;步骤4.2:实例化一个RpcRequest实例,此实例包装RPC的消息请求发送服务,调用步骤4.1中的netty_http服务端的asyncSend方法,将RPC请求通过异步发送的方式,发送给任务客户端,并获得具体任务的请求结果;步骤4.3:RPC消息实例通过getPool方法,从步骤4.1中实例的RpcReferenceBean中初始化的netty_http中获取客户端的连接池;步骤4.4:通过连接池获取netty_http客户端服务连接,调用其send方法发送任务调度请求,由任务客户端接收任务请求并处理具体任务;步骤4.5:发送请求时使用对象封装调度请求参数和响应数据,在进行通讯之前底层会将上述两个对象序列化,并进行数据协议以及时间戳检验,达到数据加密的功能;步骤4.6:netty_http客户端会尝试与数据库记录的所有执行器进行消息通信,当收到500的响应码时,自动转移请求到下一个任务执行器,直到有任务执行器返回200响应码,发送实际定时任务id到第一个检测为存活状态的任务执行中。上述技术方案中,步骤5具体包括:本文档来自技高网...

【技术保护点】
1.一种基于RPC及线程锁的分布式定时任务调度方法,其特征在于,包括以下步骤:/n步骤1:新建定时任务执行器,得到任务执行器JobHandler,在任务执行器中开发job类,job类中定义了定时任务的时间表达式、定时任务的具体执行方法、定时任务的返回结果集,并最终得到处理结果;/n步骤2:在调度中心里,新建调度任务,调度任务用于定义调度的方法名称、时间、对应的job类、调度的超时时间、失败后的处理方式;/n步骤3:调度中心的调度任务通过已注册的各任务执行器上报任务,将调度任务存到数据库中,执行时会从数据库中取出调度任务,执行具体任务;/n步骤4:任务执行器采取集群部署,调度中心会感知在线的所有执行器,每次请求时,会按照顺序对执行器发出RPC心跳检测请求,第一个检测为存活状态的执行器会被选定并发送调度请求;/n步骤5:任务执行器接收到调度请求后,会根据调度请求实例化一个任务线程,执行任务线程中具体的作业程序处理方法,成功后返回SUCCESS响应消息;/n步骤6:调度时,会在日志中心记录一条任务日志,包括任务信息、调度信息、执行信息,任务日志可在日志中心按照日期和状态检索查看并得知定时任务执行结果,至此,整个调度任务周期结束。/n...

【技术特征摘要】
1.一种基于RPC及线程锁的分布式定时任务调度方法,其特征在于,包括以下步骤:
步骤1:新建定时任务执行器,得到任务执行器JobHandler,在任务执行器中开发job类,job类中定义了定时任务的时间表达式、定时任务的具体执行方法、定时任务的返回结果集,并最终得到处理结果;
步骤2:在调度中心里,新建调度任务,调度任务用于定义调度的方法名称、时间、对应的job类、调度的超时时间、失败后的处理方式;
步骤3:调度中心的调度任务通过已注册的各任务执行器上报任务,将调度任务存到数据库中,执行时会从数据库中取出调度任务,执行具体任务;
步骤4:任务执行器采取集群部署,调度中心会感知在线的所有执行器,每次请求时,会按照顺序对执行器发出RPC心跳检测请求,第一个检测为存活状态的执行器会被选定并发送调度请求;
步骤5:任务执行器接收到调度请求后,会根据调度请求实例化一个任务线程,执行任务线程中具体的作业程序处理方法,成功后返回SUCCESS响应消息;
步骤6:调度时,会在日志中心记录一条任务日志,包括任务信息、调度信息、执行信息,任务日志可在日志中心按照日期和状态检索查看并得知定时任务执行结果,至此,整个调度任务周期结束。


2.根据权利要求1所述的一种基于RPC及线程锁的分布式定时任务调度方法,其特征在于,调度相应的调度任务时,采用线程池方式实现,执行时取出线程并加锁,避免线程被占用而引起阻塞。


3.根据权利要求1所述的一种基于RPC及线程锁的分布式定时任务调度方法,其特征在于,步骤1具体包括:
步骤1.1:使用spring容器环境新建定时任务执行器,执行器的配置文件需定义任务执行器名称,所在服务器的ip地址和自定义端口;
步骤1.2:在springbean实例中,开发job方法,此job方法的Java类格式要求为”publicReturnT<String>execute(Stringparam)”;
步骤1.3:为job方法添加注解”@Job(value=”自定义的jobhandler名称,init=”JobHandler初始化方法”,destroy=”JobHandler销毁方法”)”,该注解可以在执行类启动时,在Java虚拟机中自动识别并按照注解的定义来初始化和销毁执行方法,注解value值对应的是调度中心新建调度任务的名称,init对应调度任务的初始化方法,destroy对应调度任务的销毁方法。
步骤1.4:配置完成后,Java虚拟机会根据注解信息生成作业处理程序,通过调度中心新建的任务也会以作业处理程序的形式存在于任务执行器中,Java虚拟机会扫描步骤1.3中添加的注解,发现任务并注入到执行容器中。


4.根据权利要求1所述的一种基于RPC及线程锁的分布式定时任务调度方法,其特征在于,步骤2具体包括:
步骤2.1:进入调度中心,在任务执行器中选择步骤1中定义的执行器名称,任务描述简述定时任务的执行目的,定时任务的阻塞策略,cron定义定时任务的定时执行时间规则,定义执行器中的任务方法名称;
步骤2.2:配置完成并保存后,此调度任务会在数据库新增一条定时任务信息,定时调度任务新增成功。


5.根据权利要求1所述的一种基于RPC及线程锁的分布式定时任务调度方法,其特征在于,步骤3具体包括:
步骤3.1:调度中心通过数据库扫描调度任务时,通过任务执行器的心跳反应判断当前集群中存活的任务执行器,在调度任务数据中加入存活的任务执行器ID,将调度任务与执行器通过ID映射进行关系对应,由调度中心通知给各执行器;
步骤3.2:调度中心判断有任务需要被执行时,从数据库中取出已在调度中心配置的触发器数据,由Java虚拟机实例化此定时任务触发器来执行;
步骤3.3:如果实例化的定时任务触发器的名称和执行的时间相同,进行去重判断,只有一个节点去执行此任务。


6.根据权利要求2所述的一种基于RPC及线程锁的分布式定时任务调度方法,其特征在于,调度相应的调度任务时,采用线程池方式实现,执行时取出线程并加锁,避免线程被占用而引起阻塞,具体包括以下步骤:
步骤A.1:调度中心添加一个已...

【专利技术属性】
技术研发人员:严东李耀田骏彭磊杨志文
申请(专利权)人:武汉众邦银行股份有限公司
类型:发明
国别省市:湖北;42

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1