一种调度任务的方法和系统与流程

文档序号:13685600阅读:179来源:国知局
一种调度任务的方法和系统与流程

本发明涉及计算机及其软件技术领域,特别涉及一种调度任务的方法和系统。



背景技术:

随着电商的快速发展,其包含的商品的种类也越来越多,所需要的商品的供应商也随之增多,当客户在电商客户端下了订单后,电商后台会根据客户的订单调用对应的供应商接口,将订单的相关信息发送给供应商。通常当订单任务满足自动执行条件时,电商平台的任务调度系统需要按照设定好的步骤去自动处理,此时会用到基于时间调度任务的场景,在这些场景中需要实现在特定时间点或者时间间隔内运行任务程序的功能。当存在大量的任务需要处理时,单任务处理模式势必降低数据处理能力。

现有的技术方案中,通常引入开源工具包quartz实现任务的定时调度,同时可以通过配置文件调整定时参数以实现任务调度系统启动后(如果有多台机器,也只能启动在指定的一台机器上)可以自行工作。任务调度系统启动后需要根据所设置的定时时间运行,每一次运行时从数据库中获取一个区间的数据作为处理的对象,并且无论数据库中是否有数据都需要扫描一次。任务调度系统在获取到数据后需要一个一个的处理,处理完一个再执行下一个;这一批数据处理完后待定时任务下一次触发再继续上一流程。

综上所述,现有技术存在以下缺点:

1.根据quartz调度组件只能启动一台服务器对任务进行串行处理,因而在任务较多时,不仅降低了处理任务的吞吐量,而且同时导致其他服务器因得不到利用从而产生资源浪费;

2.不管数据库中是否存在需要处理的数据,任务调度系统都会按照设定的时间周期对数据库进行扫描,因而在没有数据要处理时就会造成资源浪费;

3.任务调度系统在任务失败率高的情况下需要重试,重试任务会降低整体处理的效率;

4.不支持跨机房任务并行处理,容易产生单点故障,并且系统容灾能力差,不能自动切换机房。



技术实现要素:

有鉴于此,本发明提供一种调度任务的方法和系统,由于采用了消息队列,能够实现多台服务器同时处理任务,不仅提高了任务的吞吐量,而且还解决单台服务器单任务串行处理的弊端;同时避免了定时扫描数据库的问题,提高了资源利用利用率;同时,在任务量增加,网络不稳定等因素导致任务处理失败率增高时,能够自动切换到不同机房所对应的消息队列,弥补了单机房的短板,不仅解决了单点问题,而且还提高了任务调度系统的容灾能力。

为实现上述目的,根据本发明的一个方面,提供了一种调度任务的方法。

本发明的调度任务的方法,包括:保存模块保存消息队列与执行模块之间的关联关系;生成模块在当有任务需要处理时,生成该任务的任务消息;确定模块根据预设的消息存放规则确定所述任务消息所属的消息队列,然后将所述任务消息存入所述消息队列中;执行模块监听与该执行模块之间有关联关系的消息队列的通知消息,在监听到通知消息后获取所述消息队列中的任务消息,然后在获取到该任务消息后将该任务消息发送给供应商。

可选地,根据预设的消息存放规则确定所述任务消息所属的消息队列的步骤包括:根据所述任务消息的业务标识确定该业务标识所对应的供应商;在当前记录的队列容错数据中查找与所述供应商连接失败的消息队列,并将该消息队列作为无效消息队列;将除去所述无效消息队列之后的剩余队列的队列标识与当前记录的队列容错数据中的队列标识依次进行比对,如果比对失败,则确认该队列是容错数值为0的有效队列;如果比对成功,则将队列标识所对应的容错数值与预设容错阈值进行比较,然后将容错数值不大于预设容错阈值的消息队列作为有效队列;将所述有效队列按照容错数值升序排列,并将排在第一位的队列作为所述任务消息存放的消息队列。

可选地,所述获取所述消息队列中的任务消息的步骤之后,还包括:在获取到该任务消息后,锁定该条任务消息。

可选地,所述任务消息包括消息标识;所述将该任务消息发送给供应商的步骤之前,还包括:执行模块根据所述消息标识确认该任务消息的消息类型;所述消息类型包括初次任务消息和非初次任务消息;并且所述将该任务消息发送给供应商的步骤包括:在确认该任务消息的消息类型为初次任务消息的前提下,将该初次任务发送给供应商;在确认该任务消息的消息类型为给初次任务消息的前提下,将该非初次任务发送给供应商。

可选地,执行模块根据所述消息标识确认该任务消息的消息类型的步骤包括:判断缓存中是否包含该消息标识所对应的消息执行参数,若是,则确认该任务消息为非初次任务消息;否则,确认该任务消息为初次任务消息。

可选地,所述确认该任务消息为初始任务消息的步骤之后包括:设置该初次任务消息的消息执行参数,然后将设置好消息执行参数的初次任务消息发送给供应商;所述消息执行参数包括重试阈值。

可选地,所述任务消息包括重试时间间隔;所述确认该任务消息为非初次任务消息的步骤之后包括:根据该非初次任务消息的重试时间间隔确定是否执行该非初次任务消息,如果是,则将该非初次任务消息发送给供应商;否则,生成该非初次任务消息的重试任务消息,然后将该重试任务消息放回消息队列中。

可选地,所述将该初次任务消息发送给供应商的步骤之后,还包括:接收供应商返回的接收状态消息,然后在接收到返回的接收状态消息为接收失败时,生成所发送的初次任务消息的重试任务消息,然后将该重试任务消息放回消息队列中。

可选地,所述将该非初次任务消息发送给供应商的步骤之后,还包括:接收供应商返回的接收状态消息,然后在接收到返回的接收状态消息为接收失败时,生成所发送的非初次任务消息的重试任务消息,然后将该重试任务消息放回消息队列中。

可选地,所述生成所发送的初次任务消息的重试任务消息的步骤之前,还包括:将该初次任务消息中的重试次数加1,然后判断加1后的重试次数是否大于消息标识所对应的消息执行参数中的重试阈值,若是,则删除所述初次任务消息;否则,继续执行步骤生成所发送的初次任务消息的重试任务消息。

可选地,所述生成所发送的非初次任务消息的重试任务消息的步骤之前,还包括:将该非初次任务消息中的重试次数加1,然后判断加1后的重试次数是否大于消息标识所对应的消息执行参数中的重试阈值,若是,则删除所述非初次任务消息;否则,继续执行步骤生成所发送的非初次任务消息的重试任务消息。

可选地,所述生成所发送的初次任务消息的重试任务消息的步骤之前,还包括:记录任务消息所属的消息队列与该供应商之间的连接失败消息,以及根据该连接失败消息更新队列容错数据;并且所述将该重试任务消息放回消息队列中的步骤之前,还包括:根据更新后的队列容错数据确定有效队列,然后该重试任务放入确定的有效消息队列中。

可选地,所述生成所发送的非初次任务消息的重试任务消息的步骤之前,还包括:记录任务消息所属的消息队列与该供应商之间的连接失败消息,以及根据该连接失败消息更新队列容错数据;并且所述将该重试任务消息放回消息队列中的步骤之前,还包括:根据更新后的队列容错数据确定有效队列,然后该重试任务放入确定的有效消息队列中。

可选地,所述任务消息包括队列标识;根据该连接失败消息更新队列容错数据的步骤包括:将所述任务消息所属的消息队列的队列标识与队列容错数据中的队列标识进行比对,如果比对成功,则将该队列标识所对应的容错数值加1,同时记录该队列标识对应的连接失败的供应商;否则,记录该队列标识以及将该队列标识的容错数值设为1,同时记录该队列标识对应的连接失败的供应商。

可选地,根据更新后的队列容错数据确定有效队列的步骤包括:在更新的队列容错数据中查找与所述供应商连接失败的消息队列,并将该消息队列作为无效消息队列;将除去所述无效消息队列之后的剩余队列的队列标识与更新后的队列容错数据中的队列标识依次进行比对,如果比对失败,则确认该队列是容错数值为0的有效队列;如果比对成功,则将队列标识所对应的容错数值与预设容错阈值进行比较,然后将容错数值不大于预设容错阈值的消息队列作为有效队列;将所述有效队列按照容错数值升序排列,然后将排在第一位的队列作为所述重试任务消息存放的消息队列。

可选地,记录该队列标识对应的连接失败的供应商的步骤之后,还包括:在首次记录该队列标识与该供应商连接失败的情况下,设置该条记录的有效时长,然后在有效时长倒计时结束后删除该条记录。

根据本发明的另一个方面,提供了一种调度任务的系统。

本发明的调度任务的系统,包括:保存模块、生成模块、确定模块、以及执行模块;所述保存模块用于保存消息队列与执行模块之间的关联关系;所述生成模块用于在当有任务需要处理时,生成该任务的任务消息;所述确定模块用于根据预设的消息存放规则确定所述任务消息所属的消息队列,然后将所述任务消息存入所述消息队列中;所述执行模块用于监听与该执行模块之间有关联关系的消息队列的通知消息,在监听到通知消息后获取所述消息队列中的任务消息,然后在获取到该任务消息后将该任务消息发送给供应商。

可选地,所述确定模块还用于:根据所述任务消息的业务标识确定该业务标识所对应的供应商;在当前记录的队列容错数据中查找与所述供应商连接失败的消息队列,并将该消息队列作为无效消息队列;将除去所述无效消息队列之后的剩余队列的队列标识与当前记录的队列容错数据中的队列标识依次进行比对,如果比对失败,则确认该队列是容错数值为0的有效队列;如果比对成功,则将队列标识所对应的容错数值与预设容错阈值进行比较,然后将容错数值不大于预设容错阈值的消息队列作为有效队列;将所述有效队列按照容错数值升序排列,并将排在第一位的队列作为所述任务消息存放的消息队列。

可选地,所述执行模块还用于:在获取到该任务消息后,锁定该条任务消息。

可选地,所述任务消息包括消息标识;所述执行模块还用于根据所述消息标识确认该任务消息的消息类型;所述消息类型包括初次任务消息和非初次任务消息;在确认该任务消息的消息类型为初次任务消息的前提下,将该初次任务发送给供应商;在确认该任务消息的消息类型为给初次任务消息的前提下,将该非初次任务发送给供应商。

可选地,所述执行模块还用于:判断缓存中是否包含该消息标识所对应的消息执行参数,若是,则确认该任务消息为非初次任务消息;否则,确认该任务消息为初次任务消息。

可选地,所述执行模块还用于:设置该初次任务消息的消息执行参数,然后将设置好消息执行参数的初次任务消息发送给供应商;所述消息执行参数包括重试阈值。

可选地,所述任务消息包括重试时间间隔;所述执行模块还用于:根据该非初次任务消息的重试时间间隔确定是否执行该非初次任务消息,如果是,则将该非初次任务消息发送给供应商;否则,生成该非初次任务消息的重试任务消息,然后将该重试任务消息放回消息队列中。

可选地,所述执行模块还用于:接收供应商返回的接收状态消息,然后在接收到返回的接收状态消息为接收失败时,生成所发送的初次任务消息的重试任务消息,然后将该重试任务消息放回消息队列中。

可选地,所述执行模块还用于:接收供应商返回的接收状态消息,然后在接收到返回的接收状态消息为接收失败时,生成所发送的非初次任务消息的重试任务消息,然后将该重试任务消息放回消息队列中。

可选地,所述执行模块还用于:将该初次任务消息中的重试次数加1,然后判断加1后的重试次数是否大于消息标识所对应的消息执行参数中的重试阈值,若是,则删除所述初次任务消息;否则,继续执行步骤生成所发送的初次任务消息的重试任务消息。

可选地,所述执行模块还用于:将该非初次任务消息中的重试次数加1,然后判断加1后的重试次数是否大于消息标识所对应的消息执行参数中的重试阈值,若是,则删除所述非初次任务消息;否则,继续执行步骤生成所发送的非初次任务消息的重试任务消息。

可选地,所述执行模块还用于:记录任务消息所属的消息队列与该供应商之间的连接失败消息,以及根据该连接失败消息更新队列容错数据;所述执行模块还用于:根据更新后的队列容错数据确定有效队列,然后该重试任务放入确定的有效消息队列中。

可选地,所述执行模块还用于:记录任务消息所属的消息队列与该供应商之间的连接失败消息,以及根据该连接失败消息更新队列容错数据;所述执行模块还用于:根据更新后的队列容错数据确定有效队列,然后该重试任务放入确定的有效消息队列中。

可选地,所述任务消息包括队列标识;所述执行模块还用于:将所述任务消息所属的消息队列的队列标识与队列容错数据中的队列标识进行比对,如果比对成功,则将该队列标识所对应的容错数值加1,同时记录该队列标识对应的连接失败的供应商;否则,记录该队列标识以及将该队列标识的容错数值设为1,同时记录该队列标识对应的连接失败的供应商。

可选地,所述执行模块还用于:在更新的队列容错数据中查找与所述供应商连接失败的消息队列,并将该消息队列作为无效消息队列;将除去所述无效消息队列之后的剩余队列的队列标识与更新后的队列容错数据中的队列标识依次进行比对,如果比对失败,则确认该队列是容错数值为0的有效队列;如果比对成功,则将队列标识所对应的容错数值与预设容错阈值进行比较,然后将容错数值不大于预设容错阈值的消息队列作为有效队列;将所述有效队列按照容错数值升序排列,然后将排在第一位的队列作为所述重试任务消息存放的消息队列。

可选地,所述执行模块还用于:在首次记录该队列标识与该供应商连接失败的情况下,设置该条记录的有效时长,然后在有效时长倒计时结束后删除该条记录。

根据本发明的技术方案,由于采用了消息队列,能够实现多台服务器同时处理任务,不仅提高了任务的吞吐量,而且还解决单台服务器单任务串行处理的弊端;同时避免了定时扫描数据库的问题,提高了资源利用利用率;同时,在任务量增加,网络不稳定等因素导致任务处理失败率增高时,能够自动切换到不同机房所对应的消息队列,弥补了单机房的短板,不仅解决了单点问题,而且还提高了任务调度系统的容灾能力。

附图说明

附图用于更好地理解本发明,不构成对本发明的不当限定。其中:

图1是根据本发明实施例的一种调度任务的系统的示意图;

图2是根据本发明实施例的一种调度任务的方法的示意图。

具体实施方式

以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。

图1是根据本发明实施例的一种调度任务的系统的示意图。如图1所示,本发明实施例的调度任务的系统10,该系统设置于业务系统中,主要包括保存模块11、生成模块12、确定模块13、以及执行模块14;其中,保存模块11、生成模块12、以及确定模块13设置于业务系统的一个用于实现将任务消息存入消息队列的计算机中;执行模块14设置于业务系统的ip地址不同的计算机中;保存模块11用于保存消息队列与执行模块之间的关联关系;生成模块12用于在当有任务需要处理时,生成该任务的任务消息;确定模块13用于根据预设的消息存放规则确定所述任务消息所属的消息队列,然后将所述任务消息存入所述消息队列中;执行模块14用于监听与该执行模块之间有关联关系的消息队列的通知消息,在监听到通知消息后获取所述消息队列中的任务消息,然后在获取到该任务消息后将该任务消息发送给供应商。

确定模块13还可用于:根据所述任务消息的业务标识确定该业务标识所对应的供应商;在当前记录的队列容错数据中查找与所述供应商连接失败的消息队列,并将该消息队列作为无效消息队列;将除去所述无效消息队列之后的剩余队列的队列标识与当前记录的队列容错数据中的队列标识依次进行比对,如果比对失败,则确认该队列是容错数值为0的有效队列;如果比对成功,则将队列标识所对应的容错数值与预设容错阈值进行比较,然后将容错数值不大于预设容错阈值的消息队列作为有效队列;将所述有效队列按照容错数值升序排列,并将排在第一位的队列作为所述任务消息存放的消息队列。

执行模块14还可用于:在获取到该任务消息后,锁定该条任务消息。

所述任务消息包括消息标识;执行模块14还可用于根据所述消息标识确认该任务消息的消息类型;所述消息类型包括初次任务消息和非初次任务消息;在确认该任务消息的消息类型为初次任务消息的前提下,将该初次任务发送给供应商;在确认该任务消息的消息类型为给初次任务消息的前提下,将该非初次任务发送给供应商。

执行模块14还可用于:判断缓存中是否包含该消息标识所对应的消息执行参数,若是,则确认该任务消息为非初次任务消息;否则,确认该任务消息为初次任务消息。

执行模块14还可用于:设置该初次任务消息的消息执行参数,然后将设置好消息执行参数的初次任务消息发送给供应商;所述消息执行参数包括重试阈值。

所述任务消息包括重试时间间隔;所述执行模块14还可用于:根据该非初次任务消息的重试时间间隔确定是否执行该非初次任务消息,如果是,则将该非初次任务消息发送给供应商;否则,生成该非初次任务消息的重试任务消息,然后将该重试任务消息放回消息队列中。

执行模块14还可用于:接收供应商返回的接收状态消息,然后在接收到返回的接收状态消息为接收失败时,生成所发送的初次任务消息的重试任务消息,然后将该重试任务消息放回消息队列中。

执行模块14还可用于:接收供应商返回的接收状态消息,然后在接收到返回的接收状态消息为接收失败时,生成所发送的非初次任务消息的重试任务消息,然后将该重试任务消息放回消息队列中。

执行模块14还可用于:将该初次任务消息中的重试次数加1,然后判断加1后的重试次数是否大于消息标识所对应的消息执行参数中的重试阈值,若是,则删除所述初次任务消息;否则,继续执行步骤生成所发送的初次任务消息的重试任务消息。

执行模块14还可用于:将该非初次任务消息中的重试次数加1,然后判断加1后的重试次数是否大于消息标识所对应的消息执行参数中的重试阈值,若是,则删除所述非初次任务消息;否则,继续执行步骤生成所发送的非初次任务消息的重试任务消息。

执行模块14还可用于:记录任务消息所属的消息队列与该供应商之间的连接失败消息,以及根据该连接失败消息更新队列容错数据;根据更新后的队列容错数据确定有效队列,然后该重试任务放入确定的有效消息队列中。

所述任务消息包括队列标识;执行模块14还可用于:将所述任务消息所属的消息队列的队列标识与队列容错数据中的队列标识进行比对,如果比对成功,则将该队列标识所对应的容错数值加1,同时记录该队列标识对应的连接失败的供应商;否则,记录该队列标识以及将该队列标识的容错数值设为1,同时记录该队列标识对应的连接失败的供应商。

执行模块14还可用于:在更新的队列容错数据中查找与所述供应商连接失败的消息队列,并将该消息队列作为无效消息队列;将除去所述无效消息队列之后的剩余队列的队列标识与更新后的队列容错数据中的队列标识依次进行比对,如果比对失败,则确认该队列是容错数值为0的有效队列;如果比对成功,则将队列标识所对应的容错数值与预设容错阈值进行比较,然后将容错数值不大于预设容错阈值的消息队列作为有效队列;将所述有效队列按照容错数值升序排列,然后将排在第一位的队列作为所述重试任务消息存放的消息队列。

执行模块14还可用于:在首次记录该队列标识与该供应商连接失败的情况下,设置该记录的有效时长,然后在有效时长倒计时结束后删除该条记录。

图2是根据本发明实施例的一种调度任务的方法的示意图。如图2所示,本发明的调度任务的方法的执行主体为图1中所提到的调度任务的系统10,该方法的步骤主要包括s20至s23。

步骤s20:保存模块保存消息队列与执行模块之间的关联关系。在该步骤中,由于调度任务的系统10的执行模块14安装于ip地址不同的计算机中,因而保存模块可以将消息队列根据不同ip地址与执行模块建立关联关系;其中,安装执行模块14的计算机可以布置于不同的机房中,通过在不同的机房增加安装有执行模块14的计算机以实现执行模块14的水平扩展,从而快速提升任务吞吐量,解决了单台机器单任务串行处理的弊端。

步骤s21:生成模块在当有任务需要处理时,生成该任务的任务消息。

步骤s22:确定模块根据预设的消息存放规则确定所述任务消息所属的消息队列,然后将所述任务消息存入所述消息队列中。在该步骤中,确定模块13首先根据所述任务消息的业务标识确定该业务标识所对应的供应商,然后在当前记录的队列容错数据中查找与所述供应商连接失败的消息队列,并将该消息队列作为无效消息队列,再将除去所述无效消息队列之后的剩余队列的队列标识与当前记录的队列容错数据中的队列标识依次进行比对,如果比对失败,则确认该队列是容错数值为0的有效队列;如果比对成功,则将队列标识所对应的容错数值与预设容错阈值进行比较,然后将容错数值不大于预设容错阈值的消息队列作为有效队列,最后将所述有效队列按照容错数值升序排列,并将排在第一位的队列作为所述任务消息存放的消息队列。其中所提到的队列容错数据用于记录与供应商连接失败的队列标识。在该步骤中,通过在当前的记录的队列容错数据中查找与当前任务所需供应商连接失败的队列,可以快速排除一部分无效队列,在一定程度上加快了任务消息的处理效率。

步骤s23:执行模块监听与该执行模块之间有关联关系的消息队列的通知消息,在监听到通知消息后获取所述消息队列中的任务消息,然后在获取到该任务消息后将该任务消息发送给供应商。在步骤s23中,当有任务消息存入消息队列的时候,消息队列生成通知消息,而执行模块14监听与自己有关联关系的消息队列的通知消息,当执行模块14监听到通知消息后,去对应的消息队列中获取任务消息。在执行模块14获取到任务消息后,可锁定该任务消息,避免别的执行模块重复执行该条任务消息。当执行模块14获取到任务消息后,首先根据任务消息中的消息标识确认该任务消息的消息类型,即判断缓存中是否包含该消息标识所对应的消息执行参数,若是,则确认该任务消息为非初次任务消息;否则,确认该任务消息为初次任务消息。

当确认任务消息为初次任务消息时,执行模块14在缓存中设置该初次任务消息的消息执行参数,然后将设置好消息执行参数的初次任务消息发送给供应商;其中,消息执行参数包括重试阈值;执行模块14在将设置好消息执行参数的初次任务消息发送给供应商后,接收供应商返回的接收状态消息,如果供应商所返回的接收状态信息为成功,说明该任务消息被成功发送给了供应商;如果接收到供应商返回的接收状态消息为接收失败时,说明该任务消息没有被供应商所成功接收。

本发明实施例技术方案为了能够对发送失败的任务消息进行重试,执行模块14接收到供应商所返回的接收失败的消息后,生成上述初次任务消息的重试任务消息,并将该重试任务消息重新放入消息队列中等待重新被执行;具体的过程如下:

首先,执行模块14将该初次任务消息中的重试次数加1,然后判断加1后的重试次数是否大于消息标识所对应的消息执行参数中的重试阈值,若是,则删除所述初次任务消息,结束此次任务消息重试;否则,生成该初次任务消息的重试任务消息。

其次,执行模块14记录任务消息所属的消息队列与该供应商之间的连接失败消息,然后根据连接失败消息更新队列容错数据,具体包括:将所述任务消息所属的消息队列的队列标识与队列容错数据中的队列标识进行比对,如果比对成功,则将该队列标识所对应的容错数值加1,同时记录该队列标识对应的连接失败的供应商,并在首次记录该队列标识与该供应商连接失败的记录后,设置该条记录的有效时长,然后在有效时长倒计时结束后删除该条记录;否则,说明该队列是首次出现与供应商连接失败的情况,此时,记录该队列标识以及将该队列标识的容错数值设为1,同时记录该队列标识对应的连接失败的供应商,并在首次记录队列标识与该供应商连接失败的记录后,设置该条记录的有效时长,然后在有效时长倒计时结束后删除该条记录。

再次,执行模块14根据更新后的队列容错数据确定有效队列,具体包括:在更新的队列容错数据中查找与所述供应商连接失败的消息队列,并将该消息队列作为无效消息队列;将除去所述无效消息队列之后的剩余队列的队列标识与更新后的队列容错数据中的队列标识依次进行比对,如果比对失败,则确认该队列是容错数值为0的有效队列;如果比对成功,则将队列标识所对应的容错数值与预设容错阈值进行比较,然后将容错数值不大于预设容错阈值的消息队列作为有效队列;将所述有效队列按照容错数值升序排列,然后将排在第一位的队列作为所述重试任务消息存放的消息队列。

最后,执行模块将该重试任务放入确定的有效消息队列中。

当确认任务消息为非初次任务消息时,执行模块14根据该非初次任务消息的重试时间间隔确定是否执行该非初次任务消息,如果是,则将该非初次任务消息发送给供应商;否则,生成该非初次任务消息的重试消息,然后将该重试消息放入消息队列中等待下次执行;执行模块14在将该非初次任务消息发送给供应商后,接收供应商返回的接收状态消息,如果供应商所返回的接收状态信息为成功,说明该任务消息被成功发送给了供应商;如果接收到供应商返回的接收状态消息为接收失败时,说明该任务消息没有被供应商所成功接收。

本发明实施例技术方案为了能够对发送失败的任务消息进行重试,执行模块接收到供应商所返回的接收失败的消息后,生成上述非初次任务消息的重试任务消息,并将该重试任务消息重新放入消息队列中等待重新被执行;具体的过程如下:

首先,执行模块14将该非初次任务消息中的重试次数加1,然后判断加1后的重试次数是否大于消息标识所对应的消息执行参数中的重试阈值,若是,则删除所述非初次任务消息,结束此次任务消息重试;否则,生成所发送的非初次任务消息的重试任务消息。

其次,执行模块14记录任务消息所属的消息队列与该供应商之间的连接失败消息,然后根据连接失败消息更新队列容错数据,具体包括:将所述任务消息所属的消息队列的队列标识与队列容错数据中的队列标识进行比对,如果比对成功,则将该队列标识所对应的容错数值加1,同时记录该队列标识对应的连接失败的供应商,并在首次记录该队列标识与该供应商连接失败的记录后,设置该条记录的有效时长,然后在有效时长倒计时结束后删除该条记录;否则,说明该队列是首次出现与供应商连接失败的情况,此时,记录该队列标识以及将该队列标识的容错数值设为1,同时记录该队列标识对应的连接失败的供应商,并在首次记录队列标识与供应商连接失败的记录的同时设置该条记录的有效时长,然后在有效时长倒计时结束后删除该条记录。

再次,执行模块14根据更新后的队列容错数据确定有效队列,具体包括:在更新的队列容错数据中查找与所述供应商连接失败的消息队列,并将该消息队列作为无效消息队列;将除去所述无效消息队列之后的剩余队列的队列标识与更新后的队列容错数据中的队列标识依次进行比对,如果比对失败,则确认该队列是容错数值为0的有效队列;如果比对成功,则将队列标识所对应的容错数值与预设容错阈值进行比较,然后将容错数值不大于预设容错阈值的消息队列作为有效队列;将所述有效队列按照容错数值升序排列,然后将排在第一位的队列作为所述重试任务消息存放的消息队列。

最后,执行模块将该重试任务放入确定的有效消息队列中。

根据本发明实施例的技术方案,由于采用了消息队列,能够实现多台服务器同时处理任务,不仅提高了任务的吞吐量,而且还解决单台服务器单任务串行处理的弊端;同时避免了定时扫描数据库的问题,提高了资源利用利用率;同时,在任务量增加,网络不稳定等因素导致任务处理失败率增高时,能够自动切换到不同机房所对应的消息队列,弥补了单机房的短板,不仅解决了单点问题,而且还提高了任务调度系统的容灾能力。

上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。

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