任务处理方法、装置、系统及电子设备与流程

文档序号:16530433发布日期:2019-01-05 10:42阅读:176来源:国知局
任务处理方法、装置、系统及电子设备与流程

本申请涉及计算机应用技术领域,具体而言,涉及任务处理方法、装置、系统及电子设备。



背景技术:

在当前生产环境下,很多业务条线都存在如下的应用场景:比如网络不通导致接口不能访问,需要进行重试保障业务正常;定时发送mq消息,在指定时间点关闭生产环境的定时任务worker等业务场景。很多场景都需要人工介入,存在人为出错的风险,且处理效率低。

相关技术中,对接jmq或任务引擎等消息组件的应用,在业务异常时会支持指定次数的重试,但达到最大次数后该任务失败。需要人工介入进行拉回处理。

上述相关技术存在如下问题:首先,不能满足递增重试机制,好多业务系统在达到最大重试次数后,希望在2小时后,4小时后,8小时后再次重试,以保证业务的正常运行,而当前重试机制不能满足上述要求。其次,不能定时执行某项任务,比如定时关闭生产环境的任务worker,定时批量调用指定接口等场景,但是上述技术没有对应的解决方案,而需要人工介入,效率低下。



技术实现要素:

本申请公开任务处理方法,以提高处理效率。

本发明的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本发明的实践而习得。

根据本发明的第一方面,提供一种任务处理方法,包括:

获取阻塞队列中的任务消息,所述任务消息至少包括任务内容和任务策略;

根据当前系统时间和所述任务策略计算所述任务消息的待执行时间;

根据所述任务内容和所述待执行时间生成待执行任务;

在所述待执行时间执行所述待执行任务。

根据本发明的一些实施例,在生成所述待执行任务之后还包括:将所述待执行任务添加到设定的任务有序队列中;在所述待执行时间执行所述待执行任务包括:通过任务执行线程从所述任务有序队列中取出所述待执行任务,在所述待执行时间执行所述待执行任务。

根据本发明的一些实施例,将所述待执行任务添加到设定的任务有序队列中包括:将所述待执行任务添加到设定的redis中。

根据本发明的一些实施例,在生成所述待执行任务之后还包括:将所述待执行任务的信息存储到数据库中;通过任务执行线程从所述任务有序队列中取出所述待执行任务包括:当所述任务执行线程从所述设定的redis中轮询到所述待执行任务时,从所述数据库的取出所述待执行任务的信息。

根据本发明的一些实施例,将所述待执行任务添加到设定的任务有序队列中包括:根据所述待执行任务的所述执行时间确定所述待执行任务在所述设定的任务有序队列的位置,将所述待执行任务添加到所述设定的任务有序队列的所述位置。

根据本发明的一些实施例,所述方法还包括:当在所述待执行时间执行所述待执行任务失败,获取所述任务消息的已重试次数和最大可重试次数,将所述已重试次数更新为所述已重试次数加一,当更新后的所述重试次数小于所述最大可重试次数时,向所述阻塞队列发送所述任务消息。

根据本发明的一些实施例,获取阻塞队列中的任务消息包括:通过任务创建线程从mq消息队列的阻塞队列中取出所述任务消息。

根据本发明的一些实施例,在所述待执行时间执行所述待执行任之后还包括:若执行成功,则向所述mq消息队列发送归档消息,以使所述mq对所述任务消息和执行得到的结果进行持久化存储。

根据本发明的一些实施例,所述任务消息包括重发任务的消息和/或定时任务的消息。

根据本发明的第二方面,提供一种任务处理装置,其包括:

任务获取单元,用于获取阻塞队列中的任务消息,所述任务消息至少包括任务内容和任务策略;

时间确定单元,用于根据当前系统时间和所述任务策略计算所述任务消息的待执行时间;

任务创建单元,用于根据所述任务内容和所述待执行时间生成待执行任务;

任务执行单元,用于在所述待执行时间执行所述待执行任务。

根据本发明的一些实施例,所述任务创建单元还用于在生成所述待执行任务之后:将所述待执行任务添加到设定的任务有序队列中;所述任务执行单元用于:通过任务执行线程从所述任务有序队列中取出所述待执行任务,在所述待执行时间执行所述待执行任务。

根据本发明的一些实施例,所述任务创建单元还用于:将所述待执行任务添加到设定的redis中。

根据本发明的一些实施例,所述任务创建单元还用于,在生成所述待执行任务之后,将所述待执行任务的信息存储到数据库中;所述任务执行单元还用于:当所述任务执行线程从所述设定的redis中轮询到所述待执行任务时,从所述数据库的取出所述待执行任务的信息。

根据本发明的一些实施例,所述任务创建单元还用于:根据所述待执行任务的所述执行时间确定所述待执行任务在所述设定的任务有序队列的位置,将所述待执行任务添加到所述设定的任务有序队列的所述位置。

根据本发明的一些实施例,所述装置还包括失败处理单元,用于当在所述待执行时间执行所述待执行任务失败,获取所述任务消息的已重试次数和最大可重试次数,将所述已重试次数更新为所述已重试次数加一,当更新后的所述重试次数小于所述最大可重试次数时,向所述阻塞队列发送所述任务消息。7、如权利要求1所述的装置,其特征在于,获取阻塞队列中的任务消息包括:通过任务创建线程从mq消息队列的阻塞队列中取出所述任务消息。

根据本发明的一些实施例,所述装置还包括持久化处理单元,用于在所述待执行时间执行所述待执行任之后,若执行成功,则向所述mq消息队列发送归档消息,以使所述mq对所述任务消息和执行得到的结果进行持久化存储。

根据本发明的一些实施例,所述任务消息包括重发任务的消息和/或定时任务的消息。

根据本发明的第三方面,提供一种任务处理系统,包括路由装置、至少一个任务重试装置、以及次数统计装置;

所述路由装置用于,向所述至少一个任务重试装置分发阻塞队列中的任务消息,其中所述任务消息至少包括任务内容和任务策略;

所述任务重试装置用于,获取所述路由装置所分发的任务消息,根据当前系统时间和所获取的任务消息的任务策略,计算所获取的任务消息的待执行时间,根据所获取的任务消息的任务内容和所述待执行时间生成待执行任务,在所述待执行时间执行所述待执行任务;

所述次数统计装置用于管理所述任务消息的已重试次数和最大可重试次数。

根据本发明的一些实施例,当所述任务重试装置执行所述待执行任务失败,从所述次数统计装置中获取所述任务消息的已重试次数和最大可重试次数,将所述次数统计装置中所述任务消息的已重试次数更新为所述已重试次数加一,判断更新后的所述重试次数是否小于所述最大可重试次数,若是则向所述阻塞队列发送所述任务消息。

根据本发明的第四方面,提供一种电子设备,包括:处理器;存储器,存储用于处理器控制如第一方面任一项操作的指令。

根据本发明的第五方面,提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如第一方面任一项所述步骤。

本申请的实施例提供的技术方案可以包括以下有益效果:

本申请的技术方案能够为业务系统提供定制化的履约规则,能减少人工介入以降低人为出错的风险,并提高处理效率,进一步地还能支持任务处理单元的平行扩展。应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本发明。

附图说明

通过参照附图详细描述其示例实施例,本发明的上述和其它特征及优点将变得更加明显。

图1示出了根据本发明一实施例的任务处理方法;

图2示出了根据本发明另一实施例的示例所述的履约平台的系统架构图;

图3示出了根据本发明一实施例的任务消息入库的交互流程图;

图4示出了根据本发明一实施例的取出任务消息的交互流程图;

图5示出了根据本发明一实施例的任务消息处理的交互流程图;

图6示出了根据本发明一实施例的待执行任务入任务有序队列的交互流程图;

图7示出了根据本发明一实施例的任务处理装置的框图;

图8示出了根据本发明一实施例的任务处理系统的示意图;

图9示出了根据本发明一实施例的电子设备。

具体实施方式

现在将参考附图更全面地描述示例实施例。然而,示例实施例能够以多种形式实施,且不应被理解为限于在此阐述的实施例;相反,提供这些实施例使得本发明将全面和完整,并将示例实施例的构思全面地传达给本领域的技术人员。在图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。

此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。在下面的描述中,提供许多具体细节从而给出对本发明的实施例的充分理解。然而,本领域技术人员将意识到,可以实践本发明的技术方案而没有特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知方法、装置、实现或者操作以避免模糊本发明的各方面。

附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。

附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解,而有的操作/步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。

图1示出了根据本发明一实施例的任务处理方法,本实施例可适用于任务处理系统中任务重试装置对涉及到任务策略的任务消息进行处理的情况,例如定时任务和重试任务。如图1所示,本实施例所述的任务处理方法包括:

在步骤s110中,获取阻塞队列中的任务消息。

其中所述任务消息可包括重发任务的消息、定时任务的消息等。所述任务消息至少包括任务内容和任务策略。

例如可通过任务创建线程从mq消息队列的阻塞队列中取出任务消息。或者若任务处理系统中包括多个任务重试装置,则系统可能包括用于从mq消息队列的阻塞队列取出任务消息向所述多个任务重试装置分发,任务重试装置则从所述路由装置接收被分发的任务消息。

在步骤s120中,根据当前系统时间和所述任务策略计算所述任务消息的待执行时间。

在步骤s130中,根据所述任务内容和所述待执行时间生成待执行任务。

在步骤s140中,在所述待执行时间执行所述待执行任务。

本实施例的技术方案能够在接收任务消息后按照任务策略自动计算待执行时间,自动生成待执行任务,并按时执行,能减少人工介入以降低人为出错的风险,并能提高任务处理效率。

当在所述待执行时间执行所述待执行任务失败,根据本发明的一些实施例,可获取所述任务消息的已重试次数和最大可重试次数,将所述已重试次数更新为所述已重试次数加一,当更新后的所述重试次数小于所述最大可重试次数时,向所述阻塞队列发送所述任务消息。

根据本发明的一些实施例,在生成所述待执行任务之后还可将所述待执行任务添加到设定的任务有序队列中,例如添加到设定的redis中,以使执行任务时,可通过任务执行线程从所述任务有序队列中取出所述待执行任务,在所述待执行时间执行所述待执行任务。这样能让生成待任务和执行任务分别通过不同的线程来操作,达到并行处理的效果,从而能提高任务处理效率。

为了避免在redis不可靠时引起任务处理疏漏,根据本发明的一些实施例,在生成所述待执行任务之后还可将所述待执行任务的信息存储到数据库中,以增加任务处理的可靠性,避免遗漏。

此种情况下,当所述任务执行线程从所述设定的redis中轮询到所述待执行任务时,从所述数据库的取出所述待执行任务的信息。即对于处理完成的待执行任务,从redis中删除之后,也需要及时从所述数据库中删除,保证数据的一致性。按照一定策略检查数据库中待执行任务,例如定期查看数据库中是否有未处理的待执行任务,若有遗留任务及时进行处理。

根据本发明的一些实施例,将所述待执行任务添加到设定的任务有序队列中时,可根据所述待执行任务的所述执行时间确定所述待执行任务在所述设定的任务有序队列的位置,将所述待执行任务添加到所述设定的任务有序队列的所述位置。从而保证按照执行时间的先后顺序放置待执行任务,以顺次从所述任务有序队列取出任务执行,减少对任务的执行时间进行频繁地判断,只需要判断队列的队尾的待执行任务的待执行时间是否到达即可,能提高任务处理效率。

根据本发明的一些实施例,在所述待执行时间执行所述待执行任之后,若执行成功,还可向所述mq消息队列发送归档消息,以使所述mq对所述任务消息和执行得到的结果进行持久化存储,以方便后续查询和处理。

本实施例示出了根据本发明另一实施例的示例所述的一种任务处理系统的示例:履约平台,通过履约平台为例,说明本实施例的技术方案。图2为本实施例的示例所述的履约平台的系统架构图,如图2所示,该履约平台支持多个业务系统的接入。任务重试装置是该平台的核心,且可支持多个任务重试装置横向扩展,以应对大并发量访问。多个任务重试装置都依赖次数统计装置。

通过本实施例所述的履约平台,业务系统接入该履约平台简单,具体包括:首先,在履约平台进行业务系统、业务功能的授权,分配权限码与token;随后,在履约平台配置履约规则,比如:按指定时间间隔重试、每周内指定日期重试等;然后,可添加maven依赖,引入开发客户端包;最后配置jsf接口依赖即完成将业务系统接入履约平台。

对于任务重试单元来说,一个任务重试单元可包括一个数据库、一个redis有序队列、一个待执行阻塞队列。可以横向扩展部署多个重试单元。图3示出了根据本发明一实施例的任务消息入库的交互流程图,如图3所示,本实施例的任务消息入库的方法包括:

任务重试单元从mq消息中间件拉取重试任务消息,例如可从jmq中拉取重试任务消息。其中所述重试任务消息可以是重试的消息或用于定时执行某项任务的消息。任务重试单元根据当前系统时间与重试策略计算出重试任务的执行时间,添加到该单元的mysql数据库中。重试任务会同步写入的redis有序队列中。需要说明的是,本实施例中,所述待执行任务有序队列中,元素是按照任务执行时间戳来排序的。

图4示出了根据本发明一实施例的取出任务消息的交互流程图,如图4所示,待执行任务定时从有序队列中通过zrange获取指定范围任务列表(比如前200条记录),如果当前时间已超过重试执行时间,将待执行任务放入阻塞队列中,等待处理。

图5示出了根据本发明一实施例的任务消息处理的交互流程图,如图5所示,实施例的任务消息处理的交互方法包括:

第1步:任务处理线程池中的线程从阻塞队列中获取待执行任务,从待执行队列中删除该任务。

第2步:删除成功后,从mysql数据库中查询重试任务详细信息,根据重试任务内容执行重试。

第3步:重试成功后发送归档jmq消息,持久化重试任务与处理结果到hbase中。

第4步:调用次数统计装置,例如图2所示的次数统计微服务,获取该任务已重试次数。

第5步:重试次数不存在,则入库保存。重试次数存在,判断是否达到最大重试阀值。

若达到最大重试次数后,且接入业务系统报警开关打开,则进行报警。若未达到最大重试次数,则将重试次数增1后调用次数统计装置,如图2所示的次数统计微服务,进行更新操作

图6示出了根据本发明一实施例的待执行任务入任务有序队列的交互流程图,如图6所示,每个单元中的该定时任务会定时去查询mysql数据库,将符合条件的重试任务根据执行时间进行打分,按照打分结果保存到待执行有序任务队列中,即redis有序集合。

其中,次数统计装置中,key值生成规则可按照如下方式组织:name_space+biz_type+execute_type+execute_id。其中name_space为命名空间,用于区识不同的应用系统,biz_type为业务类型,例如包括定单业务、loc业务、全球购业务等业务类型。execute_type为处理类型,execute_id为任务消息的标识。

value值为已履约次数,初始值为0。

以下以几个应用实例说明本实施例所述的任务处理系统的应用。

应用实例一:赤道平台延迟订单申报。

全球购保税业务已经完成8个保税区的对接。每个保税区需要调用服务商接口进行订单申报。在申报过程中,接口经常调不通,系统增加了重试机制,在达到重试次数后,依然会出现很多申报失败的订单。接入履约平台:

1)赤道平台会将该订单发送重试任务到履约平台

指定重试的任务引擎topic或mqtopic,初始化重试的规则(比如:1个小时后重试3次,每次间隔时间10分钟,履约平台重试3次后,会将重试规则升级,变更为2个小时后重试6次,每次间隔时间20分钟)。

2)履约重试单元接收到重试消息,会解析入mysql库,防止消息丢失;

3)履约重试单元将消息存到redis有序队列,根据时间戳计算score,保证消息有序;

4)重试单元任务处理worker会定时从redis有序队列取消息进行重试;

5)达到最大重试次数后,如果还未成功,履约平台会报警,将失败订单发邮件给业务方,需要人工介入处理。

应用实例二:赤道平台定时关闭不同申报worker。

赤道平台集群部署,每台机器上打开了很多申报的worker。比如仓库搬仓、系统升级暂停申报、憋单测试等场景,需要定时关闭worker,订单打开worker。每次处理都需要人工介入,接入履约平台包括:

1)赤道平台发送定时关闭worker消息、定时开启worker消息至履约平台;

2)履约重试单元将消息入mysql库,同步存储到redis有序队列;

3)履约平台会将关闭消息、开启消息定时广播到所有集群机器,各个机器执行关闭与开启。

应用实例三:loc系统订单指定天时间段后调用第三方接口推送数据。

loc业务相关订单会在指定时间段后调用第三方接口推送数据,有的订单是2天后调用,有的订单是3天后调用。loc业务接入履约平台包括:

1)loc系统发送履约消息到履约平台;

履约消息包括请求参数,访问的端点地址,失败重试次数等相关信息

2)履约重试单元将消息入mysql库,同步存储到redis有序队列;

3)履约平台会计算推送数据的时间,按照时间的先后顺序放到redis有序队列中。履约平台会定时执行,且有失败重试机制;

由上述应用实例可见,本发明实施例所示供的任务处理系统的技术方案,应用单元化思想实现可横向扩展的任务处理系统,例如履约平台机制,既能满足不同履约规则的重试任务,系统又能方便扩展,避免相同需求的重复开发工作。在让业务发展的情况下,能够满足各种基于履约规则任务的正常执行,能够很好的保障业务的正常处理与流转。

图7示出了根据本发明一实施例的任务处理装置的框图,如图7所示,本实施例所述的任务处理装置包括任务获取单元710、时间确定单元720、任务创建单元730、以及任务执行单元740。

该任务获取单元710被配置为,用于获取阻塞队列中的任务消息,所述任务消息至少包括任务内容和任务策略;

该时间确定单元720被配置为,用于根据当前系统时间和所述任务策略计算所述任务消息的待执行时间;

该任务创建单元730被配置为,用于根据所述任务内容和所述待执行时间生成待执行任务;

该任务执行单元740被配置为,用于在所述待执行时间执行所述待执行任务。

根据本发明的一些实施例,所述任务创建单元730还用于在生成所述待执行任务之后:将所述待执行任务添加到设定的任务有序队列中;所述任务执行单元740用于:通过任务执行线程从所述任务有序队列中取出所述待执行任务,在所述待执行时间执行所述待执行任务。

根据本发明的一些实施例,所述任务创建单元730还用于:将所述待执行任务添加到设定的redis中。

根据本发明的一些实施例,所述任务创建单元730还用于,在生成所述待执行任务之后,将所述待执行任务的信息存储到数据库中;所述任务执行单元740还用于:当所述任务执行线程从所述设定的redis中轮询到所述待执行任务时,从所述数据库的取出所述待执行任务的信息。

根据本发明的一些实施例,所述任务创建单元730还用于:根据所述待执行任务的所述执行时间确定所述待执行任务在所述设定的任务有序队列的位置,将所述待执行任务添加到所述设定的任务有序队列的所述位置。

根据本发明的一些实施例,所述装置还包括失败处理单元(图7中未示出),用于当在所述待执行时间执行所述待执行任务失败,获取所述任务消息的已重试次数和最大可重试次数,将所述已重试次数更新为所述已重试次数加一,当更新后的所述重试次数小于所述最大可重试次数时,向所述阻塞队列发送所述任务消息。

根据本发明的一些实施例,获取阻塞队列中的任务消息包括:通过任务创建线程从mq消息队列的阻塞队列中取出所述任务消息。

根据本发明的一些实施例,所述装置还包括持久化处理单元(图7中未示出),用于在所述待执行时间执行所述待执行任之后,若执行成功,则向所述mq消息队列发送归档消息,以使所述mq对所述任务消息和执行得到的结果进行持久化存储。

根据本发明的一些实施例,所述任务消息包括重发任务的消息和/或定时任务的消息。

关于上述实施例中的装置,其中各个单元执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。

本实施例提供的任务处理装置可执行本发明方法实施例所提供的任务处理方法,具备执行方法相应的功能模块和有益效果。

图8示出了根据本发明一实施例的任务处理系统的示意图,如图8所示,本实施例所述的任务处理系统包括路由装置820、至少一个任务重试装置830、以及次数统计装置840;

所述路由装置820用于,向所述至少一个任务重试装置830分发阻塞队列810中的任务消息,其中所述任务消息至少包括任务内容和任务策略;

所述任务重试装置830用于,获取所述路由装置820所分发的任务消息,根据当前系统时间和所获取的任务消息的任务策略,计算所获取的任务消息的待执行时间,根据所获取的任务消息的任务内容和所述待执行时间生成待执行任务,在所述待执行时间执行所述待执行任务;

所述次数统计装置840用于管理所述任务消息的已重试次数和最大可重试次数。

根据本发明的一些实施例,当所述任务重试装置830执行所述待执行任务失败,从所述次数统计装置840中获取所述任务消息的已重试次数和最大可重试次数,将所述次数统计装置840中所述任务消息的已重试次数更新为所述已重试次数加一,判断更新后的所述重试次数是否小于所述最大可重试次数,若是则向所述阻塞队列发送所述任务消息。

图9示出了根据本发明一实施例的电子设备,如图9所示,电子设备900可包括处理器910、存储器920、发射器930及接收器940。

存储器920可存储用于处理器910控制操作处理的指令。存储器920可包括易失性或非易失性存储器,如静态随机存取存储器(sram)、电可擦除可编程只读存储器(eeprom)、可擦除可编程只读存储器(eprom)、可编程只读存储器(prom)、只读存储器(rom)等,本发明对此没有限制。

处理器910可调用存储器920中存储的指令控制相关操作。根据一实施例,存储器920存储用于处理器910控制以下操作的指令:获取阻塞队列中的任务消息,所述任务消息至少包括任务内容和任务策略;根据当前系统时间和所述任务策略计算所述任务消息的待执行时间;根据所述任务内容和所述待执行时间生成待执行任务;在所述待执行时间执行所述待执行任务。

易于理解,存储器920还可存储用于处理器910控制根据本发明实施例的其他操作的指令,这里不再赘述。

处理器910还可控制发射器930和接收器940进行信号收发等。

通过以上的详细描述,本领域的技术人员易于理解,根据本发明实施例的系统和方法具有以下优点中的一个或多个。

根据本发明的实施例,当在所述待执行时间执行所述待执行任务失败,获取所述任务消息的已重试次数和最大可重试次数,将所述已重试次数更新为所述已重试次数加一,当更新后的所述重试次数小于所述最大可重试次数时,向所述阻塞队列发送所述任务消息。

根据一些实施例,本发明还提供一种非临时性计算机可读存储介质,例如包括指令的存储器,上述指令可由装置的处理器执行以完成上述方法。例如,非临时性计算机可读存储介质可以是rom、随机存取存储器(ram)、cd-rom、磁带、软盘和光数据存储设备等。当存储介质中的指令由终端的处理器执行时,使得终端能够执行下述方法:获取阻塞队列中的任务消息,所述任务消息至少包括任务内容和任务策略;根据当前系统时间和所述任务策略计算所述任务消息的待执行时间;根据所述任务内容和所述待执行时间生成待执行任务;在所述待执行时间执行所述待执行任务。

本领域技术人员可以理解,附图只是示例实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的,因此不能用于限制本发明的保护范围。

本领域技术人员可以理解上述各模块可以按照实施例的描述分布于装置中,也可以进行相应变化唯一不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。

以上具体地示出和描述了本发明的示例性实施例。应该理解,本发明不限于所公开的实施例,相反,本发明意图涵盖包含在所附权利要求的精神和范围内的各种修改和等效布置。

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