一种自适应延时消息数据处理方法、装置、介质及设备制造方法及图纸

技术编号:34768448 阅读:24 留言:0更新日期:2022-08-31 19:24
本发明专利技术提供一种自适应延时消息数据处理方法、装置、介质及设备。所述方法包括:S11、获取消息数据,将所述消息数据加入预写式日志中并通过调度服务判断所述消息数据的延时时间是否超过时间轮最大缓存时间,若是,则进入S12,若否,则进步S13;S12、筛选预写式日志中延时消息数据,构建延时日志文件与索引文件,将所述延时消息数据写入所述延时日志文件;S13、将所述延时消息数据按照延迟时间懒加载到时间轮;S14、将所述时间轮中到期的消息数据转发消费队列并接收消息数据发送结果;S15、根据所述消息数据发送结果进行数据处理:若发送成功,将所述消息数据及消息数据的索引写入调度日志;若发送失败,则在所述调度日志检索发送失败的消息数据并重新加载到所述时间轮中。本发明专利技术实现了实现了支持定义任意时延的业务需求和支持延迟消息宕机或超时重试的场景,解决了现有问题中延时消息的排序和存储问题。了现有问题中延时消息的排序和存储问题。了现有问题中延时消息的排序和存储问题。

【技术实现步骤摘要】
一种自适应延时消息数据处理方法、装置、介质及设备


[0001]本专利技术涉及智能支付领域,特别是涉及一种自适应延时消息数据处理方法、装置、介质及设备。

技术介绍

[0002]目前市场上大多数应用程序或软件系统都有消息延迟处理的业务需求,如电商系统,用户秒杀下单,以及用户下单之后,规定时间未支付则自动关闭;工程作业任务提醒、更改提醒时间、取消提醒等。而常见的方案有以下几种:
[0003]第一,采用定时扫描DB的方式,间隔一定的时间扫描任务数据,数据量过大的的情况下,DB开销大,如果扫描频率过高(间隔时间短),会造成无效数据扫描过多,浪费资源;扫描频率太低延时准确度无法保证,如果单个任务执行时间过长,还会造成任务积压,影响下一次任务的执行。
[0004]第二,使用java自带的延迟队列DelayQueue,需要加入队列对象实现Delayed接口,重写getDelay()方法和compareTo()方法。但缺陷也很明显,比如仅支持单机、不能持久化、宕机任务丢失等问题。
[0005]第三,利用redis有一种有序集合(Sorted Set)的数据结构,在有序集合中,所有元素是按照其Score进行排序的。把消息被消费的预期时间戳作为Score,定时任务不断读取Score大于当前时间的元素,但其瓶颈在于单个有序集合无法支持太大的数据量。
[0006]第四,通过在消息中间件中建立死信队列,在遇到业务需求变动时,超时时间配置在队列维度,同一业务的延时时长不一定相同,为每个延时时长建立一个死信队列,会出现大量的冗余队列,也很难动态扩展。RocketMQ也仅支持18个特定级别的延时,无法自定义延时时间。
[0007]以上几种方案在进行消息延时处理时都存在不足之处,所以目前针对以上问题对电商、家装工程类别消息延迟处理方式的一种解决方案。

技术实现思路

[0008]鉴于以上所述现有技术的缺点,本专利技术的目的在于提供一种自适应延时消息数据处理方法、装置、介质及设备,用于解决现有技术中的以上问题。
[0009]为实现上述目的及其他相关目的,本专利技术提供一种自适应延时消息数据处理方法,所述方法包括:S11、获取消息数据,将所述消息数据加入预写式日志中并通过调度服务判断所述消息数据的延时时间是否超过时间轮最大缓存时间,若是,则进入S12,若否,则进步S13;S12、筛选预写式日志中延时消息数据,构建延时日志文件与索引文件,将所述延时消息数据写入所述延时日志文件;S13、将所述延时消息数据按照延迟时间懒加载到时间轮;S14、将所述时间轮中到期的消息数据转发消费队列并接收消息数据发送结果;S15、根据所述消息数据发送结果进行数据处理:若发送成功,将所述消息数据及消息数据的索引写入调度日志;若发送失败,则在所述调度日志检索发送失败的消息数据并重新加载到所
述时间轮中。
[0010]于本专利技术一实施例中,所述方法还包括:按照所述消息数据延时时间,以链表的形式构建一组延时日志文件,并根据所述延时日志文件构建与所述延时日志文件一一对应的索引文件,其中,所述延时日志文件时间跨度相同,所述索引文件记录索引包括所述延时消息数据在所述延时日志文件中的偏移量、size和时间戳;通过调度服务复制预写式日志中的延时消息数据并写入所述延时日志文件。
[0011]于本专利技术一实施例中,所述方法还包括:所述延时日志文件时间跨度=所述延时消息数据最大延迟时间/单个文件的延迟时间。其中,所述延时消息数据最大延迟时间指区间时间内延时消息数据的最大的延迟时间,单个文件的延迟时间指单位刻度的延迟时间。
[0012]于本专利技术一实施例中,所述方法还包括:计算所述延时消息数据的截止发送时间deadline,所述截止发送时间deadline=当前时间+消息延时时间

时间轮启动时时间;计算所述延时消息数据在所述时间轮中位置,所述延时消息数据在所述时间轮中位置为:对截止发送时间deadline%时间轮长度wheelLength进行hash取模;将所述延时消息数据以链表的方式存储在所述时间轮对应位置的槽位上,其中,所述链表结构为闭环双向链表。
[0013]于本专利技术一实施例中,所述方法中还包括:计算第一延时消息数据与第二延时消息数据之间延时时间差是否为所述时间轮wheelLength*时间轮刻度tickDuration,通过所述时间差判断所述第一延时消息数据与所述第二延时消息数据在所述时间轮中位置是否冲突,若冲突,则创建第二时间轮,将所述第二延时消息数据懒加载进第二时间轮中,其中所述第二时间轮时间轮刻度tickDuration为第一时间轮刻度tickDuration的六十分之一。
[0014]于本专利技术一实施例中,所述方法还包括:在时间轮指针tick扫描到所述时间轮链表节点时,若所述节点无数据则不作处理,若所述节点存在延时消息数据则通过所述索引取出所述延时消息数据并发送到consumer可见的消费队列;在所述延时消息数据发送成功后将该所述延时消息数据及所述索引记入调度日志。
[0015]于本专利技术一实施例中,所述方法还包括在收到所述延时消息数据发送到消费队列失败消息后:通过所述调度日志中检索发送失败的延时消息数据;按照所述时间轮指针指向槽位下标currentIndex+预设时间preTime/时间轮刻度tickDuration的位置重新插入到所述时间轮链表中。
[0016]为实现上述目的及其他相关目的,本专利技术提供自适应延时消息数据处理装置,所述系统包括:消息接收模块,用于获取消息数据,将所述消息数据加入预写式日志中,写入成功后给发送所述延时消息数据的终端对象发送ack应答消息;消息存储模块,用于构建延时日志文件与索引文件,将所述延时消息数据写入所述延时日志文件;消息调度模块,用于判断所述消息数据的延时时间是否超过时间轮最大缓存时间以及筛选预写式日志中延时消息数据并将所述延时消息数据按照延迟时间懒加载到时间轮;消息转发模块,用于将所述时间轮中到期的消息数据转发消费队列并接收消息数据发送结果;消息异常处理模块,用于根据所述消息数据发送结果进行数据处理:若发送成功,将所述消息数据及消息数据的索引写入调度日志;若发送失败,则在所述调度日志检索发送失败的消息数据并重新加载到所述时间轮中。
[0017]为实现上述目的及其他相关目的,本专利技术提供一种计算机可读存储介质,其中存储有计算机程序,所述计算机程序被处理器加载执行时,实现所述的自适应延时消息数据
处理方法。
[0018]为实现上述目的及其他相关目的,本专利技术提供一种电子设备,包括:处理器、存储器及通信接口;其中,所述存储器用于存储计算机程序;所述处理器用于加载执行所述计算机程序,以使所述电子设备执行所述的自适应延时消息数据处理方法;所述通信接口用于实现访问装置与其他设备之间的通信。
[0019]如上所述,本专利技术提供的一种自适应延时消息数据处理方法、装置、介质及设备,针对现有的几种消息延迟处理方案存在的资源浪费、服务器宕机任务丢失、无法自本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种自适应延时消息数据处理方法,其特征在于,包括:S11、获取消息数据,将所述消息数据加入预写式日志中并通过调度服务判断所述消息数据的延时时间是否超过时间轮最大缓存时间,若是,则进入S12,若否,则进步S13;S12、筛选预写式日志中延时消息数据,构建延时日志文件与索引文件,将所述延时消息数据写入所述延时日志文件;S13、将所述延时消息数据按照延迟时间懒加载到时间轮;S14、将所述时间轮中到期的消息数据转发消费队列并接收消息数据发送结果;S15、根据所述消息数据发送结果进行数据处理:若发送成功,将所述消息数据及消息数据的索引写入调度日志;若发送失败,则在所述调度日志检索发送失败的消息数据并重新加载到所述时间轮中。2.根据权利要求1所述的方法,其特征在于,还包括:按照所述消息数据延时时间,以链表的形式构建一组延时日志文件,并根据所述延时日志文件构建与所述延时日志文件一一对应的索引文件,其中,所述延时日志文件时间跨度相同,所述索引文件记录索引包括所述延时消息数据在所述延时日志文件中的偏移量、size和时间戳;通过调度服务复制预写式日志中的延时消息数据并写入所述延时日志文件。3.根据权利要求2所述的方法,其特征在于,还包括:所述延时日志文件时间跨度=所述延时消息数据最大延迟时间/单个文件的延迟时间,其中,所述延时消息数据最大延迟时间指区间时间内延时消息数据的最大的延迟时间,单个文件的延迟时间指单位刻度的延迟时间。4.根据权利要求1所述的方法,其特征在于,还包括:计算所述延时消息数据的截止发送时间deadline,所述截止发送时间deadline=当前时间+消息延时时间

时间轮启动时时间;计算所述延时消息数据在所述时间轮中位置,所述延时消息数据在所述时间轮中位置为:对截止发送时间deadline%时间轮长度wheelLength进行hash取模;将所述延时消息数据以链表的方式存储在所述时间轮对应位置的槽位上,其中,所述链表结构为闭环双向链表。5.根据权利要求4所述的方法,其特征在于,还包括:计算第一延时消息数据与第二延时消息数据之间延时时间差是否为所述时间轮wheelLength*时间轮刻度tickDuration,通过所述时间差判断所述第一延时消息数据与所述第二延时消息数据在所...

【专利技术属性】
技术研发人员:张林刘汉中
申请(专利权)人:百安居信息技术上海有限公司
类型:发明
国别省市:

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

1