本发明实施例涉及移动通信技术领域,尤其涉及一种任务执行方法及装置。
背景技术:
随着移动通信技术的迅速发展,以智能手机为首的移动终端已成为人们生活中各方面不可或缺的工具,用户也趋向于通过手机在线办理各项运营商相关的各项业务。运营商通过其业务办理系统为用户提供业务办理功能,而工作流引擎作为业务办理系统的核心,主要提供就业务订单的排队、优先级、条件审核等各类规则配置功能。
目前,主流的工作流引擎包括activiti、jbpm4、jbpm5等。与jbpm4、jbpm5相比,activiti具有更多良好的特性,比如activiti具有协作工具组件,像建模器—activitimodeler;管理及监控组件—activitiprobe);此外,activiti拥有更简洁健壮的接口、拥有更友好的用户体验、支持启动引擎后随时热部署、拥有更友好易用的eclipse编辑插件和在线插件、依赖更少的jar包等。因此,业务受理系统通常采用activiti作为工作流程引擎。目前,activiti流程引擎中的工作执行器,处理业务订单性能约为3000单/小时,但随着业务线上受理日益常态化,以及周期性促销活动优惠力度的变化,在营销活动期内,业务订单可达每天10万单以上;而若业务受理系统性能不足,业务办理效率会降低,导致客户感知下降;为了提高业务受理系统性能,可通过堆设更多硬件来解决,比如通过增加服务器,双机甚至更多的机器部署流程引擎进行办理,实现平行扩容外,而堆设更多硬件并不能保证性能的足够提高,不能保证业务办理能力与日益增长的线上移动业务量相匹配。
此外,除了activiti流程引擎的工作执行器性能不足的问题之外,activiti流程引擎还存在订单存在重复办理的问题。具体地,若流程节点睡眠时间过长,导致流程定时任务监控认为该节点办理超时,会启动重试机制,最大重试5次,而此时实际节点还在办理,等待睡眠完成后会再处理,因此会导致处理重复。而业务受理系统通信不具有办理回退能力,因此会出现一定的订单办理重复率。
技术实现要素:
本发明实施例提供一种任务执行方法及装置,用以解决现有技术中,activiti流程引擎的工作执行器性能不足的问题。
一方面,本发明实施例提供一种任务执行方法,所述方法包括:
获取所述工作流引擎的线程池中的至少两个属于同一流程的待执行任务;
异步执行所述待执行任务。
一方面,本发明实施例提供一种任务执行装置,所述装置包括:
获取模块,用于获取所述工作流引擎的线程池中的至少两个属于同一流程的待执行任务。
执行模块,用于异步执行所述待执行任务。
另一方面,本发明实施例还提供了一种电子设备,包括存储器、处理器、总线以及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述任务执行方法中的步骤。
再一方面,本发明实施例还提供了一种非暂态计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现上述任务执行方法中的步骤。
本发明实施例提供的任务执行方法及装置,获取所述工作流引擎的线程池中的至少两个属于同一流程的待执行任务时,异步执行所述待执行任务,即分别以独立的线程,执行所述待执行任务,通过异步执行属于同一流程的待执行任务,而不必每次执行待执行任务时,轮询数据库获取同一流程的所有任务,提升工作流引擎的业务处理能力,满足订单办理性能提升要求。本发明实施例通过异步处理机制提升订单处理能力,而不是通过简单的硬件资源堆叠或横向多服务器扩容,解决了现有技术中,activiti流程引擎的工作执行器性能不足的问题。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的任务执行方法的流程示意图之一;
图2为本发明实施例的示例的场景示意图;
图3为本发明实施例提供的任务执行方法的流程示意图之二;
图4为本发明实施例提供的任务执行装置的结构示意图;
图5为本发明实施例提供的电子设备的结构示意图。
具体实施方式
为使本发明要解决的技术问题、技术方案和优点更加清楚,下面将结合附图及具体实施例进行详细描述。在下面的描述中,提供诸如具体的配置和组件的特定细节仅仅是为了帮助全面理解本发明的实施例。因此,本领域技术人员应该清楚,可以对这里描述的实施例进行各种改变和修改而不脱离本发明的范围和精神。另外,为了清楚和简洁,省略了对已知功能和构造的描述。
应理解,说明书通篇中提到的“实施例”或“一实施例”意味着与实施例有关的特定特征、结构或特性包括在本发明的至少一个实施例中。因此,在整个说明书各处出现的“实施例中”或“在一实施例中”未必一定指相同的实施例。此外,这些特定的特征、结构或特性可以任意适合的方式结合在一个或多个实施例中。
在本发明的各种实施例中,应理解,下述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
在本申请所提供的实施例中,应理解,“与a相应的b”表示b与a相关联,根据a可以确定b。但还应理解,根据a确定b并不意味着仅仅根据a确定b,还可以根据a和/或其它信息确定b。
图1示出了本发明实施例提供的一种任务执行方法的流程示意图。
如图1所示,本发明实施例提供的任务执行方法,应用于工作流引擎,所述方法具体包括以下步骤:
步骤101,获取所述工作流引擎的线程池中的至少两个属于同一流程的待执行任务。
其中,线程是程序执行流的最小单元,线程是程序进程中的一个实体,是被系统独立调度和分派的基本单位,可与同属一个进程的其它线程共享进程所拥有的全部资源。
线程池是一种多线程处理形式,处理过程中将待执行任务添加到队列,然后在创建线程后,自动启动这些任务。
工作流引擎的线程池中包括至少两个属于同一流程的待执行任务时,当待执行任务的数据量庞大时,由于业务受理系统性能不足,业务办理效率会降低,因此,在检测到线程池中属于同一流程的待执行任务的数量包括至少两个时,执行异步处理流程。
步骤102,异步执行所述待执行任务。
其中,异步执行所述待执行任务即分别以独立的线程,执行所述待执行任务;具体地,作为示例,参见图2,工作流引擎可配置有一异步执行器,用于执行线程池中的待执行任务。启用后,工作流引擎将使用异步作业实体调用异步执行程序,线程池将异步执行作业。
参见图2,异步执行器则直接执行异步作业,分别以独立的线程,执行属于同一流程的待执行任务,比如分别以独立的线程,执行任务1-任务3,每个独立线程的任务完成之后,该线程结束。如果异步执行作业是独占作业,则异步执行器将首先锁定进程实例执行,并且如果成功执行该作业并再次解锁进程实例执行。
本发明上述实施例中,获取所述工作流引擎的线程池中的至少两个属于同一流程的待执行任务时,异步执行所述待执行任务,即分别以独立的线程,执行所述待执行任务,通过异步执行属于同一流程的待执行任务,而不必每次执行待执行任务时,轮询数据库获取同一流程的所有任务,提升工作流引擎的业务处理能力,满足订单办理性能提升要求。本发明实施例通过异步处理机制提升订单处理能力,而不是通过简单的硬件资源堆叠或横向多服务器扩容,解决了现有技术中,activiti流程引擎的工作执行器性能不足的问题。
可选地,本发明实施例中,所述异步执行所述待执行任务的步骤之前,所述方法还包括:
关闭所述工作流引擎的线程执行器,并配置所述工作流引擎的执行参数。
具体地,以activiti5.17版本为例,需配置以下参数:
(1)配置异步执行器需先增加activiti5.17版本一些相关jar包,如下:
activiti-common-rest-5.17.0.jar
activiti-diagram-rest-5.17.0.jar
activiti-simple-workflow-5.17.0.jar
(2)关闭原来的工作执行器,并修改配置:
<propertyname="jobexecutoractivate"value="false"/>
然后增加启动异步执行器配置:
<propertyname="asyncexecutorenabled"value="true"/>
增加启动异步执行器线程池配置:
<propertyname="asyncexecutoractivate"value="true"/>。
可选地,本发明实施例中,所述执行参数包括:所述线程池中保持活动的最小线程数、最大线程数,用于执行作业的线程的时间,用于放置执行作业的队列的大小,单次查询的定时器作业的数量和/或单次查询提取异步作业的数量。
其中,所述执行参数还包括配置异步执行器线程池大小参数及其他配置参数,仍以activiti5.17版本为例,上述参数的具体内容如下:
所述线程池中保持活动的最小线程数:corepoolsize,用于作业执行;
所述线程池中保持活动的最大线程数:maxpoolsize,用于作业执行;
用于执行作业的线程的时间:keepalivetime;
用于放置执行作业的队列的大小:queuesize;
单次查询的定时器作业的数量:maxtimerjobsperacquisition;
单次查询提取异步作业的数量:maxasyncjobsdueperacquisition;
此外,其他配置参数包括以下内容:
defaultasyncjobacquirewaittimeinmillis:执行异步作业到期查询之间的时间(以毫秒为单位)。
defaulttimerjobacquirewaittimeinmillis:执行定时器作业查询之间的时间(以毫秒为单位)。
timerlocktimeinmillis:在重新尝试之前,计时器作业被锁定的时间(以毫秒为单位)。
asyncjoblocktimeinmillis:异步作业在重新尝试之前被锁定的时间(以毫秒为单位)。
配置实例如下所示:
作为又一实施例,如图3所示,本发明实施例还提供了一种任务执行方法,应用于工作流引擎,所述方法具体包括以下步骤:
步骤301,监控所述工作流引擎的执行流程;
其中,本发明实施例中引入了节点监听控制机制,监控所述工作流引擎的执行流程,比如在工作流引擎中增设流程监听器,增加全局变量用于保存订单处理信息,放在内存;流程节点开始,记录订单状态到全局变量;流程节点完成,记录订单状态到全局变量;流程节点开始时判断内存的全局变量是否存在订单处理信息,存在,则获取订单处理结果,保存记录,重新设置流程处理结果,让流程继续流转到下个节点,不再重复处理;不存在,则走正常流程。
具体地,步骤301包括:监控所述待执行任务的执行状态;和/或创建并维持用于记载所述执行状态的日志。
其中,执行状态包括执行完成以及未执行完成,日志用于记载执行状态以及其他执行节点相关的内容。
步骤302,获取所述工作流引擎的线程池中的至少两个属于同一流程的待执行任务。
其中,工作流引擎的线程池中包括至少两个属于同一流程的待执行任务时,当待执行任务的数据量庞大时,由于业务受理系统性能不足,业务办理效率会降低,因此,在检测到线程池中属于同一流程的待执行任务的数量包括至少两个时,执行异步处理流程。
步骤303,获取所述待执行任务的日志,判断所述待执行任务对应的节点是否已处理成功。
其中,修改工作流引擎的流程处理逻辑,增加判断该节点是否已处理过,防止该节点被重复处理。具体地,在执行流程开始时,从全局变量查询是否有该待执行任务的日志,即订单的处理信息;获取待执行任务的日志,判断该待执行任务对应的节点是否已处理成功,并根据是否处理成功执行步骤304或步骤305。
步骤304,若所述待执行任务的日志指示所述节点已处理成功,则停止执行所述待执行任务,并执行步骤306。
其中,如果节点已处理成功,则停止执行所述待执行任务,避免重复执行;并执行步骤306,直接获取该节点上一次办理记录、执行状态重新插入日志中,防止办理记录没保存到日志,以及方便故障排查。
步骤305,若所述待执行任务的日志指示所述节点未处理成功,则异步执行述所述待执行任务,并执行步骤306。
其中,节点未处理成功包括未处理以及已处理而未成功,若节点未处理成功,继续执行办理逻辑,重新办理,并执行步骤306。
步骤306,更新所述节点的订单状态以及办理记录至所述待执行任务的日志。
其中,流程处理完成时,无论是成功失败,都所述节点的订单状态以及办理记录至所述待执行任务的日志,更新全局变量,以便下一次处理到该节点时,可判断是否重复处理。
本发明上述实施例中,获取所述工作流引擎的线程池中的至少两个属于同一流程的待执行任务时,异步执行所述待执行任务,即分别以独立的线程,执行所述待执行任务,通过异步执行属于同一流程的待执行任务,而不必每次执行待执行任务时,轮询数据库获取同一流程的所有任务,提升工作流引擎的业务处理能力,满足订单办理性能提升要求;通过节点监听机制,避免订单重复处理;通过异步处理机制提升订单处理能力,而不是通过简单的硬件资源堆叠或横向多服务器扩容,本发明实施例解决了现有技术中,activiti流程引擎的工作执行器性能不足以及订单存在重复办理的问题。
以上介绍了本发明实施例提供的任务执行方法,下面将结合附图介绍本发明实施例提供的任务执行装置。
参见图4,本发明实施例提供了一种任务执行装置,应用于工作流引擎,所述装置包括:
获取模块401,用于获取所述工作流引擎的线程池中的至少两个属于同一流程的待执行任务。
其中,线程是程序执行流的最小单元,线程是程序进程中的一个实体,是被系统独立调度和分派的基本单位,可与同属一个进程的其它线程共享进程所拥有的全部资源。
线程池是一种多线程处理形式,处理过程中将待执行任务添加到队列,然后在创建线程后,自动启动这些任务。
工作流引擎的线程池中包括至少两个属于同一流程的待执行任务时,当待执行任务的数据量庞大时,由于业务受理系统性能不足,业务办理效率会降低,因此,在检测到线程池中属于同一流程的待执行任务的数量包括至少两个时,执行异步处理流程。
执行模块402,用于异步执行所述待执行任务。
具体地,作为示例,参见图2,工作流引擎可配置有一异步执行器,用于执行线程池中的待执行任务。启用后,工作流引擎将使用异步作业实体调用异步执行程序,线程池将异步执行作业。
参见图2,异步执行器则直接执行异步作业,分别以独立的线程,执行属于同一流程的待执行任务,比如分别以独立的线程,执行任务1-任务3,每个独立线程的任务完成之后,该线程结束。如果异步执行作业是独占作业,则异步执行器将首先锁定进程实例执行,并且如果成功执行该作业并再次解锁进程实例执行。
本发明上述实施例中,通过获取模块401获取所述工作流引擎的线程池中的至少两个属于同一流程的待执行任务时,执行模块402异步执行所述待执行任务,即分别以独立的线程,执行所述待执行任务,通过异步执行属于同一流程的待执行任务,而不必每次执行待执行任务时,轮询数据库获取同一流程的所有任务,提升工作流引擎的业务处理能力,满足订单办理性能提升要求。本发明实施例通过异步处理机制提升订单处理能力,而不是通过简单的硬件资源堆叠或横向多服务器扩容,解决了现有技术中,activiti流程引擎的工作执行器性能不足的问题。
可选地,本发明实施例中,所述执行模块402用于:
分别以独立的线程,执行所述待执行任务。
可选地,本发明实施例中,所述装置还包括:
参数配置模块,用于关闭所述工作流引擎的线程执行器,并配置所述工作流引擎的执行参数。
其中,在执行异步执行所述待执行任务,首先关闭所述工作流引擎的线程执行器,并修改配置参数,依据异步执行流程重新配置所述工作流引擎的执行参数。
可选地,本发明实施例中,所述执行参数包括:所述线程池中保持活动的最小线程数、最大线程数,用于执行作业的线程的时间,用于放置执行作业的队列的大小,单次查询的定时器作业的数量和/或单次查询提取异步作业的数量。
可选地,本发明实施例中,所述装置还包括:
监控模块,用于监控所述工作流引擎的执行流程,具体用于:
监控所述待执行任务的执行状态;和/或创建并维持用于记载所述执行状态的日志。
其中,执行状态包括执行完成以及未执行完成,日志用于记载执行状态以及其他执行节点相关的内容。
可选地,本发明实施例中,所述执行模块402包括:
获取子模块,用于获取所述待执行任务的日志,判断所述待执行任务对应的节点是否已处理成功:
第一执行子模块,用于若所述待执行任务的日志指示所述节点已处理成功,则停止执行所述待执行任务;
第二执行子模块,用于若所述待执行任务的日志指示所述节点未处理成功,则异步执行述所述待执行任务。
可选地,本发明实施例中,所述装置还包括:
日志更新模块,用于更新所述节点的订单状态以及办理记录至所述待执行任务的日志。
本发明上述实施例中,通过获取模块401获取所述工作流引擎的线程池中的至少两个属于同一流程的待执行任务时,执行模块402异步执行所述待执行任务,即分别以独立的线程,执行所述待执行任务,通过异步执行属于同一流程的待执行任务,而不必每次执行待执行任务时,轮询数据库获取同一流程的所有任务,提升工作流引擎的业务处理能力,满足订单办理性能提升要求;通过节点监听机制,避免订单重复处理;通过异步处理机制提升订单处理能力,而不是通过简单的硬件资源堆叠或横向多服务器扩容,本发明实施例解决了现有技术中,activiti流程引擎的工作执行器性能不足以及订单存在重复办理的问题。
图5示出了本发明又一实施例提供的一种电子设备的结构示意图。
如图5所示,该电子设备可以包括:处理器(processor)510、通信接口(communicationsinterface)520、存储器(memory)530和通信总线540,其中,处理器510,通信接口520,存储器530通过通信总线540完成相互间的通信。处理器510可以调用存储器530中的逻辑指令,以执行如下方法:
获取所述工作流引擎的线程池中的至少两个属于同一流程的待执行任务;
异步执行所述待执行任务。
此外,上述的存储器530中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。
本发明又一实施例提供的一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质上存储有计算机程序,所述程序被处理器执行时实现如本发明上述实施例中提供的方法中的步骤,本实施不再赘述。
基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
1.一种任务执行方法,应用于工作流引擎,其特征在于,所述方法包括:
获取所述工作流引擎的线程池中的至少两个属于同一流程的待执行任务;
异步执行所述待执行任务。
2.根据权利要求1所述的方法,其特征在于,所述异步执行所述待执行任务的步骤,包括:
分别以独立的线程,执行所述待执行任务。
3.根据权利要求1所述的方法,其特征在于,所述异步执行所述待执行任务的步骤之前,所述方法还包括:
关闭所述工作流引擎的线程执行器,并配置所述工作流引擎的执行参数。
4.根据权利要求3所述的方法,其特征在于,所述执行参数包括:所述线程池中保持活动的最小线程数、最大线程数,用于执行作业的线程的时间,用于放置执行作业的队列的大小,单次查询的定时器作业的数量和/或单次查询提取异步作业的数量。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
监控所述工作流引擎的执行流程,包括:
监控所述待执行任务的执行状态;和/或创建并维持用于记载所述执行状态的日志。
6.根据权利要求5所述的方法,其特征在于,所述异步执行所述待执行任务的步骤,包括:
获取所述待执行任务的日志,判断所述待执行任务对应的节点是否已处理成功:
若所述待执行任务的日志指示所述节点已处理成功,则停止执行所述待执行任务;
若所述待执行任务的日志指示所述节点未处理成功,则异步执行述所述待执行任务。
7.根据权利要求6所述的方法,其特征在于,所述停止执行所述待执行任务的步骤之后,或所述异步执行述所述待执行任务的步骤之后,所述方法还包括:
更新所述节点的订单状态以及办理记录至所述待执行任务的日志。
8.一种任务执行装置,应用于工作流引擎,其特征在于,所述装置包括:
获取模块,用于获取所述工作流引擎的线程池中的至少两个属于同一流程的待执行任务;
执行模块,用于异步执行所述待执行任务。
9.一种电子设备,其特征在于,包括存储器、处理器、总线以及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如权利要求1至7中任一项所述的任务执行方法中的步骤。
10.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于:所述程序被处理器执行时实现如权利要求1至7中任一项所述的任务执行方法中的步骤。
技术总结