一种延时任务的执行方法、中心和系统技术方案

技术编号:26530729 阅读:23 留言:0更新日期:2020-12-01 14:10
本发明专利技术公开了一种延时任务的执行方法,其特征在于,包括以下步骤:步骤1:接收并存储任务,所述任务包含任务的延时时间、ID和消息体;步骤2:周期性的扫描任务,判断任务的延时时间是否小于预设时间,若是,则进行步骤3,若否,则重复步骤2;步骤3:将任务的ID按照延时时间存入循环周期为预设时间的时间轮中,将任务的消息体以及任务的ID存入数据库内;步骤4:读取时间轮中到期的格子中的任务的ID,并根据任务的ID去数据库调取消息体并发送给外界的业务系统。该发明专利技术还公开了一种延时任务处理中心和系统。本发明专利技术将任务予以拆分,分别由时间轮、Redis数据库处理消息的延时和消息体的提取,其在数据大并发时能够避免明显延时的情况出现。

【技术实现步骤摘要】
一种延时任务的执行方法、中心和系统
本申请涉及通信技术,特别是一种延时任务的执行方法、中心和系统。
技术介绍
Redis(RemoteDictionaryServer),即远程字典服务,是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。利用Redis数据库进行延时任务的处理主要利用redis的key过期通知的延时方案,实现方式是,新建延时任务时,将key和延时时间作为key的过期失效时间,当key失效时,系统监听获取key,再利用key去数据库查询具体延时任务内容,此方案存在以下问题:当redis宕机的时候,延时任务丢失;redis的key被消费之后不能再恢复;获取的key不是延时任务内容,任务内容需要从数据库查询,当数据处理量大的时候,查询时间会导致延时时间不准确。而另外一种解决方案是采用时间轮的方式去进行,但是采用时间轮的方式一般是将任务放到格子里面,如果任务数量多,时间轮的数据负荷非常大,导致时间轮崩溃或明显延时。本方案着重解决数据查询量大时,会有延时的问题。
技术实现思路
有鉴于此,本申请的目的在于:提供一种延时任务的执行方法,相较传统方法的延时监控、任务查询均在Redis数据库中进行而导致数据量大时出现延时的问题,本方法将任务予以拆分,分别由时间轮、Redis数据库处理消息的延时和消息体的提取,其在数据大并发时能够避免明显延时的情况出现。此外,本专利技术还提供了一种延时任务处理中心和系统。具体来说:一种延时任务的执行方法,包括以下步骤:步骤1:接收并存储任务,所述任务包含任务的延时时间、ID和消息体;步骤2:周期性的扫描任务,判断任务的延时时间是否小于预设时间,若是,则进行步骤3,若否,则重复步骤2;步骤3:将任务的ID按照延时时间存入循环周期为预设时间的时间轮中,将任务的消息体以及任务的ID存入关系型数据库如redis数据库内;步骤4:读取时间轮中到期的格子中的任务的ID,并根据任务的ID去redis数据库调取消息体并发送给外界的业务系统。在上述的延时任务的执行方法中,步骤1中,任务存储在mysql数据库中。当步骤4执行后,mysql数据库中的任务会标记为已经执行或已经完成。在上述的延时任务的执行方法中,所述预设时间为2h,所述时间轮中按照1秒/格子的速度转动。同时,本专利技术还提供了一种延时任务处理中心,包括如下模块:任务数据库:接收并存储来自于业务系统的任务,所述任务包含任务的延时时间和消息体;扫描模块:用于周期性的扫描任务数据库中的任务,判断任务的延时时间是否小于预设时间,并根据判断结果将延时时间、ID、消息体发送到时间轮、redis数据库中;时间轮:用于按照任务的延时时间存储任务的ID,并将到期的任务的ID提取出来发送至数据处理模块;Redis数据库:用于将任务的ID和消息体成对的存储;数据处理模块:用于根据时间轮发送的任务的ID,从redis数据库中提取与该任务的ID对应的消息体,并发送至外设的业务系统。在上述的延时任务处理中心中,所述任务数据库为mysql数据库。在上述的延时任务处理中心中,所述预设时间为2h,所述时间轮中按照1秒/格子的速度转动。在上述的延时任务处理中心中,所述延时时间、ID、消息体同广播的形式发送到时间轮、redis数据库中。延时任务处理中心支持分布式,也就是一个系统多个实例,每个实例都有定时任务,定时任务会把延时任务内容加载到时间轮里面,由于多个时间轮就会给业务系统发送多次,从而导致数据问题,所以使用分布式锁,只有其中获取到锁的实例,才能将定时任务的延时任务内容加载到时间轮,由于无法知道哪个实例有分布式锁,所以采用广播的方式发送。最后,本专利技术还提供了一种延时任务处理系统,包括业务系统和延时任务处理中心,其特征在于,所述延时任务处理中心如上任一所述;所述业务系统用于将任务发送到任务数据库,并接收来自于数据处理模块的消息体。本专利技术的有益效果在于:相较传统方法的延时监控、任务查询均在Redis数据库中进行而导致数据量大时出现延时的问题,本方法将任务予以拆分,分别由时间轮、Redis数据库处理消息的延时和消息体的提取,其在数据大并发时能够避免明显延时的情况出现。附图说明为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图做一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是根据本申请实施例1提供的方法的流程图;图2是根据本申请实施例1提供的方法的流程图;图3是根据本申请实施例2提供的系统的结构图。具体实施方式为使本申请的目的、技术方案和优点更加清楚,以下将参照本申请实施例中的附图,通过实施方式清楚、完整地描述本申请的技术方案,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。参照图1和2,本实施例公开了一种延时任务的执行方法,包括以下步骤:步骤1:接收并存储任务,所述任务包含任务的延时时间、ID和消息体;任务存储在mysql数据库中;该任务由外设的业务系统发送过来。本实施例的应用场景作为例举可以为:订单是否支付的任务,定期发送消息的任务等等。步骤2:周期性的扫描mysql数据库中存储的任务,比如5min为单次扫描间隔,判断任务的延时时间是否小于2h,若是,则进行步骤3,若否,则重复步骤2;步骤3:通过广播的形式发送包含任务ID和延时时间的消息和包含ID和消息体的消息,对应的实例接收到对应的消息后会将任务的ID按照延时时间存入循环周期为预设时间的时间轮中和将任务的消息体以及任务的ID存入redis数据库内;时间轮的循环周期为2h,每个时间轮中有若干格子,1s中行走一格。当然根据实际需要不仅仅限于2h,可以为1h,30min等,格子可以2s走一格也是可以的。步骤4:读取时间轮中到期的格子中的任务的ID,并根据任务的ID去redis数据库调取消息体,redis数据库中的ID(即Key)被消费后,就不能再恢复了。通过本专利技术的方法,将任务拆分为ID和消息体,ID通过时间轮进行定时读取,消息体通过redis数据库保存和读取,即使在大并发的情况下,其也不会出现明显的时延。在本专利技术的方法中,任务存储在mysql数据库中,其可以在重启后重新自动扫描存储的任务。通过该改进,可以解决现有技术中重启后延时任务丢失的问题。实施例2参考图3,一种延时任务处理系统,包括业务系统和延时任务处理中心;<本文档来自技高网...

【技术保护点】
1.一种延时任务的执行方法,其特征在于,包括以下步骤:/n步骤1:接收并存储任务,所述任务包含任务的延时时间、ID和消息体;/n步骤2:周期性的扫描任务,判断任务的延时时间是否小于预设时间,若是,则进行步骤3,若否,则重复步骤2;/n步骤3:将任务的ID按照延时时间存入循环周期为预设时间的时间轮中,将任务的消息体以及任务的ID存入数据库内;/n步骤4:读取时间轮中到期的格子中的任务的ID,并根据任务的ID去数据库调取消息体并发送给外界的业务系统。/n

【技术特征摘要】
1.一种延时任务的执行方法,其特征在于,包括以下步骤:
步骤1:接收并存储任务,所述任务包含任务的延时时间、ID和消息体;
步骤2:周期性的扫描任务,判断任务的延时时间是否小于预设时间,若是,则进行步骤3,若否,则重复步骤2;
步骤3:将任务的ID按照延时时间存入循环周期为预设时间的时间轮中,将任务的消息体以及任务的ID存入数据库内;
步骤4:读取时间轮中到期的格子中的任务的ID,并根据任务的ID去数据库调取消息体并发送给外界的业务系统。


2.根据权利要求1所述的延时任务的执行方法,其特征在于,步骤1中,任务存储在关系型数据库中。


3.根据权利要求1所述的延时任务的执行方法,其特征在于,所述预设时间为2h,所述时间轮中按照1秒/格子的速度转动。


4.一种延时任务处理中心,其特征在于,包括如下模块:
任务数据库:接收并存储来自于业务系统的任务,所述任务包含任务的延时时间和消息体;
扫描模块:用于周期性的扫描任务数据库中的任务,判断任务的延时时间是否小于预设时...

【专利技术属性】
技术研发人员:曾德祥何奎陶洋
申请(专利权)人:广州鲁邦通物联网科技有限公司
类型:发明
国别省市:广东;44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1