延时队列的实现方法、装置、计算机可读介质及电子设备制造方法及图纸

技术编号:39300240 阅读:7 留言:0更新日期:2023-11-12 15:51
本申请的实施例提供了一种延时队列的实现方法、装置、计算机可读介质及电子设备,该方法包括:在接收到客户端提交的延时任务的任务信息后,将任务标识信息和过期时间存入数据库中;对数据库扫描,以将数据库中到期的延时任务的任务标识信息放入就绪队列中;取出任务标识信息放入运行队列中,并将任务标识信息对应的任务信息投递给客户端,以便客户端对任务信息对应的延时任务进行处理;如果未从所述客户端接收到与任务信息对应的确认消息,则将运行队列中与任务信息对应的任务标识信息重新存入数据库中,以重新尝试处理延时任务。本申请实施例基于消息队列,可以防止延时消息丢失,保证了数据的可靠性。保证了数据的可靠性。保证了数据的可靠性。

【技术实现步骤摘要】
延时队列的实现方法、装置、计算机可读介质及电子设备


[0001]本申请涉及信息处理
,具体而言,涉及一种延时队列的实现方法、装置、计算机可读介质及电子设备。

技术介绍

[0002]延时队列,即具有延时功能的消息队列。随着互联网服务的快速发展,延时队列得到广泛的应用。
[0003]然而,现有的延时队列在投递延时消息时,可能发生数据丢失的情况,导致数据可靠性较差。

技术实现思路

[0004]本申请的实施例提供了一种延时队列的实现方法、装置、计算机可读介质及电子设备,至少在一定程度上能够防止延时消息丢失,保证数据的可靠性。
[0005]本申请的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本申请的实践而习得。
[0006]根据本申请实施例的一个方面,提供了一种延时队列的实现方法,所述方法包括:在接收到客户端提交的延时任务的任务信息后,将所述延时任务的任务标识信息和过期时间存入数据库中;对所述数据库扫描,以根据所述过期时间将所述数据库中到期的延时任务的任务标识信息放入就绪队列中;从所述就绪队列取出任务标识信息放入运行队列中,并将所述任务标识信息对应的任务信息投递给所述客户端,以便所述客户端对所述任务信息对应的延时任务进行处理;如果未从所述客户端接收到与所述任务信息对应的确认消息,则将所述运行队列中与所述任务信息对应的任务标识信息重新存入所述数据库中,以重新尝试处理所述任务信息对应的延时任务,其中,所述确认消息用于指示所述客户端处理完成了相应的延时任务。
[0007]根据本申请实施例的一个方面,提供了一种延时队列的实现装置,所述装置包括:保存单元,用于在接收到客户端提交的延时任务的任务信息后,将所述延时任务的任务标识信息和过期时间存入数据库中;扫描单元,用于对所述数据库扫描,以根据所述过期时间将所述数据库中到期的延时任务的任务标识信息放入就绪队列中;提取和投递单元,用于从所述就绪队列取出任务标识信息放入运行队列中,并将所述任务标识信息对应的任务信息投递给所述客户端,以便所述客户端对所述任务信息对应的延时任务进行处理;重试单元,用于如果未从所述客户端接收到与所述任务信息对应的确认消息,则将所述运行队列中与所述任务信息对应的任务标识信息重新存入所述数据库中,以重新尝试处理所述任务信息对应的延时任务,其中,所述确认消息用于指示所述客户端处理完成了相应的延时任务。
[0008]在本申请的一些实施例中,基于前述方案,所述重试单元配置为:根据当前时间确定新的过期时间,并将所述运行队列中与所述任务信息对应的任务标识信息和所述新的过
期时间重新存入所述数据库中,以便在达到所述新的过期时间之后仍未从所述客户端接收到与所述任务信息对应的确认消息时,重新从所述数据库中取出所述任务标识信息放入就绪队列中,以重新尝试处理所述任务信息对应的延时任务。
[0009]在本申请的一些实施例中,基于前述方案,所述重试单元配置为:如果未从所述客户端接收到与所述任务信息对应的确认消息且对所述任务信息的重试次数未达到预设次数阈值,则将所述运行队列中与所述任务信息对应的任务标识信息重新存入所述数据库中。
[0010]在本申请的一些实施例中,基于前述方案,在从所述就绪队列取出任务标识信息放入运行队列中之后,所述重试单元还用于:如果从所述客户端接收到了与所述任务信息对应的确认消息,则从所述运行队列中取出与所述任务信息对应的任务标识信息并丢弃;如果未从所述客户端接收到与所述任务信息对应的确认消息且对所述任务信息的重试次数达到预设次数阈值,则将所述任务标识信息放入死信队列中,所述死信队列用于存储重试次数达到预设次数阈值时客户端仍未反馈确认消息的延时任务的任务标识信息。
[0011]在本申请的一些实施例中,基于前述方案,所述保存单元配置为:将所述延时任务的任务标识信息和过期时间作为桶组中桶的桶元素存入数据库中,以通过所述数据库存储所述桶组,所述桶组包括多个桶。
[0012]在本申请的一些实施例中,基于前述方案,所述扫描单元配置为:通过每个桶对应的线程对所述桶组中相应的桶进行扫描,以根据所述过期时间将每个桶中到期的延时任务的任务标识信息放入就绪队列中。
[0013]在本申请的一些实施例中,基于前述方案,在将所述任务标识信息对应的任务信息投递给所述客户端之前,所述提取和投递单元还用于:接收客户端发起的长轮询请求,并将所述长轮询请求挂起;若在接收到所述长轮询请求之后预定时间段内确认所述就绪队列中没有任务标识信息,向所述客户端返回空结果,以便所述客户端在接收到所述空结果之后重新发起长轮询请求;所述提取和投递单元配置为:若在接收到所述长轮询请求之后预定时间段内确认所述就绪队列中存在任务标识信息,则将所述任务标识信息对应的任务信息投递给所述客户端。
[0014]在本申请的一些实施例中,基于前述方案,所述扫描单元配置为:根据所述过期时间将所述数据库中到期的延时任务的任务标识信息放入与所述延时任务的类型对应的就绪队列中;所述提取和投递单元配置为:从与所述延时任务的类型对应的就绪队列中取出任务标识信息放入与所述延时任务的类型对应的运行队列中。
[0015]在本申请的一些实施例中,基于前述方案,所述保存单元配置为:以所述延时任务的任务标识信息作为元素,以所述延时任务的过期时间作为与所述元素关联的分数,将所述元素和与所述元素关联的分数对应存储至数据库的有序集合中;所述扫描单元配置为:通过将所述数据库的有序集合中关联的分数在指定分数区间内的元素筛选出来,得到所述数据库中到期的延时任务的任务标识信息,并将所述任务标识信息放入就绪队列中。
[0016]根据本申请实施例的一个方面,提供了一种计算机可读介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上述实施例中所述的延时队列的实现方法。
[0017]根据本申请实施例的一个方面,提供了一种电子设备,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执
行时,使得所述一个或多个处理器实现如上述实施例中所述的延时队列的实现方法。
[0018]根据本申请实施例的一个方面,提供了一种计算机程序产品,所述计算机程序产品包括计算机指令,所述计算机指令存储在计算机可读存储介质中,计算机设备的处理器从所述计算机可读存储介质读取所述计算机指令,所述处理器执行所述计算机指令,使得所述计算机设备执行如上述实施例中所述的延时队列的实现方法。
[0019]在本申请的一些实施例所提供的技术方案中,在将任务标识信息对应的任务信息投递给客户端之后,在没有从客户端接收到与任务信息对应的确认消息情况下,即在客户端未正常处理完成相应的延时任务时,会将运行队列中与任务信息对应的任务标识信息重新存入数据库中,从而可以重新尝试处理该任务信息对应的延时任务,可以防止消息投递后因客户端宕机或处理失败导致的消息丢失情况的发生,保证了数据的可靠性。
[0020]应当理解的是,以上的一般描述和后文的细节本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种延时队列的实现方法,其特征在于,所述方法包括:在接收到客户端提交的延时任务的任务信息后,将所述延时任务的任务标识信息和过期时间存入数据库中;对所述数据库扫描,以根据所述过期时间将所述数据库中到期的延时任务的任务标识信息放入就绪队列中;从所述就绪队列取出任务标识信息放入运行队列中,并将所述任务标识信息对应的任务信息投递给所述客户端,以便所述客户端对所述任务信息对应的延时任务进行处理;如果未从所述客户端接收到与所述任务信息对应的确认消息,则将所述运行队列中与所述任务信息对应的任务标识信息重新存入所述数据库中,以重新尝试处理所述任务信息对应的延时任务,其中,所述确认消息用于指示所述客户端处理完成了相应的延时任务。2.根据权利要求1所述的延时队列的实现方法,其特征在于,所述将所述运行队列中与所述任务信息对应的任务标识信息重新存入所述数据库中,以重新尝试处理所述任务信息对应的延时任务,包括:根据当前时间确定新的过期时间,并将所述运行队列中与所述任务信息对应的任务标识信息和所述新的过期时间重新存入所述数据库中,以便在达到所述新的过期时间之后仍未从所述客户端接收到与所述任务信息对应的确认消息时,重新从所述数据库中取出所述任务标识信息放入就绪队列中,以重新尝试处理所述任务信息对应的延时任务。3.根据权利要求1所述的延时队列的实现方法,其特征在于,所述如果未从所述客户端接收到与所述任务信息对应的确认消息,则将所述运行队列中与所述任务信息对应的任务标识信息重新存入所述数据库中,包括:如果未从所述客户端接收到与所述任务信息对应的确认消息且对所述任务信息的重试次数未达到预设次数阈值,则将所述运行队列中与所述任务信息对应的任务标识信息重新存入所述数据库中。4.根据权利要求3所述的延时队列的实现方法,其特征在于,在从所述就绪队列取出任务标识信息放入运行队列中之后,所述方法还包括:如果从所述客户端接收到了与所述任务信息对应的确认消息,则从所述运行队列中取出与所述任务信息对应的任务标识信息并丢弃;如果未从所述客户端接收到与所述任务信息对应的确认消息且对所述任务信息的重试次数达到预设次数阈值,则将所述任务标识信息放入死信队列中,所述死信队列用于存储重试次数达到预设次数阈值时客户端仍未反馈确认消息的延时任务的任务标识信息。5.根据权利要求1所述的延时队列的实现方法,其特征在于,所述将所述延时任务的任务标识信息和过期时间存入数据库中,包括:将所述延时任务的任务标识信息和过期时间作为桶组中桶的桶元素存入数据库中,以通过所述数据库存储所述桶组,所述桶组包括多个桶。6.根据权利要求5所述的延时队列的实现方法,其特征在于,所述对所述数据库扫描,以根据所述过期时间将所述数据库中到期的延时任务的任务标识信息放入就绪队列中,包括:通过每个桶对应的线程对所述桶组中相应的桶进行扫描,以根据所述过期时间将每个桶中到期的延时任务的任务标识信息放入就绪队列中。
7.根据权利要求1所述的延时队列的实现方法,其特征在于,在将所述任务标识信息对应的任务信息投递给所述客户端之前,所述方法还包括:接收客户端发起的长轮询请求,并将所述长轮询请求挂起;若在接收到所述...

【专利技术属性】
技术研发人员:林炳东康进徐辉
申请(专利权)人:腾讯科技深圳有限公司
类型:发明
国别省市:

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

1