CN112104519B - 延迟消息的投递方法及装置、存储介质、计算机设备 - Google Patents

延迟消息的投递方法及装置、存储介质、计算机设备 Download PDF

Info

Publication number
CN112104519B
CN112104519B CN202010782224.8A CN202010782224A CN112104519B CN 112104519 B CN112104519 B CN 112104519B CN 202010782224 A CN202010782224 A CN 202010782224A CN 112104519 B CN112104519 B CN 112104519B
Authority
CN
China
Prior art keywords
message
delivered
delay
delayed
time
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202010782224.8A
Other languages
English (en)
Other versions
CN112104519A (zh
Inventor
田雪峰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Shuidi Technology Group Co ltd
Original Assignee
Beijing Absolute Health Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Absolute Health Ltd filed Critical Beijing Absolute Health Ltd
Priority to CN202010782224.8A priority Critical patent/CN112104519B/zh
Publication of CN112104519A publication Critical patent/CN112104519A/zh
Application granted granted Critical
Publication of CN112104519B publication Critical patent/CN112104519B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/50Queue scheduling
    • H04L47/56Queue scheduling implementing delay-aware scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/08Monitoring or testing based on specific metrics, e.g. QoS, energy consumption or environmental parameters
    • H04L43/0852Delays

Abstract

本申请公开了一种延迟消息的投递方法及装置、存储介质、计算机设备,该方法包括:通过延迟消息队列消费业务端产生的待投递延迟消息,其中,所述待投递延迟消息标记有投递时间以及消息类型;将所述延迟消息队列消费到的所述待投递延迟消息按照所述投递时间存储至所述延迟消息队列对应时间轮的第一槽位中;当所述时间轮的指针指向所述第一槽位时,将所述第一槽位中存储的所述待投递延迟消息按照所述消息类型进行分片,并发送分片后的待投递延迟消息。本申请将业务端产生的延迟消息存储在延迟消息队列对应的时间轮中,通过时间轮将到期的延迟消息实时投递到业务端的消费者处,在提升系统性能的同时,使得任意时间维度的延迟消息可以支持秒级投递。

Description

延迟消息的投递方法及装置、存储介质、计算机设备
技术领域
本申请涉及消息处理技术领域,尤其是涉及到一种延迟消息的投递方法及装置、存储介质、计算机设备。
背景技术
延迟消息是需要延迟处理的消息任务,大部分业务系统中均存在大量的延迟消息。例如,订单业务系统中,存在超时不付款则取消订单的消息任务。收货业务系统中,存在超时不收货则确认收货的消息任务;支付业务系统中,存在付款后预设时间内查询是否到账的消息任务。
目前,通常通过定时任务去扫描业务系统的数据库,批量抽取出一段时间内到期的延迟消息,进行业务处理。这种全局扫描方式造成数据库压力,把一段时间内到期的延迟消息积压到同一时间批量处理对业务系统也造成压力,并加大延迟消息的投递误差。因此,公开号为CN201911413874.9的现有技术公开了一种延迟消息处理方法,消息生产者将生产的消息存储到消息中间件中,监听并拉取消息中间件中的各延迟消息,并将拉取的消息写入内嵌数据库,轮询内嵌数据库中的各延迟消息,取出预设时间内到期的延迟消息,将取出的各延迟消息保存至内存时间轮,通过时间轮实现延迟消息实时投递。在该实现方法中,消息生产者生成的延迟消息先后分别存储于消息中间件、内嵌数据库、时间轮中,消息存储需要占用较多系统资源,且容易造成数据丢失,另外,延迟消息从时间轮中进行投递时如果时间轮的某个槽位中存储的数据较多,消息投递会花费较长时间,给业务端系统造成较大压力。
针对相关技术中存在的上述问题,目前尚未发现有效的解决方案。
发明内容
有鉴于此,本申请提供了一种延迟消息的投递方法及装置、存储介质、计算机设备,通过将业务端产生的延迟消息存储在延迟消息队列对应的时间轮中,通过时间轮将到期的延迟消息实时投递到业务端的消费者处,在提升系统性能的同时,使得任意时间维度的延迟消息可以支持秒级投递。
根据本申请的一个方面,提供了一种延迟消息的投递方法,其特征在于,包括:
通过延迟消息队列消费业务端产生的待投递延迟消息,其中,所述待投递延迟消息标记有投递时间以及消息类型;
将所述延迟消息队列消费到的所述待投递延迟消息按照所述投递时间存储至所述延迟消息队列对应时间轮的第一槽位中;
当所述时间轮的指针指向所述第一槽位时,将所述第一槽位中存储的所述待投递延迟消息按照所述消息类型进行分片,并发送分片后的待投递延迟消息。
具体地,所述通过延迟消息队列消费业务端产生的待投递延迟消息,具体包括:
所述延迟消息队列消费所述业务端主动投递的所述待投递延迟消息。
具体地,所述通过延迟消息队列消费业务端产生的待投递延迟消息,具体包括:
所述业务端将所述待投递延迟消息投递到实时消息队列;
所述延迟消息队列通过预设发送线程消费实时消息队列中的所述待投递延迟消息。
具体地,所述将所述延迟消息队列消费到的所述待投递延迟消息按照所述投递时间存储至所述延迟消息队列对应时间轮的第一槽位中,具体包括:
所述延迟消息队列将消费到的所述待投递延迟消息按照预设格式进行编码后存储到与所述投递时间对应的所述时间轮的第一槽位中,其中,所述时间轮的第一槽位中存储的待投递延迟消息至少包括所述待投递延迟消息对应的所述投递时间、所述消息类型以及完整性信息。
具体地,所述将所述第一槽位中存储的所述待投递延迟消息按照所述消息类型进行分片,并发送分片后的待投递延迟消息,具体包括:
获取所述第一槽位中存储的所述待投递延迟消息,并对获取的所述待投递延迟消息进行解码;
根据解码后得到的所述待投递延迟消息的完整性信息验证所述待投递延迟消息的完整性;
若所述待投递延迟消息通过完整性验证,则按照所述消息类型进行分片,并发送分片后的待投递延迟消息。
具体地,所述发送分片后的待投递延迟消息之后,所述方法还包括:
接收消息投递反馈,并在所述消息投递反馈为发送失败反馈时,确定所述待投递延迟消息是否为可重试投递消息;
若所述待投递延迟消息为可重试投递消息,则根据所述待投递延迟消息对应的第一槽位以及预设顺延槽位数量,确定所述待投递延迟消息对应的第二槽位并将所述待投递延迟消息存储在所述第二槽位中。
具体地,所述重新存储所述待投递延迟消息之后,所述方法还包括:
当所述时间轮的指针指向所述第二槽位时,重新发送所述待投递延迟消息;
若所述待投递延迟消息的发送次数大于或等于预设重试次数,则将所述待投递延迟消息保存到死信队列中,并输出报警提示信息,以基于所述死信队列中的所述待投递延迟消息进行数据修复。
根据本申请的另一方面,提供了一种延迟消息的投递装置,包括:
延迟队列消费模块,用于通过延迟消息队列消费业务端产生的待投递延迟消息,其中,所述待投递延迟消息标记有投递时间以及消息类型;
第一槽位存储模块,用于将所述延迟消息队列消费到的所述待投递延迟消息按照所述投递时间存储至所述延迟消息队列对应时间轮的第一槽位中;
第一消息投递模块,用于当所述时间轮的指针指向所述第一槽位时,将所述第一槽位中存储的所述待投递延迟消息按照所述消息类型进行分片,并发送分片后的待投递延迟消息。
具体地,所述延迟队列消费模块,具体包括:
第一消费单元,用于所述延迟消息队列消费所述业务端主动投递的所述待投递延迟消息。
具体地,所述延迟队列消费模块,具体包括:
实时队列投递单元,用于所述业务端将所述待投递延迟消息投递到实时消息队列;
第二消费单元,用于所述延迟消息队列通过预设发送线程消费实时消息队列中的所述待投递延迟消息。
具体地,所述第一槽位存储模块,具体用于:
所述延迟消息队列将消费到的所述待投递延迟消息按照预设格式进行编码后存储到与所述投递时间对应的所述时间轮的第一槽位中,其中,所述时间轮的第一槽位中存储的待投递延迟消息至少包括所述待投递延迟消息对应的所述投递时间、所述消息类型以及完整性信息。
具体地,所述第一消息投递模块,具体包括:
消息解码单元,用于获取所述第一槽位中存储的所述待投递延迟消息,并对获取的所述待投递延迟消息进行解码;
消息验证单元,用于根据解码后得到的所述待投递延迟消息的完整性信息验证所述待投递延迟消息的完整性;
消息投递单元,用于若所述待投递延迟消息通过完整性验证,则按照所述消息类型进行分片,并发送分片后的待投递延迟消息。
具体地,所述装置还包括:
投递反馈接收模块,用于发送分片后的待投递延迟消息之后,接收消息投递反馈,并在所述消息投递反馈为发送失败反馈时,确定所述待投递延迟消息是否为可重试投递消息;
第二槽位存储模块,用于若所述待投递延迟消息为可重试投递消息,则根据所述待投递延迟消息对应的第一槽位以及预设顺延槽位数量,确定所述待投递延迟消息对应的第二槽位并将所述待投递延迟消息存储在所述第二槽位中。
具体地,所述装置还包括:
第二消息投递模块,用于重新存储所述待投递延迟消息之后,当所述时间轮的指针指向所述第二槽位时,重新发送所述待投递延迟消息;
死信队列存储模块,用于若所述待投递延迟消息的发送次数大于或等于预设重试次数,则将所述待投递延迟消息保存到死信队列中,并输出报警提示信息,以基于所述死信队列中的所述待投递延迟消息进行数据修复。
依据本申请又一个方面,提供了一种存储介质,其上存储有计算机程序,所述程序被处理器执行时实现上述延迟消息的投递方法。
依据本申请再一个方面,提供了一种计算机设备,包括存储介质、处理器及存储在存储介质上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述延迟消息的投递方法。
借由上述技术方案,本申请提供的一种延迟消息的投递方法及装置、存储介质、计算机设备,利用延迟消息队列对业务端产生的任意时间维度的待投递延迟消息进行消费,从而将消费到的待投递延迟消息按照相应的业务需求时间即投递时间存储到时间轮的相应槽位中,并利用时间轮在相应的投递时间到来时,按照消息类型对相应槽位内存储的延迟消息进行分片后,批量投递分片后的延迟消息。本申请实施例通过将业务端产生的延迟消息存储在延迟消息队列对应的时间轮中,通过时间轮将到期的延迟消息实时投递到业务端的消费者处,在提升系统性能的同时,使得任意时间维度的延迟消息可以支持秒级投递,相比与现有技术的方案延迟消息只通过时间轮进行临时保存,占用系统资源较少、投递过程简单,并且在消息投递时采用先分配再投递的方式,可实现消息的批量投递,投递效率高,速度快。
上述说明仅是本申请技术方案的概述,为了能够更清楚了解本申请的技术手段,而可依照说明书的内容予以实施,并且为了让本申请的上述和其它目的、特征和优点能够更明显易懂,以下特举本申请的具体实施方式。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1示出了本申请实施例提供的一种延迟消息的投递方法的流程示意图;
图2示出了本申请实施例提供的另一种延迟消息的投递方法的流程示意图;
图3示出了本申请实施例提供的一种延迟消息的投递装置的结构示意图;
图4示出了本申请实施例提供的另一种延迟消息的投递装置的结构示意图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本申请。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
在本实施例中提供了一种延迟消息的投递方法,如图1所示,该方法包括:
步骤101,通过延迟消息队列消费业务端产生的待投递延迟消息,其中,待投递延迟消息标记有投递时间以及消息类型;
步骤102,将延迟消息队列消费到的待投递延迟消息按照投递时间存储至延迟消息队列对应时间轮的第一槽位中;
步骤103,当时间轮的指针指向第一槽位时,将第一槽位中存储的待投递延迟消息按照消息类型进行分片,并发送分片后的待投递延迟消息。
本申请实施例用于按照业务需求在特定的投递时间到来时将业务端产生的延迟消息投递出去。在具体的应用场景中,业务端可以在任意时间产生业务消息,该业务消息可以为延迟消息,业务端产生的每一条等待投递的延迟消息都有其对应的投递时间以及相应的消息类型,例如业务端在12:00产生一条预计在12:00:30发送的延迟消息,延迟消息队列可以对业务端产生的待投递延迟消息进行消费,并将消费到的待投递延迟消息存储在延迟消息对类对应的时间轮中,具体需要基于待投递延迟消息对应的投递时间选择将该延迟消息存储在时间轮的哪个槽位中,本申请实施例将待投递延迟消息第一次存储的时间轮槽位称作该待投递延迟消息对应的第一槽位。
需要说明的是,本申请实施例中的时间轮是一种高效的利用线程资源来进行批量化调度的一种调度模型。时间轮由多个时间格(即槽位)组成,每个时间格代表当前时间轮的基本时间跨度(tickDuration)。时间轮的时间格个数是固定的,可用wheel.length来表示。时间轮还有一个表盘指针(tick),用来表示时间轮当前指针跳动的次数,每个槽位对应存储有相应时间需要投递的延迟消息,指针通过偏移的方式跳到下一个槽位,以触达下一个槽位的数据投递,可以用tickDuration*(tick+1)来表示下一次到期的任务,指针指向tickDuration*(tick+1)时则需要处理此时间格所对应的所有任务。例如待投递延迟消息对应的投递时间为12:00:30,时间轮的基本时间跨度为1秒,指针每跳一帧相当于一秒,从而一秒一秒的触达每一个槽位的数据,假设指针A指向12:00:00,则将该延迟消息保存在指针A+30对应的槽位中,即指针指向12:00:30对应的时间轮槽位中。
将待投递延迟消息保存在时间轮中之后,就可以对时间轮中保存的消息进行消费以实现按业务设定的消息投递时间投递延迟消息。通过启动预设线程订阅时间轮中的延迟消息,具体的消息投递过程可以描述为:轮询该时间轮,如果当前时间轮的指针指向的时间大于自然时间,说明当前时间轮中没有消息需要投递,而如果当前时间轮的指针指向的时间小于或等于自然时间,即时间轮的指针指向第一槽位时,说明当前时间轮中存储的延迟消息到达了应该被投递的时间,则应将该槽位中存储的待投递延迟消息取出进行投递。另外,在具体的投递过程中,存储在同一个槽位中的延迟消息可以先基于具体的消息类型进行分片,然后将分片后的待投递延迟消息批量发送。通过将业务端产生的延迟消息存储在延迟消息队列对应的时间轮中,利用时间轮将到期的延迟消息按消息类型进行分片后实时投递到相应的消费端进行消费,提高了延迟消息的处理效率,极大的减轻了业务端的系统压力,在延迟消息处理过程中,通过时间轮的计时,轮询时间轮各槽位以取出到期的延迟消息并进行投递,使得延迟消息的投递误差在时间轮的基本时间跨度内(达到秒级)。
通过应用本实施例的技术方案,利用延迟消息队列对业务端产生的任意时间维度的待投递延迟消息进行消费,从而将消费到的待投递延迟消息按照相应的业务需求时间即投递时间存储到时间轮的相应槽位中,并利用时间轮在相应的投递时间到来时,按照消息类型对相应槽位内存储的延迟消息进行分片后,批量投递分片后的延迟消息。本申请实施例通过将业务端产生的延迟消息存储在延迟消息队列对应的时间轮中,利用时间轮将到期的延迟消息实时投递到业务端的消费者处,在提升系统性能的同时,使得任意时间维度的延迟消息可以支持秒级投递,相比与现有技术的方案延迟消息只通过时间轮进行临时保存,占用系统资源较少、投递过程简单,并且在消息投递时采用先分配再投递的方式,可实现消息的批量投递,投递效率高,速度快。
进一步的,作为上述实施例具体实施方式的细化和扩展,为了完整说明本实施例的具体实施过程,提供了另一种延迟消息的投递方法,如图2所示,该方法包括:
步骤201,通过延迟消息队列消费业务端产生的待投递延迟消息,其中,待投递延迟消息标记有投递时间以及消息类型;
针对步骤201,本申请实施例提供了两种具体实施方式:
方式一:
步骤201-A,延迟消息队列消费业务端主动投递的待投递延迟消息。
在上述实施方式中,业务端可以直接将延迟消息通过RPC(Remote ProcedureCall,远程过程调用)的方式发送到延迟消息队列中进行主动投递,以使延迟消息队列对业务端直接投递的延迟消息进行消费,进而对消费到的消息进行保存。
方式二:
步骤201-B-1,业务端将待投递延迟消息投递到实时消息队列;
步骤201-B-2,延迟消息队列通过预设发送线程消费实时消息队列中的待投递延迟消息。
在上述实施方式中,业务端可以先将产生的待投递延迟消息投递到高性能的实时消息队列指定的topic中,同时延迟消息队列启动指定的线程订阅该topic,从而通过延迟消息队列消费topic中的待投递延迟消息。
步骤202,延迟消息队列将消费到的待投递延迟消息按照预设格式进行编码后存储到与投递时间对应的时间轮的第一槽位中,其中,时间轮的第一槽位中存储的待投递延迟消息至少包括待投递延迟消息对应的投递时间、消息类型以及完整性信息。
在步骤202中,对于延迟消息队列消费到的待投递延迟消息,可以按照预设格式保存到指定的时间轮中,为了便于待投递延迟消息的存储以及对时间轮槽位中消息的消费,对消息进行编码后再进行存储,使得待投递延迟消息以例如二进制的形式存储,例如将待投递延迟消息保存为“投递时间戳-消息类型-完整性信息-消息内容”的格式并进行编码后存储,完整性信息具体可以为基于消息内容按照预设规则生成的与消息内容对应的唯一编码数据。
步骤203,当时间轮的指针指向第一槽位时,获取第一槽位中存储的待投递延迟消息,并对获取的待投递延迟消息进行解码;
步骤204,根据解码后得到的待投递延迟消息的完整性信息验证待投递延迟消息的完整性;
步骤205,若待投递延迟消息通过完整性验证,则按照消息类型进行分片,并发送分片后的待投递延迟消息;
在步骤203至步骤205中,当时间轮的指针指向第一槽位时,说明第一槽位中存储的延迟消息已到达投递时间,这时应先将到期的消息从第一槽位中取出,然后对取出的消息进行解码,使得待投递延迟消息变为消费者可读的格式,另外,为了确保时间轮中存储的消息的安全性,还可以基于解码后得到的完整性信息对待投递延迟消息进行完整性验证,例如在上文的描述中第一槽位中存储有编码后的完整性信息,在对第一槽位中存储的消息进行解码后,获取相应字段处的完整性信息,判断解码后的完整性信息是否与编码之前的完整性信息一致,即解码后的完整性信息是否与消息内容对应的唯一编码数据一致,若一致则该待投递延迟消息通过完整性验证,该消息安全,那么可以先对延迟消息进行消息类型分片后投递,而若不一致则说明消息存储有遗漏或者消息被篡改,可以报警请求重新投递该消息。
步骤206,接收消息投递反馈,并在消息投递反馈为发送失败反馈时,确定待投递延迟消息是否为可重试投递消息;
步骤207,若待投递延迟消息为可重试投递消息,则根据待投递延迟消息对应的第一槽位以及预设顺延槽位数量,确定待投递延迟消息对应的第二槽位并将待投递延迟消息存储在第二槽位中;
在步骤206和步骤207中,消费者消费到时间轮投递的消息后,会返回相应的消息投递反馈信息,如果消息投递反馈为发送失败反馈,那么可以根据具体的发送失败原因确定发送失败的延迟消息是否为可以重新发送的消息即可重试投递消息或者根据该消息的消息类型等特征确定是否可以重新发送,例如发送失败的原因为网络错误、发送超时等原因,可以确定相应的消息为可重试投递消息,这时可以基于该消息对应的第一槽位即该消息原本在时间轮中存储的槽位以及预设顺延槽位数量,将该消息存储的槽位向后顺延相应数量,存储在第二槽位中,以在指针指向第二槽位时重新投递。例如,待投递延迟消息对应的第一槽位为槽位1,预设顺延槽位数量为10,则在第一槽位中的某条消息发送失败且该消息可重试投递时,将该消息存储在第二槽位即槽位11中,等待时间轮的指针指向槽位11时重新投递该消息。另外,如果在预设时间内没有接收到消息投递反馈也可以将相应的延迟消息重新存储在第二槽位中以便重新投递,提高时间轮投递消息的容错性。
步骤208,当时间轮的指针指向第二槽位时,重新发送待投递延迟消息;
步骤209,若待投递延迟消息的发送次数大于或等于预设重试次数,则将待投递延迟消息保存到死信队列中,并输出报警提示信息,以基于死信队列中的待投递延迟消息进行数据修复。
在步骤208和步骤209中,当时间轮的指针指向第二槽位时,将第二槽位中存储的之前已经发送失败的消息与该槽位中的其他消息一起进行分片和批量发送,并将该条消息的发送次数记录下来,如果某条消息投递的次数达到预设的重试次数仍然没有投递成功,例如持续发送15次都失败,可以将这条消息保存在死信队列中,并进行报警以提醒用户对持续发送失败的消息进行处理,用户可以将死信队列中的延迟消息导出,从而对延迟消息进行修复后重新投递或者对延迟消息进行线下补偿。
进一步的,作为图1方法的具体实现,本申请实施例提供了一种延迟消息的投递装置,如图3所示,该装置包括:
延迟队列消费模块31,用于通过延迟消息队列消费业务端产生的待投递延迟消息,其中,待投递延迟消息标记有投递时间以及消息类型;
第一槽位存储模块32,用于将延迟消息队列消费到的待投递延迟消息按照投递时间存储至延迟消息队列对应时间轮的第一槽位中;
第一消息投递模块33,用于当时间轮的指针指向第一槽位时,将第一槽位中存储的待投递延迟消息按照消息类型进行分片,并发送分片后的待投递延迟消息。
在本申请任一实施例中,具体地,如图4所示,延迟队列消费模块31,具体包括:
第一消费单元311,用于延迟消息队列消费业务端主动投递的待投递延迟消息。
在本申请任一实施例中,具体地,如图4所示,延迟队列消费模块31,具体包括:
实时队列投递单元312,用于业务端将待投递延迟消息投递到实时消息队列;
第二消费单元313,用于延迟消息队列通过预设发送线程消费实时消息队列中的待投递延迟消息。
在本申请任一实施例中,具体地,第一槽位存储模块32,具体用于:延迟消息队列将消费到的待投递延迟消息按照预设格式进行编码后存储到与投递时间对应的时间轮的第一槽位中,其中,时间轮的第一槽位中存储的待投递延迟消息至少包括待投递延迟消息对应的投递时间、消息类型以及完整性信息。
在本申请任一实施例中,具体地,如图4所示,第一消息投递模块33,具体包括:
消息解码单元331,用于获取第一槽位中存储的待投递延迟消息,并对获取的待投递延迟消息进行解码;
消息验证单元332,用于根据解码后得到的待投递延迟消息的完整性信息验证待投递延迟消息的完整性;
消息投递单元333,用于若待投递延迟消息通过完整性验证,则按照消息类型进行分片,并发送分片后的待投递延迟消息。
在本申请任一实施例中,具体地,如图4所示,该装置还包括:
投递反馈接收模块34,用于发送分片后的待投递延迟消息之后,接收消息投递反馈,并在消息投递反馈为发送失败反馈时,确定待投递延迟消息是否为可重试投递消息;
第二槽位存储模块35,用于若待投递延迟消息为可重试投递消息,则根据待投递延迟消息对应的第一槽位以及预设顺延槽位数量,确定待投递延迟消息对应的第二槽位并将待投递延迟消息存储在第二槽位中。
在本申请任一实施例中,具体地,如图4所示,该装置还包括:
第二消息投递模块36,用于将待投递延迟消息存储在第二槽位中之后,当时间轮的指针指向第二槽位时,重新发送待投递延迟消息;
死信队列存储模块37,用于若待投递延迟消息的发送次数大于或等于预设重试次数,则将待投递延迟消息保存到死信队列中,并输出报警提示信息,以基于死信队列中的待投递延迟消息进行数据修复。
需要说明的是,本申请实施例提供的一种延迟消息的投递装置所涉及各功能单元的其他相应描述,可以参考图1和图2方法中的对应描述,在此不再赘述。
基于上述如图1和图2所示方法,相应的,本申请实施例还提供了一种存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述如图1和图2所示的延迟消息的投递方法。
基于这样的理解,本申请的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施场景所述的方法。
基于上述如图1、图2所示的方法,以及图3、图4所示的虚拟装置实施例,为了实现上述目的,本申请实施例还提供了一种计算机设备,具体可以为个人计算机、服务器、网络设备等,该计算机设备包括存储介质和处理器;存储介质,用于存储计算机程序;处理器,用于执行计算机程序以实现上述如图1和图2所示的延迟消息的投递方法。
可选地,该计算机设备还可以包括用户接口、网络接口、摄像头、射频(RadioFrequency,RF)电路,传感器、音频电路、WI-FI模块等等。用户接口可以包括显示屏(Display)、输入单元比如键盘(Keyboard)等,可选用户接口还可以包括USB接口、读卡器接口等。网络接口可选的可以包括标准的有线接口、无线接口(如蓝牙接口、WI-FI接口)等。
本领域技术人员可以理解,本实施例提供的一种计算机设备结构并不构成对该计算机设备的限定,可以包括更多或更少的部件,或者组合某些部件,或者不同的部件布置。
存储介质中还可以包括操作系统、网络通信模块。操作系统是管理和保存计算机设备硬件和软件资源的程序,支持信息处理程序以及其它软件和/或程序的运行。网络通信模块用于实现存储介质内部各组件之间的通信,以及与该实体设备中其它硬件和软件之间通信。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本申请可以借助软件加必要的通用硬件平台的方式来实现,也可以通过硬件实现利用延迟消息队列对业务端产生的任意时间维度的待投递延迟消息进行消费,从而将消费到的待投递延迟消息按照相应的业务需求时间即投递时间存储到时间轮的相应槽位中,并利用时间轮在相应的投递时间到来时,按照消息类型对相应槽位内存储的延迟消息进行分片后,批量投递分片后的延迟消息。本申请实施例通过将业务端产生的延迟消息存储在延迟消息队列对应的时间轮中,通过时间轮将到期的延迟消息实时投递到业务端的消费者处,在提升系统性能的同时,使得任意时间维度的延迟消息可以支持秒级投递,相比与现有技术的方案延迟消息只通过时间轮进行临时保存,占用系统资源较少、投递过程简单,并且在消息投递时采用先分配再投递的方式,可实现消息的批量投递,投递效率高,速度快。
本领域技术人员可以理解附图只是一个优选实施场景的示意图,附图中的模块或流程并不一定是实施本申请所必须的。本领域技术人员可以理解实施场景中的装置中的模块可以按照实施场景描述进行分布于实施场景的装置中,也可以进行相应变化位于不同于本实施场景的一个或多个装置中。上述实施场景的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
上述本申请序号仅仅为了描述,不代表实施场景的优劣。以上公开的仅为本申请的几个具体实施场景,但是,本申请并非局限于此,任何本领域的技术人员能思之的变化都应落入本申请的保护范围。

Claims (10)

1.一种延迟消息的投递方法,其特征在于,包括:
通过延迟消息队列消费业务端产生的且以远程过程调用的方式主动投递的待投递延迟消息,其中,所述待投递延迟消息标记有投递时间以及消息类型;
将所述延迟消息队列消费到的所述待投递延迟消息按照所述投递时间存储至所述延迟消息队列对应时间轮的第一槽位中,其中,所述时间轮是一种高效的利用线程资源来进行批量化调度的一种调度模型,由多个时间格组成;
当所述时间轮的指针指向所述第一槽位时,将所述第一槽位中存储的所述待投递延迟消息按照所述消息类型进行分片,并发送分片后的待投递延迟消息。
2.根据权利要求1所述的方法,其特征在于,所述通过延迟消息队列消费业务端产生的待投递延迟消息,具体包括:
所述延迟消息队列消费所述业务端主动投递的所述待投递延迟消息。
3.根据权利要求1所述的方法,其特征在于,所述通过延迟消息队列消费业务端产生的待投递延迟消息,具体包括:
所述业务端将所述待投递延迟消息投递到实时消息队列;
所述延迟消息队列通过预设发送线程消费实时消息队列中的所述待投递延迟消息。
4.根据权利要求2或3所述的方法,其特征在于,所述将所述延迟消息队列消费到的所述待投递延迟消息按照所述投递时间存储至所述延迟消息队列对应时间轮的第一槽位中,具体包括:
所述延迟消息队列将消费到的所述待投递延迟消息按照预设格式进行编码后存储到与所述投递时间对应的所述时间轮的第一槽位中,其中,所述时间轮的第一槽位中存储的待投递延迟消息至少包括所述待投递延迟消息对应的所述投递时间、所述消息类型以及完整性信息。
5.根据权利要求4所述的方法,其特征在于,所述将所述第一槽位中存储的所述待投递延迟消息按照所述消息类型进行分片,并发送分片后的待投递延迟消息,具体包括:
获取所述第一槽位中存储的所述待投递延迟消息,并对获取的所述待投递延迟消息进行解码;
根据解码后得到的所述待投递延迟消息的完整性信息验证所述待投递延迟消息的完整性;
若所述待投递延迟消息通过完整性验证,则按照所述消息类型进行分片,并发送分片后的待投递延迟消息。
6.根据权利要求1所述的方法,其特征在于,所述发送分片后的待投递延迟消息之后,所述方法还包括:
接收消息投递反馈,并在所述消息投递反馈为发送失败反馈时,确定所述待投递延迟消息是否为可重试投递消息;
若所述待投递延迟消息为可重试投递消息,则根据所述待投递延迟消息对应的第一槽位以及预设顺延槽位数量,确定所述待投递延迟消息对应的第二槽位并将所述待投递延迟消息存储在所述第二槽位中。
7.根据权利要求6所述的方法,其特征在于,所述将所述待投递延迟消息存储在所述第二槽位中之后,所述方法还包括:
当所述时间轮的指针指向所述第二槽位时,重新发送所述待投递延迟消息;
若所述待投递延迟消息的发送次数大于或等于预设重试次数,则将所述待投递延迟消息保存到死信队列中,并输出报警提示信息,以基于所述死信队列中的所述待投递延迟消息进行数据修复。
8.一种延迟消息的投递装置,其特征在于,包括:
延迟队列消费模块,用于通过延迟消息队列消费业务端产生的且以远程过程调用的方式主动投递的待投递延迟消息,其中,所述待投递延迟消息标记有投递时间以及消息类型;
第一槽位存储模块,用于将所述延迟消息队列消费到的所述待投递延迟消息按照所述投递时间存储至所述延迟消息队列对应时间轮的第一槽位中,其中,所述时间轮是一种高效的利用线程资源来进行批量化调度的一种调度模型,由多个时间格组成;
第一消息投递模块,用于当所述时间轮的指针指向所述第一槽位时,将所述第一槽位中存储的所述待投递延迟消息按照所述消息类型进行分片,并发送分片后的待投递延迟消息。
9.一种存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的延迟消息的投递方法。
10.一种计算机设备,包括存储介质、处理器及存储在存储介质上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7中任一项所述的延迟消息的投递方法。
CN202010782224.8A 2020-08-06 2020-08-06 延迟消息的投递方法及装置、存储介质、计算机设备 Active CN112104519B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010782224.8A CN112104519B (zh) 2020-08-06 2020-08-06 延迟消息的投递方法及装置、存储介质、计算机设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010782224.8A CN112104519B (zh) 2020-08-06 2020-08-06 延迟消息的投递方法及装置、存储介质、计算机设备

Publications (2)

Publication Number Publication Date
CN112104519A CN112104519A (zh) 2020-12-18
CN112104519B true CN112104519B (zh) 2022-07-19

Family

ID=73750260

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010782224.8A Active CN112104519B (zh) 2020-08-06 2020-08-06 延迟消息的投递方法及装置、存储介质、计算机设备

Country Status (1)

Country Link
CN (1) CN112104519B (zh)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112925642A (zh) * 2021-02-25 2021-06-08 百果园技术(新加坡)有限公司 一种延迟消息处理方法、装置、设备及存储介质
CN112905359A (zh) * 2021-03-05 2021-06-04 上海中通吉网络技术有限公司 基于延迟时间的分布式消息处理方法、装置和系统
CN112882812A (zh) * 2021-03-16 2021-06-01 北京字节跳动网络技术有限公司 延时任务调度与存储方法、装置、设备、介质及系统
CN113037450A (zh) * 2021-03-17 2021-06-25 杭州遥望网络科技有限公司 一种延迟消息处理方法、装置、设备及可读存储介质
CN113282426A (zh) * 2021-04-27 2021-08-20 北京皮尔布莱尼软件有限公司 一种消息处理系统、方法及计算设备
CN113590708B (zh) * 2021-06-17 2024-02-20 贝壳找房(北京)科技有限公司 自适应延迟消费方法、程序产品及存储介质
CN113326074B (zh) * 2021-06-30 2022-04-15 中国平安人寿保险股份有限公司 延时事件处理方法、装置、计算机设备和存储介质
CN113568976A (zh) * 2021-07-28 2021-10-29 瑞幸咖啡信息技术(厦门)有限公司 一种延迟消息的处理系统、方法、设备和存储介质
CN114238309A (zh) * 2021-10-26 2022-03-25 浙江菜鸟供应链管理有限公司 物流单履约检测方法和延迟任务处理方法
CN115022263A (zh) * 2022-06-02 2022-09-06 政采云有限公司 一种延时消息的投递方法、装置、设备及存储介质
CN115098889B (zh) * 2022-08-24 2023-01-06 广州市千钧网络科技有限公司 一种权限管理的方法、装置、设备及存储介质
CN115328680B (zh) * 2022-09-28 2023-01-31 天津卓朗昆仑云软件技术有限公司 消息队列消费异常的辅助方法、装置和电子设备
CN116155849A (zh) * 2022-12-28 2023-05-23 中国联合网络通信集团有限公司 一种消息投递方法、装置、电子设备及存储介质
CN117081853B (zh) * 2023-10-12 2024-02-13 南方电网数字电网研究院股份有限公司 具备时间轮动态认证的新能源边缘侧通信规约转换模块
CN117316227B (zh) * 2023-11-28 2024-03-12 浙江力积存储科技有限公司 读取等待时间延时反馈电路、反馈方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7277448B1 (en) * 2003-06-27 2007-10-02 Cisco Technology, Inc. Hierarchical scheduler inter-layer eligibility deferral
CN109726024A (zh) * 2018-12-28 2019-05-07 北京爱奇艺科技有限公司 一种消息延时投递方法、装置及设备

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105700961B (zh) * 2016-02-29 2019-03-08 华为技术有限公司 业务容器创建方法及装置
CN107391271B (zh) * 2017-05-17 2020-10-20 创新先进技术有限公司 一种基于消息队列系统的延时任务触发方法和装置
CN107634993B (zh) * 2017-09-05 2019-08-13 腾讯科技(深圳)有限公司 一种信息推送事件处理方法、装置及电子设备
CN109710394A (zh) * 2018-12-27 2019-05-03 出门问问信息科技有限公司 定时任务处理系统及方法
CN110427551B (zh) * 2019-07-01 2022-11-11 五八有限公司 信息推送方法、装置、电子设备和计算机可读介质
CN110719318B (zh) * 2019-09-06 2022-06-21 未鲲(上海)科技服务有限公司 消息处理方法和系统
CN110636130B (zh) * 2019-09-23 2022-10-04 上海钧正网络科技有限公司 延时消息处理方法、装置、计算机设备和存储介质
CN111124653A (zh) * 2019-12-31 2020-05-08 江苏满运软件科技有限公司 延迟消息处理方法、系统、设备和存储介质

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7277448B1 (en) * 2003-06-27 2007-10-02 Cisco Technology, Inc. Hierarchical scheduler inter-layer eligibility deferral
CN109726024A (zh) * 2018-12-28 2019-05-07 北京爱奇艺科技有限公司 一种消息延时投递方法、装置及设备

Also Published As

Publication number Publication date
CN112104519A (zh) 2020-12-18

Similar Documents

Publication Publication Date Title
CN112104519B (zh) 延迟消息的投递方法及装置、存储介质、计算机设备
CN111124653A (zh) 延迟消息处理方法、系统、设备和存储介质
CN109474688B (zh) 即时通信网络请求消息的发送方法、装置、设备和介质
CN112328418B (zh) 一种提升mq同步可靠性的方法和系统
CN108737218B (zh) 一种消息推送到达率的自动校验方法及装置
CN111835467B (zh) 消息发送方法、装置、计算机设备和存储介质
CN111831748B (zh) 数据同步方法、装置及存储介质
CN111784329B (zh) 业务数据的处理方法和装置、存储介质、电子装置
CN111367688A (zh) 一种业务数据的处理方法和装置
CN112286723A (zh) 机房容灾控制方法、终端及存储介质
JP6132021B2 (ja) 配信制御装置及びその方法、プッシュ配信システム、並びにコンピュータ・プログラム
CN110889765B (zh) 交易信息报送方法及装置
CN109905459B (zh) 一种数据传输方法及装置
CN112333262A (zh) 数据更新提示方法、装置、计算机设备及可读存储介质
CN110247808B (zh) 信息发送方法、装置、设备及可读存储介质
CN113098978B (zh) 一种数据传输方法、装置及介质
CN113452603A (zh) 一种数据传输方法及相关装置
CN112131180A (zh) 数据上报方法、装置以及存储介质
CN110798398A (zh) 群组消息管理方法、装置、设备和介质
CN110955398A (zh) 一种二维码显示方法、装置、计算机设备及存储介质
CN112434241A (zh) 业务处理方法、计算机设备及存储介质
US11968253B2 (en) Request delivery device, request delivery method, and request delivery program
CN111917633B (zh) 消息发送方法、发送装置、电子设备及存储介质
CN108513150A (zh) 一种用于直播平台的直播系统
CN103685141A (zh) 一种推送业务的实现方法和设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CP03 Change of name, title or address

Address after: 100102 201 / F, block C, 2 lizezhong 2nd Road, Chaoyang District, Beijing

Patentee after: Beijing Shuidi Technology Group Co.,Ltd.

Address before: 100102 201, 2 / F, block C, No.2 lizezhong 2nd Road, Chaoyang District, Beijing

Patentee before: Beijing Health Home Technology Co.,Ltd.

CP03 Change of name, title or address