基于消息的低耦合计划任务组件的实现方法及其系统与流程

文档序号:17695351发布日期:2019-05-17 21:27阅读:149来源:国知局
基于消息的低耦合计划任务组件的实现方法及其系统与流程

本发明涉及基于消息的低耦合计划任务组件的实现方法及其系统,属于计划任务管理技术领域。



背景技术:

计划任务是一种需要按指定周期或在特定的时间点进行执行的动作和逻辑。在绝大多数的应用软件中都存在类似的需求。目前针对应用软件中计划任务管理一种是采用计划任务服务端与计划任务客户端分离的方式实现和部署,在这种方式下计划任务服务端维护并管理任务,当任务满足执行条件时,通过远程方法调用的方式执行任务;另一种方式是在应用程序中直接启动计划任务管理线程,当任务满足执行条件时,直接通过本地方法调用来执行任务。第一种计划任务管理的实现方式较第二种方式有较强的分布任务处理能力,但两种方式都存在以下问题:1)耦合度高。第一种实现方式计划任务客户端与计划任务服务端之间高度耦合,当计划任务客户端或计划任务服务端任一服务异常时,另一个服务都运行时都无法正常运行。更重要的是,当异常服务恢复正常后,无法自动处理异常期间的执行请求。2)任务回溯难以控制。上述两种计划任务管理的实现方式都会通过数据库来记录每个任务执行情况。当需要任务回溯时,需要从数据库中从查询所有的任务的执行记录,并调用相应的任务处理逻辑,不仅排序处理逻辑服务,而且由于时间精度问题往往无法严格保证按原来的顺序执行。



技术实现要素:

针对现有技术存在的不足,本发明目的是提供一种基于消息的低耦合计划任务组件的实现方法及其系统,本发明计划任务组件运行时客户端与服务端耦合程度低,易于按顺序进行任务回溯及服务横向扩展。

为了实现上述目的,本发明是通过如下的技术方案来实现:

本发明的基于消息的低耦合计划任务组件的实现方法,包括以下步骤:

计划任务客户端启动时,将计划任务注册信息按约定协议转换成消息,发送至注册任务消息队列上;

计划任务服务端是由多个服务节点组成的服务端集群,所述服务端集群中包含一个主节点和多个从节点,当主节点出现异常后,服务端集群中的一个从节点将成为新的主节点;

计划任务服务端启动时,主节点加载已注册计划任务,并侦听所述注册任务消息队列,所述主节点接收到注册任务消息后与已注册计划任务合并,并更新本地缓存和数据库;

所述计划任务服务端的主节点判断任务是否达到执行要求,若达到执行要求,所述计划任务服务端按约定的消息协议,将任务执行所需要的信息转换成消息,发送至触发任务消息队列上;

所述计划任务客户端以服务集群的方式启动,多个服务节点同时侦听所述触发任务消息队列,分别根据接收到的消息执行预定的任务处理逻辑。

当需要回溯任务时,计划任务回溯服务根据所述计划任务客户端预设的任务回溯起始时间回播所述触发任务消息队列中的消息。

上述约定协议包括计划任务名称、应用名称、执行实体、执行周期、执行开始时间、丢失任务处理策略;所述丢失任务处理策略包括重新依次执行丢失任务和放弃执行丢失任务。

计划任务服务端启动时,主节点加载已注册计划任务,并侦听所述注册任务消息队列,所述主节点接收到注册任务消息后与已注册计划任务合并,并更新本地缓存和数据库,具体方法如下:

所述计划任务服务端集群在启动时,首先进行集群主节点选举;

主节点将保存在数据库中已注册计划任务加载至本地内存中,并启动侦听所述注册任务消息队列;

从节点订阅集群主节点变化事件,当自身成为主节点后,完成已注册任务加载和注册任务消息侦听;

所述主节点接收到注册任务消息后,与本地缓存中的计划任务进行合并处理;

合并处理完成后同步更新本地缓存与数据库。

上述计划任务服务端判断任务是否达到执行要求,若达到执行要求,所述计划任务服务端按约定的消息协议,将任务执行所需要的信息转换成消息,发送至触发任务消息队列上,具体方法如下:

所述计划任务服务端的主节点扫描本地缓存中的任务,根据任务的执行计划、最后一次执行时间、丢失任务处理策略判断当前任务是否满足执行条件;

所述计划任务服务端主节点将满足执行条件的计划任务按约定的消息协议,将任务执行所需要的信息封装成消息,发送至触发任务消息队列。

上述消息协议内容包括计划任务名称、应用名称、执行实体、执行时间和执行参数。

上述计划任务客户端侦听所述触发任务消息队列,根据接收到的消息执行预定的任务处理逻辑,具体方法如下:

所述计划任务客户端接收触发任务消息后,根据消息中的应用名称判断是否为本应用;

如果是本应用,则根据任务处理对象名称获取对象,并执行任务处理逻辑。

当需要回溯任务时,计划任务回溯服务根据所述计划任务客户端预设的任务回溯起始时间回播所述触发任务消息队列中的消息,具体方法如下:

进行任务回溯时,用户提供预设的回溯的时间起点和任务名称列表;

所述计划任务服务端根据回溯的时间起点定位所述触发任务消息队列中对应消息的偏移量;

计划任务从当前的偏移量开始获取消息,并根据所述任务名称列表过滤,将满足回溯条件的任务消息按执行顺序重新发送至所述触发任务消息队列;

所述计划任务客户端按顺序接收,并响应执行任务。

上述计划任务客户端的启动方法如下:

计划任务客户端是一个或多个服务节点组成的集群服务环境,在集群中的多个服务节点中,包含一个主节点和多个从节点;主节点负责在服务集群启动时将向计划任务服务注册任务和执行计划任务服务端触发的任务;从节点负责执行计划任务服务端触发的任务;

基于预构建的计划任务对象,并缓存在本地内存中;如果当前节点是主节点,将每个计划任务对象序列化在消息,发送至所述注册任务消息队列中,完成任务注册;如果当前节点不是主节点,则侦听主节点变化事件;

所有节点侦听所述触发任务消息队列,完成计划任务客户端启动流程。

上述计划任务服务端的启动方法如下:

如果当前节点不是主节点,则侦听主节点变化事件;

如果当前节点为主节点,从数据库中加载已注册的任务信息,侦听消息队列中客户端注册的任务,合并计划任务信息,写入数据库,并缓存在本地内存中,所述计划任务服务端启动完成;

所述计划任务服务端的任务处理方法如下:

所述计划任务服务端循环遍历缓存在内存数据中的计划任务和任务最后一次执行时间;

判断当前任务是否到达下次执行时间,如果没有,则遍历下一条任务,如果有,则组装任务信息;

选择一个消息队列的发区,发送消息;

更新内存中的缓存数据和数据库中的数据,侦听所述任务注册消息队列;

接收新注册的任务,并与内存中缓存的任务信息合并;

将任务的更新信息写入内存及数据库中。

上述系统包括网络接口、存储器和处理器;其中,

所述网络接口,用于在与其他外部网元之间进行收发信息过程中,信号的接收和发送;

所述存储器,用于存储能够在所述处理器上运行的计算机程序指令;

所述处理器,用于在运行所述计算机程序指令时,执行上述基于消息的低耦合计划任务组件的实现方法的步骤。

本发明由于采用了上述技术方案,使之与现有技术相比,具有以下的优点和积极效果:

1.计划任务客户端与计划任务服务端实现绝对的松耦合,客户端可以在服务端停运的状态下,正常运行并以消息的形式注册计划任务;服务端也可以在客户端停运的状态下发送触发任务消息。当客户端或服务端重新启动运行后,会处理停运期间的消息。

2.回溯定时任务时,用户提供回溯的时间起点和需要回溯的任务列表(可选),计划任务服务端利用消息的有序性,可精准重放历史任务。

3.通过扩展消息队列的分区数量,计划任务客户端可以很方便地横向扩展,实现多任务的分布式执行。

附图说明

图1为本发明基于消息的低耦合计划任务组件的实现方法工作流程图;

图2为本发明实施例的总体架构图;

图3为本发明实施例的计划任务客户端启动流程图;

图4为本发明实施例的计划任务客户端任务执行流程图;

图5为本发明实施例的计划任务服务端启动流程图;

图6为本发明实施例的计划任务服务端执行流程流程图;

图7为本发明实施例的计划任务回溯执行流程流程图。

具体实施方式

为使本发明实现的技术手段、创作特征、达成目的与功效易于明白了解,下面结合具体实施方式,进一步阐述本发明。

本发明一种基于消息的低耦合计划任务组件的实现方法中采用计划任务客户端与计划任务服务端分离的模式,重点使用消息对列作为客户端与服务端交互的中介。基于消息的方式,一方面,完全实现了客户端与服务端的解耦合,两者可以不依赖于对方象独立运行。当服务从异常中恢复时,可以从故障点地位置继续处理异常期间未消费的消息。另一方面,利用消息的可回溯性,严格保证了任务回溯时的顺序。

参见图1,本发明的基于消息的低耦合计划任务组件的实现方法,包括以下步骤:

计划任务客户端启动时,将计划任务注册信息按约定协议转换成消息,发送至注册任务消息队列上;

计划任务服务端启动时,主节点加载已注册计划任务,并侦听注册任务消息队列,主节点接收到注册任务消息后与已注册计划任务合并,并更新本地缓存和数据库;

计划任务服务端判断任务是否达到执行要求,若达到执行要求,计划任务服务端按约定的消息协议,将任务执行所需要的信息转换成消息,发送至触发任务消息队列上;

计划任务客户端侦听触发任务消息队列,根据接收到的消息执行预定的任务处理逻辑;

当需要回溯任务时,计划任务回溯服务根据计划任务客户端预设的任务回溯起始时间回播触发任务消息队列中的消息。

约定协议的内容包括计划任务名称、应用名称、执行实体、执行周期、执行开始时间、丢失任务处理策略。

计划任务服务端启动时,主节点加载已注册计划任务,并侦听注册任务消息队列,主节点接收到注册任务消息后与已注册计划任务合并,并更新本地缓存和数据库,具体方法如下:

计划任务服务端集群在启动时,首先进行集群主节点选举;

主节点将保存在数据库中已注册计划任务加载至本地内存中,并启动侦听注册任务消息队列;

从节点订阅集群主节点变化事件,当自身成为主节点后,完成已注册任务加载和注册任务消息侦听;

主节点接收到注册任务消息后,与本地缓存中的计划任务进行合并处理;

合并处理完成后同步更新本地缓存与数据库。

计划任务服务端判断任务是否达到执行要求;若达到执行要求,计划任务服务端按约定的消息协议将任务执行所需要的信息转换成消息,发送至触发任务消息队列上,具体方法如下:

计划任务服务端主节点扫描本地缓存中的任务,根据任务的执行计划、最后一次执行时间、丢失任务处理策略判断当前任务是否满足执行条件;

计划任务服务端主节点将满足执行条件的计划任务按约定的消息协议,将任务执行所需要的信息封装成消息,发送至触发任务消息队列。

消息协议内容包括:计划任务名称、应用名称、执行实体、执行时间和执行参数。

计划任务客户端侦听触发任务消息队列,根据接收到的消息执行预定的任务处理逻辑,具体方法如下:

计划任务客户端接收触发任务消息后,根据消息中的应用名称判断是否为本应用;

如果是本应用,则根据任务处理对象名称获取对象,并执行任务处理逻辑。

当需要回溯任务时,计划任务回溯服务根据计划任务客户端预设的任务回溯起始时间回播触发任务消息队列中的消息,具体方法如下:

进行任务回溯时,用户提供预设的回溯的时间起点及可选的任务名称列表;

计划任务服务端根据回溯的时间起点定位触发任务消息队列中对应消息的偏移量;

计划任务从当前的偏移量开始获取消息,并根据可选的任务名称列表过滤,将满足回溯条件的任务消息按执行顺序重新发送至触发任务消息队列;

计划任务客户端按顺序接收,并响应执行任务。

上述系统包括网络接口、存储器和处理器;其中,

网络接口,用于在与其他外部网元之间进行收发信息过程中,信号的接收和发送;

存储器,用于存储能够在所述处理器上运行的计算机程序指令;

处理器,用于在运行所述计算机程序指令时,执行上述基于消息的低耦合计划任务组件的实现方法的步骤。

如图2所示,基于消息的可回溯计划任务组件总体架构包括以下组成部分:

1、计划任务客户端,即各类应用服务。在应用服务中根据自身的业务需求,通过计划任务客户构建并向服务端注册计划任务,同时侦听触发任务消息队列,执行任务处理逻辑。客户端可以以任意数量节点的集群方式部署,启动时框架会从客户端集群中选举出一个主节点,负责向服务端注册计划任务。不同的客户端节点接收并处理不同消息分区的消息,执行任务,实现多任务的分布式处理。

2、计划任务服务端,服务端负责根据任务的执行信息,将需要执行的任务组织成任务执行消息,通过消息队列触发客户端执行处理逻辑,同时侦听注册任务消息队列,在线进行任务的注册。服务端同样可以以任意数量节点的集群方式部署,启动时框架会从服务端集群中选举出一个主节点,负责接收注册任务消息,并触发需要执行的任务。正常运行时,从节点处于备用状态,当主节点服务宕机时,框架会在从节点中重新选举了一个新的节点。

3、注册任务消息队列与触发任务消息队列,为了降低计划任务客户端与计划任务服务端之间的耦合程度,客户端将需要注册的任务组组装在消息发送至注册任务消息队列中,服务端将需要执行的任务消息发送至触发任务消息队列中。

4、数据库集群,用于记录已注册的计划任务信息,以及计划任务最后一次触发时间。

如图3所示,计划任务客户端可以集群方式启动,启动过程中该集群应用的计划任务由主节点进行注册。具体处理流程包括步骤:

1、计划任务客户端启动时首先构建本应用需要的计划任务对象,并缓存在本地内存中。

2、如果当前节点是主节点,刚将每个计划任务对象序列化在消息,发送至注册任务消息队列中,完成任务注册。

3、如果当前节点不是主节点,则侦听主节点变化事件。

4、所有节点侦听触发任务消息队列。

5、完成客户端启动流程。

如图4所示,计划任务客户端集群模式运行下,集群中的所有节点可以接收并同时响应不同任务的触发消息进行处理,具体处理流程如下:

1.客户端侦听触发任务消息队列,接收任务触发的消息;

2.根据本地内存中缓存的任务信息,判断接收到的消息是否该应用的任务;

3.如是不是则结束这条消息的处理;

4.如果是,则从消息中获取任务执行对象信息和所需要的参数;

5.调用执行对象的方法;

6.结束本条消息的处理。

如图5、图6所示,计划任务服务端集群方式启动过程中选举出集群主节点,由主节点负责计划任务的注册和任务的执行触发。计划任务服务端启动流程如下:

1、当前节点不是主节点,则侦听主节点变化事件。

2、当前节点为主节点:

2.1、从数据库中加载已注册的任务信息;

2.2、侦听消息队列中客户端注册的任务;

2.3、合并计划任务信息,写入数据库,并缓存在本地内存中;

3、服务端启动完成。

计划任务服务端任务处理流程如下:

1.1、服务端循环遍历缓存在内存数据中的计划任务和该任务最后一次执行时间;

1.2、判断当前任务是否到达下次执行时间;

1.3、没有,则遍历下一条任务;

1.4、有,则组装任务信息;

1.5、选择一个消息队列的发区,发送消息;

1.6、更新内存中的缓存数据和数据库中的数据;

2.1、侦听任务注册消息队列;

2.2、接收新注册的任务,并与内存中缓存的任务信息合并;

2.3、将任务的更新信息写入内存及数据库中。

如图7所示,当用户需要进行任务回溯时,输入回溯的时间起点和任务名称列表(可选),计划任务服务端将从指定时间点起回放触发任务消息,具体步骤如下:

1、计划任务服务端接收用户指定的回溯起始时间和任务名称列表;

2、计划任务服务端根据回溯起始时间查找消息的偏移量;

3、判断是否存在下一条消息;

4、如果存在消息,则读取消息;

5、判断是否包含在任务名称列表中,确定消息是否需要回放;

6、如果需要回放,则将消息发送到触发任务消息队列上。

以上显示和描述了本发明的基本原理和主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1