买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明授权】基于JAVA TIMER高可用性的定时器逻辑实现方法_中邮科通信技术股份有限公司_201710813834.8 

申请/专利权人:中邮科通信技术股份有限公司

申请日:2017-09-11

公开(公告)日:2020-08-21

公开(公告)号:CN107621975B

主分类号:G06F9/48(20060101)

分类号:G06F9/48(20060101);G06F11/20(20060101)

优先权:

专利状态码:有效-授权

法律状态:2020.08.21#授权;2018.02.16#实质审查的生效;2018.01.23#公开

摘要:本发明的目的是提供一种基于JAVATIMER高可用性的定时器逻辑实现方法,通过争抢机制,在同一时间就保证了只有一个调度模块抢到任务的运行权,从而使业务逻辑的运行符合用户的期望;同时,部署多个业务执行模块,如果一个业务执行模块发生故障而无法执行时,可以通过修改URL地址将执行的逻辑转移到另一台部署业务执行模块的服务器上,大大提高了故障的恢复速度。

主权项:1.一种基于JAVATIMER高可用性的定时器逻辑实现方法,其特征在于:包括以下步骤:S1:定时器TIMER采用JAVATIMER的方式实现,包括任务调度模块及业务执行模块;TIMER根据设定的参数,以一定的时间间隔执行任务调度;S2:业务执行模块负责具体的业务逻辑,只有当任务调度模块符合条件的时候才会触发业务模块的执行,执行的主要方式是:当任务调度模块根据自己的实现逻辑判定任务可执行时,发送HTTP请求到业务执行模块的JSP页面上,以JSP页面为入口进入业务逻辑的执行;S3:根据相同定时器间的争抢原理,部署定时器的任务调度执行模块到N台应用服务器上,N台应用服务器上的定时任务调度模块通过争抢机制争抢相应任务的运行权限,当有任务调度模块争抢到运行权限后,根据配置的业务执行模块URL地址进行HTTP访问,来执行业务逻辑;N为大于等于2的自然数;S1在设定的时间间隔内TIMER执行的任务调度包括以下步骤:S11:根据传入TIMER的线程号码THREAD_MODE,查询任务信息表对应的THREAD_MODE的记录;S12:遍历查询到的记录,比较任务下次运行时间NEXT_TIME和当前时间,如果当前时间小于NEXT_TIME则退出进入下一个TIMER任务调度周期,如果大于NEXT_TIME,则修改任务实时状态表的实时运行状态RUN_STATUS为“运行”;S13:当前时间大于NEXT_TIME时,发送HTTP请求到业务逻辑执行的URL地址字段中配置的URL,执行业务逻辑;S14:根据任务运行周期字段以及NEXT_TIME字段自动计算下一次运行时间并更新到NEXT_TIME,原来NEXT_TIME字段中的时间更新到上次任务运行时间LAST_TIME字段中;S15:更新任务实时状态表的实时运行状态RUN_STATUS为“停止”;S16:记录本次运行结果到任务运行日志表。

全文数据:基于JAVATIMER高可用性的定时器逻辑实现方法技术领域[0001]本发明涉及一种基于JAVATIMER高可用性的定时器逻辑实现方法。背景技术[0002]现有的软件产品大多用于客户生产环境,为客户商业用途提供服务。这就要求软件产品以及架构有很高的可用性,在故障时能够及时恢复,同时减少人工的千预。有一种应用场景,需要定时执行特定的任务逻辑,在软件开发中一般是通过定时器来实现的。在JAVA中定时器大多的实现方式是通过TIMER以及第三方的SpringQuartz,在定时执行任务代码上,这两者都没有什么问题,甚至可以说任务的执行时间非常准确。可当部署到生产环境时,如何提高定时器的可用性以及故障恢复能力就成了一个问题。[0003]现有的软件定时器,无论通过何种技术实现,一般是将任务调度逻辑与业务逻辑合并写在一起,这样就造成一个问题:一旦部署定时器的服务器出现故障,那么整个定时器都会停止工作,可用性不高。而如果将定时器部署多个服务,那么相同的定时器之间如何协调调度,又成为一个难题,因为同一时间只需要有一个定时器执行业务逻辑即可,多个定时器执行了相同的业务逻辑有可能会造成原来的逻辑混乱。发明内容[0004]本发明提供一种基于JAVATIMER高可用性的定时器逻辑实现方法,旨在提高定时器的可用性,将定时器调度与业务逻辑分离,并实现多个定时器对于同一任务的调度实现。[0005]为实现上述目的,本发明采用以下技术方案:一种基于JAVATIMER高可用性的定时器逻辑实现方法,其特征在于:包括以下步骤:S1:定时器采用JAVATIMER的方式实现,根据设定的参数,以一定的时间间隔执行任务调度;S2:业务执行模块负责具体的业务逻辑,只有当任务调度模块符合条件的时候才会触发业务模块的执行,执行的主要方式是:当任务调度模块根据自己的实现逻辑判定任务可执行时,发送HTTP请求到业务执行模块的JSP页面上,以JSP页面为入口进入业务逻辑的执行。S3:根据相同定时器间的争抢原理,部署定时器的任务调度执行模块到N台应用服务器上,N台应用服务器上的定时任务调度模块通过争抢机制争抢相应任务的运行权限,当有任务调度模块争抢到运行权限后,根据配置的业务执行模块URL地址进行HTTP访问,来执行业务逻辑;N为大于等于2的自然数。[0006]与现有技术相比,本发明具有以下优点:通过争抢机制,在同一时间就保证了只有一个调度模块抢到任务的运行权,从而使业务逻辑的运行符合用户的期望;同时,部署多个业务执行模块,如果一个业务执行模块发生故障而无法执行时,可以通过修改URL地址将执行的逻辑转移到另一台部署业务执行模块的服务器上,大大提高了故障的恢复速度。附图说明[0007]图1为本发明一实施例的框架示意图。具体实施方式[0008]下面结合附图和具体实施例对本发明做进一步解释说明。[0009]本发明的目的是提供一种基于JAVATIMER高可用性的定时器逻辑实现方法。其包括以下步骤:S1:定时器采用JAVATIMER的方式实现,根据设定的参数,以一定的时间间隔执行任务调度;S2:业务执行模块负责具体的业务逻辑,只有当任务调度模块符合条件的时候才会触发业务模块的执行,执行的主要方式是:当任务调度模块根据自己的实现逻辑判定任务可执行时,发送HTTP请求到业务执行模块的JSP页面上,以JSP页面为入口进入业务逻辑的执行。S3:根据相同定时器间的争抢原理,部署定时器的任务调度执行模块到N台应用服务器上,N台应用服务器上的定时任务调度模块通过争抢机制争抢相应任务的运行权限,当有任务调度模块争抢到运行权限后,根据配置的业务执行模块URL地址进行HTTP访问,来执行业务逻辑;N为大于等于2的自然数。[0010]在本发明一实施例中,S1在设定的时间间隔内TIMER执行的任务调度包括以下步骤:S11:根据传入TIMER的线程号码THREAD_MODE,查询任务信息表对应的THREAD_MODE的记录;S12:遍历查询到的记录,比较任务下次运行时间NEXT_TIME和当前时间,如果当前时间小于NEXT_T頂E则退出进入下一个TIMER任务调度周期,如果大于NEXT_TIME,则修改任务实时状态表的实时运行状态RUN_STATUS为“运行”;S13:当前时间大于NEXT_TIME时,发送HTTP请求到业务逻辑执行的URL地址字段中配置的URL,执行业务逻辑;S14:根据任务运行周期字段以及NEXT_TIME字段自动计算下一次运行时间并更新到NEXT_TME,原来NEXT_TME字段中的时间更新到上次任务运行时间LAST_TIME字段中;S15:更新任务实时状态表的实时运行状态RUN_STATUS为“停止”;S16:记录本次运行结果到任务运行日志表。[0011]每个HMER根据Sll-S16反复执行自己的任务,如果部署多个定时器服务,则在多个定时器线程间,根据争抢原理,先将实时状态表的RUN_STATUS字段更新为“运行”的定时器获得任务的运行权,其他没有获得运行权的定时任务线程则回到运行周期的头一步开始反复运行。[0012]为了提高可用性,同时减少人工的介入程度,本发明的总体思路就是完善定时器的调度逻辑,并将调度与业务逻辑分离。同时实现多个定时器对于同一个业务逻辑的高可用性实现。[0013]总体的模块可以分为:任务调度模块、业务逻辑模块,下面将分别介绍。[0014]一任务调度模块本模块主要实现任务的调度功能,涉及的主要表有:1、UCSS_P0S_HTTP_C0NFIG:任务信息表配置了业务模块的URL,任务的调度信息以及任务状态等,主要字段及功能为:1EXECUATEJJRL业务逻辑执行的URL地址1LASTJHME任务上次运行时间1NEXT_TIME任务下次运行时间1RUN_CYCLE任务运行周期,与LAST_TIME相加可以得出NEXTJHME的时间1RUN_STATUS任务有效状态1THREAD_MODE线程号码,每个任务只取自己线程号码下的任务运行2、UCSS_POS_HTTP_STATE:任务实时状态表从表中可以实时查看某个任务的实时状态,主要字段及功能如下:1RUN_STATUS任务实时运行状态1RUN_TIME任务运行花费时间3、UCSS_POS_HTTP_RUN_LOG:任务运行日志表用于记录每次任务的运行结果及花费时间,主要字段及功能如下1RUN_TIME任务运行时间,本次任务执行所耗费的时间1RUN_RETURN任务运行结果,调用业务模块URL,即访问EXECUATEJJRL字段中配置的URL后返回的状态码根据以上主要的表以及功能字段,定时器采用JAVATIMER的方式实现,TIMER可以根据设定的参数,以一定的时间间隔运行业务逻辑。每一个™ER可以只运行一个任务,也可以运行多个任务。在本发明具体实施例中,TIMER的运行时间间隔为1分钟,在这1分钟内TIMER执行的任务调度周期逻辑为:1、根据传入TMER的THREADJMODE参数,查询UCSS_POS_HTTP_C〇NFIG表对应THREAD_MODE的记录。[0015]2、遍历查询到的记录,比较NEXT_TIME和当前时间,如果当前时间小于NEXT_TIME则退出进入下一个TIMER任务调度周期,如果大于NEXT_TIME,则修改UCSS_POS_HTTP_STATE表的实时运行状态RUN_STATUS为“运行”3、当前时间大于NEXT_TIME时,同时判断任务状态表的RUN_STATUS字段是否为”停止”,如果为停止,则发送HTTP请求到EXECUATE_URL字段中配置的URL,执行业务逻辑。如果任务状态表的RUN_STATUS字段为”运行”,则说明此时该任务由其他定时器的任务调度模块运行,本次任务调度终止并退出进入下一个TIMER任务调度周期。[0016]4、根据RUN_CYCLE字段以及NEXT_TIME字段自动计算下一次运行时间并更新到NEXT_TIME,原来NEXT_TIME字段中的时间更新到上次运行时间LAST_TIME字段中5、更新UCSS_POS_HTTP_STATE表的实时运行状态RUN_STATUS为“停止”,释放任务的运行权6、记录本次运行结果到UCSS_P0S_HTTP_L0G表,方便追踪任务的运行结果。[0017]每个T頂ER根据以上逻辑反复执行自己的任务,如果部署多个定时器服务,则在多个定时器线程间,根据争抢原理,先将实时状态表的RUN_STATUS字段更新为“运行”的定时器获得任务的运行权,其他没有获得运行权的定时任务线程则回到运行周期的头一步开始反复运行。这样,即使部署在其中一台服务器上的定时任务发生故障,其他定时任务也能够及时接续,保证了定时器的高可用性。[0018]二业务执行模块业务执行模块主要是具体的业务逻辑,根据客户的期望来运行业务代码。业务执行模块平时并不主动执行,只有当任务调度模块符合条件的时候才会触发业务模块的执行,执行的主要方式是:当任务调度模块根据自己的实现逻辑判定任务可执行时,发送HTTP请求至IJ业务执行模块的JSP页面上,以JSP页面为入口进入业务逻辑的执行。[0019]在本发明一具体实施例中所述N为2。根据以上定时器的逻辑实现,并根据相同定时器间的争抢原理,可以将定时器任务调度模块部署多台服务器,参见图1,以部署2台服务器为例说明,具体的部署架构如下:部署定时任务调度执行模块到两台应用服务器上,这两台应用服务器上的定时任务调度模块通过上面介绍的争抢机制争抢相应任务的运行权限,当有调度模块争抢到运行权限后,根据配置的业务执行模块URL地址进行HTTP访问,来执行业务逻辑。这样,通过争抢机制,在同一时间就保证了只有一个调度模块抢到任务的运行权,从而使业务逻辑的运行符合用户的期望。同时,部署多个业务执行模块的原因是:由于业务执行模块执行的入口是URL地址,所以,如果一个业务执行模块发生故障而无法执行时,可以通过修改URL地址将执行的逻辑转移到另一台部署业务执行模块的服务器上,大大提高了故障的恢复速度。[0020]以上是本发明的较佳实施例,凡依本发明技术方案所作的改变,所产生的功能作用未超出本发明技术方案的范围时,均属于本发明的保护范围。

权利要求:1.一种基于JAVATIMER高可用性的定时器逻辑实现方法,其特征在于:包括以下步骤:S1:定时器TIMER采用JAVATIMER的方式实现,包括任务调度模块及业务执行模块;TIMER根据设定的参数,以一定的时间间隔执行任务调度;S2:业务执行模块负责具体的业务逻辑,只有当任务调度模块符合条件的时候才会触发业务模块的执行,执行的主要方式是:当任务调度模块根据自己的实现逻辑判定任务可执行时,发送HTTP请求到业务执行模块的JSP页面上,以JSP页面为入口进入业务逻辑的执行;S3:根据相同定时器间的争抢原理,部署定时器的任务调度执行模块到N台应用服务器上,N台应用服务器上的定时任务调度模块通过争抢机制争抢相应任务的运行权限,当有任务调度模块争抢到运行权限后,根据配置的业务执行模块URL地址进行HTTP访问,来执行业务逻辑;N为大于等于2的自然数。2.根据权利要求1所述的基于JAVATIMER高可用性的定时器逻辑实现方法,其特征在于:S1在设定的时间间隔内HMER执行的任务调度包括以下步骤:SI1:根据传入TMER的线程号码THREAD_MODE,查询任务信息表对应的THREAD_MODE的记录;S12:遍历查询到的记录,比较任务下次运行时间NEXT_HME和当前时间,如果当前时间小于NEXT_HME则退出进入下一个TIMER任务调度周期,如果大于NEXT_HME,则修改任务实时状态表的实时运行状态RUN_STATUS为“运行”;S13:当前时间大于NEXT_T頂E时,发送HTTP请求到业务逻辑执行的URL地址字段中配置的URL,执行业务逻辑;S14:根据任务运行周期字段以及NEXT_TIME字段自动计算下一次运行时间并更新到NEXT_HME,原来NEXT_TIME字段中的时间更新到上次任务运行时间LAST_TIME字段中;S15:更新任务实时状态表的实时运行状态RUN_STATUS为“停止”;S16:记录本次运行结果到任务运行日志表。3.根据权利要求2所述的基于JAVATIMER高可用性的定时器逻辑实现方法,其特征在于:每个TIMER根据SI1-S16反复执行自己的任务,如果部署多个定时器服务,则在多个定时器线程间,根据争抢原理,先将实时状态表的RUN_STATUS字段更新为“运行”的定时器获得任务的运行权,其他没有获得运行权的定时任务线程则回到运行周期的头一步开始反复运行。4.根据权利要求1所述的基于JAVATIffiR高可用性的定时器逻辑实现方法,其特征在于:所述N为2。

百度查询: 中邮科通信技术股份有限公司 基于JAVA TIMER高可用性的定时器逻辑实现方法

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。