一种延迟消息处理方法、装置、设备及可读存储介质
文献发布时间:2023-06-19 11:35:49
技术领域
本申请涉及延迟消息处理技术领域,更具体地说,涉及一种延迟消息处理方法、装置、设备及计算机可读存储介质。
背景技术
为了更好地管理用户,公众号会根据用户的相关行为进行延迟消息的响应。具体地,当用户和公众号进行交互时,后台会在时间达到所设置的延迟时间后将对应的延迟消息发送给用户,以吸引用户注意,和用户进行交互。
目前,在对延迟消息进行处理时,一般是采用定时轮询的方式来查询所存储的延迟消息,并在轮询到延迟消息达到对应的发送时间时进行延迟消息的发送,但是,由于定时轮询本身就是时间延迟,因此,则会增加延迟消息的延迟时间,且大量的延迟消息会导致轮询所花费的时间比较长,因此,会导致其无法及时查询到待发送的延迟消息,且可能会出现漏发延迟消息的情况。
综上所述,如何及时、准确地进行延迟消息的发送,是目前本领域技术人员亟待解决的技术问题。
发明内容
有鉴于此,本申请的目的是提供一种延迟消息处理方法、装置、设备及计算机可读存储介质,用于及时、准确地进行延迟消息的发送。
为了实现上述目的,本申请提供如下技术方案:
一种延迟消息处理方法,包括:
将未来预设时间段划分为多个时间窗口,并生成与每个所述时间窗口对应的标识;
获取接收交互指令的时间、所述交互指令对应的延迟消息、所述延迟消息对应的延迟时间,根据接收所述交互指令的时间及所述延迟时间,计算所述延迟消息的待发送时间;
根据所述待发送时间确定所述延迟消息归属的目标时间窗口,并对所述目标时间窗口的标识及所述延迟消息进行存储;
获取当前时间归属的时间窗口对应的标识,根据所述当前时间归属的时间窗口对应的标识获取当前待发送延迟消息,并将所述当前待发送延迟消息推送给对应的用户。
优选的,还包括:
每失效一个所述时间窗口,则释放失效的时间窗口,并在最后一个所述时间窗口前扩展一个时间窗口。
优选的,根据所述待发送时间确定所述延迟消息归属的目标时间窗口,包括:
判断所述待发送时间是否位于当前已划分出的所述时间窗口中;
若是,则根据所述待发送时间,确定所述延迟消息在当前已划分出的所述时间窗口中归属的目标时间窗口;
若否,则对所述延迟消息进行缓存,并每间隔预设时间间隔执行所述判断所述待发送时间是否位于当前已划分出的所述时间窗口中的步骤。
优选的,生成与每个所述时间窗口对应的标识,包括:
生成与每个所述时间窗口对应且包含所述时间窗口的时间信息的标识。
一种延迟消息处理装置,包括:
划分模块,用于将未来预设时间段划分为多个时间窗口,并生成与每个所述时间窗口对应的标识;
计算模块,用于获取接收交互指令的时间、所述交互指令对应的延迟消息、所述延迟消息对应的延迟时间,根据接收所述交互指令的时间及所述延迟时间,计算所述延迟消息的待发送时间;
确定模块,用于根据所述待发送时间确定所述延迟消息归属的目标时间窗口,并对所述目标时间窗口的标识及所述延迟消息进行存储;
推送模块,用于获取当前时间归属的时间窗口对应的标识,根据所述当前时间归属的时间窗口对应的标识获取当前待发送延迟消息,并将所述当前待发送延迟消息推送给对应的用户。
优选的,还包括:
扩展模块,用于每失效一个所述时间窗口,则释放失效的时间窗口,并在最后一个所述时间窗口前扩展一个时间窗口。
优选的,所述确定模块包括:
判断单元,用于判断所述待发送时间是否位于当前已划分出的所述时间窗口中;
执行单元,用于若所述待发送时间位于当前已划分出的所述时间窗口中,则根据所述待发送时间,确定所述延迟消息在当前已划分出的所述时间窗口中归属的目标时间窗口;
缓存单元,用于若所述待发送时间未位于当前已划分出的所述时间窗口中,则对所述延迟消息进行缓存,并每间隔预设时间间隔执行所述判断所述待发送时间是否位于当前已划分出的所述时间窗口中的步骤。
优选的,所述划分模块包括:
生成单元,用于生成与每个所述时间窗口对应且包含所述时间窗口的时间信息的标识。
一种延迟消息处理设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如上述任一项所述的延迟消息处理方法的步骤。
一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序被处理器执行时实现如上述任一项所述的延迟消息处理方法的步骤。
本申请提供了一种延迟消息处理方法、装置、设备及计算机可读存储介质,其中,该方法包括:将未来预设时间段划分为多个时间窗口,并生成与每个时间窗口对应的标识;获取接收交互指令的时间、交互指令对应的延迟消息、延迟消息对应的延迟时间,根据接收交互指令的时间及延迟时间,计算延迟消息的待发送时间;根据待发送时间确定延迟消息归属的目标时间窗口,并对目标时间窗口的标识及延迟消息进行存储;获取当前时间归属的时间窗口对应的标识,根据当前时间归属的时间窗口对应的标识获取当前待发送延迟消息,并将当前待发送延迟消息推送给对应的用户。
本申请公开的上述技术方案,通过将未来预设时间段划分成多个时间窗口,每个时间窗口对应生成一个标识,并根据接收交互指令的时间、交互指令对应的延迟消息的延迟时间确定延迟消息的待发送时间,且根据待发送时间确定延迟消息归属的时间窗口,并对延迟消息归属的时间窗口对应的标识及延迟消息进行存储而实现对延迟消息的分区和分布式存储,并减少各分区存储的延迟消息的数量,同时通过获取当前时间归属的时间窗口的标识,并根据当前时间归属的时间窗口的标识获取对应的当前待发送延迟消息,且将获取到的当前待发送延迟消息发送给对应的用户,实现将延迟消息的待发送时间作为触发条件而自动触发标识的获取并借助获取的标识进行当前待发送延迟消息的获取和发送,以减少延迟消息的延迟,避免延迟消息的漏发,即实现快速、及时且准确地进行延迟消息的发送。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请实施例提供的一种延迟消息处理方法的流程图;
图2为本申请实施例提供的将未来1小时划分为多个时间窗口的示意图;
图3为本申请实施例提供的另一种延迟消息推送的流程图;
图4为本申请实施例提供的一种延迟消息处理装置的结构示意图;
图5为本申请实施例提供的一种延迟消息处理设备的结构示意图。
具体实施方式
为了更好地管理用户,提高用户体验,留存和激活用户,公众号会根据用户的相关行为进行延迟消息的响应,具体地,当用户关注公众号或者点击公众号上面的相关菜单后(统称为事件,即用户和公众号交互行为),后台会根据设置的延迟时间进行响应,例如:延迟1分钟、3分钟、10分钟、12小时等,当时间达到延迟时间之后,则将对应的延迟消息推送给指定用户,以吸引用户的注意,并和用户进行交互,提高用户活跃以及留存,且在不同延迟时间到达时,必须及时、准确地将消息内容发送给指定用户。
目前,在对延迟消息进行处理时,通常是采用定时轮询的方式来查询延迟消息,并在查询到延迟消息达到对应的延迟时间时进行发送,但是,由于定时轮询本身就是时间延迟,因此,这种方法会加大延迟时间,且当延迟消息量非常大时,每次轮询会非常慢,轮询所花费的时间会比较长,而这就会导致后台无法及时、准确地查询出待处理的延迟消息,另外,随着时间的推移,延迟消息会堆积的越来越多,而这就会进一步导致轮询越来越慢,且定时轮询可能会因延迟消息数量大、延迟消息的堆积而导致漏发延迟消息的情况出现,因此,则会降低延迟消息发送的准确性。
为此,本申请提供一种延迟消息处理的技术方案,用于实现及时、准确地进行延迟消息的发送。
为了使本领域技术人员更清楚地理解本技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
参见图1,其示出了本申请实施例提供的一种延迟消息处理方法的流程图,本申请实施例提供的一种延迟消息处理方法,可以包括:
S11:将未来预设时间段划分为多个时间窗口,并生成与每个时间窗口对应的标识。
将未来预设时间段划分为多个时间窗口,其中,预设时间段具体可以为未来1小时、未来2小时等,本申请对此不做任何限定,且各时间窗口的时间长度可以相同,例如每个时间窗口可以为30s、1分钟等,当然,各时间窗口的时间长度也可以不同,只要各时间窗口的时间长度处在业务能够接受的业务误差范围内即可,具体可以参见图2,其示出了本申请实施例提供的将未来1小时划分为多个时间窗口的示意图,在图2中,未来预设时间段具体为1小时,且每个时间窗口的时间长度均为30s。
在将未来预设时间段划分为多个时间窗口的同时,可以生成与每个时间窗口对应的标识,也即每个时间窗口均可以有一个与其对应的唯一KEY,如图2所示,各个时间窗口均有自己对应的KEY,另外,可以参见图3,其示出了本申请实施例提供的另一种延迟消息推送的流程图,其中,图3是以延迟消息具体为延迟MQ(Message Queue,消息队列)消息为例进行说明。
S12:获取接收交互指令的时间、交互指令对应的延迟消息、延迟消息对应的延迟时间,根据接收交互指令的时间及延迟时间,计算延迟消息的待发送时间。
在执行步骤S11的同时或之后,若在当前时间接收到用户发送的与公众号的交互指令,则可以获取接收交互指令的时间,并获取与交互指令对应的延迟消息,其中,这里提及的延迟消息具体可以为延迟MQ消息,且可以获取延迟消息对应的延迟时间,然后,可以根据接收到交互指令的时间及与交互指令对应的延迟消息的延迟时间计算该延迟消息的待发送时间,具体是将接收交互指令的时间加上延迟消息的延迟时间得到延迟消息的待发送时间。
需要说明的是,上述提及的交互指令具体可以为用户关注公众号、用户点击公众号中的菜单等行为,延迟消息对应的延迟时间指的是在接收到交互指令后应过多少时间再将与交互指令对应的延迟消息发送给用户,待发送时间指的是应该将延迟消息推送给用户的时间,例如:假设接收交互指令的时间为10:00,与该交互指令对应的延迟消息的延迟时间为5分钟,则延迟消息的待发送时间即为10:05。
S13:根据待发送时间确定延迟消息归属的目标时间窗口,并对目标时间窗口的标识及延迟消息进行存储。
在计算得到延迟消息的待发送时间之后,可以根据延迟消息的待发送时间、步骤S11划分出的时间窗口,确定延迟消息归属的目标时间窗口,并获取目标时间窗口的标识,且对目标时间窗口的标识及其对应的延迟消息进行存储,即将目标时间窗口的标识及该目标时间窗口对应的延迟消息存储在一起。
S14:获取当前时间归属的时间窗口对应的标识,根据当前时间归属的时间窗口对应的标识获取当前待发送延迟消息,并将当前待发送延迟消息推送给对应的用户。
在对延迟消息按照步骤S13进行存储的同时,可以获取当前时间归属的时间窗口,并获取当前时间归属的时间窗口的标识,且根据当前时间归属的时间窗口对应的标识、步骤S13中时间窗口的标识与延迟消息的存储,获取与当前时间对应的当前待发送延迟消息,并将当前待发送延迟消息推送给与当前待发送延迟消息对应的用户,也即推送给指定用户,以使得对应的用户可以及时、准确地获取其对应的延迟消息,例如:当前时间为10:00:20,其归属在10:00:00-10:00:30这个时间窗口内,则可以获取10:00:00-10:00:30这个时间窗口对应的标识,并根据该标识获取待发送时间在该时间内的待发送消息,并将待发送消息推送给对应的用户。
由上述过程可知,本申请是对时间窗口分割并结合时间窗口的标识进行延迟消息的分区和分布式存储,也即进行延迟消息的分隔处理,以减少单个分区的延迟消息存储数量,并将延迟消息的待发送时间作为触发点而获取对应的时间窗口的标识,且根据标识查询、获取该时间窗口内的所有延迟消息且进行推送,而无需再采用定时轮询的方式来对海量延迟消息进行轮询,因此,则可以减少不必要的延迟,实现快速、高效地获取待发送的延迟消息且进行待发送的延迟消息的推送,同时可以尽量避免出现漏发延迟消息的情况,以提高延迟消息推送的可靠性和准确性。
本申请公开的上述技术方案,通过将未来预设时间段划分成多个时间窗口,每个时间窗口对应生成一个标识,并根据接收交互指令的时间、交互指令对应的延迟消息的延迟时间确定延迟消息的待发送时间,且根据待发送时间确定延迟消息归属的时间窗口,并对延迟消息归属的时间窗口对应的标识及延迟消息进行存储而实现对延迟消息的分区和分布式存储,并减少各分区存储的延迟消息的数量,同时通过获取当前时间归属的时间窗口的标识,并根据当前时间归属的时间窗口的标识获取对应的当前待发送延迟消息,且将获取到的当前待发送延迟消息发送给对应的用户,实现将延迟消息的待发送时间作为触发条件而自动触发标识的获取并借助获取的标识进行当前待发送延迟消息的获取和发送,以减少延迟消息的延迟,避免延迟消息的漏发,即实现快速、及时且准确地进行延迟消息的发送。
本申请实施例提供的一种延迟消息处理方法,还可以包括:
每失效一个时间窗口,则释放失效的时间窗口,并在最后一个时间窗口前扩展一个时间窗口。
随着时间的流逝,时间窗口会发生失效,而在本申请中,每失效一个时间窗口,就释放该失效的时间窗口,其中,这里提及的失效的时间窗口即为位于当前时间之后的时间窗口,例如:假设有一时间窗口为10:00:00-10:00:30,但当前时间为10:00:40,则表明10:00:00-10:00:30这一时间窗口已经失效,因此,则可以释放该失效的时间窗口,以释放资源和节省存储,从而有效缓解服务资源的问题。
在释放失效的时间窗口的同时,可以在最后一个时间窗口的前面扩展一个新的时间窗口,其中,这里提及的最后一个时间的前面指的是沿着时间推移的方向位于最后一个时间窗口的前面,例如:最后一个时间窗口为10:59:30-11:00:00,则在最后一个时间窗口10:59:30-11:00:00的前面扩展一个时间窗口11:00:00-11:00:30,以通过上述方式使得时间窗口的数量可以保持不变,且使得时间窗口可以随着时间的推移而往前进行移动,也即使得时间窗口实现动态滚动,从而便于实现新接收交互指令对应的延迟消息归属的时间窗口的确定及对新接收交互指令对应的延迟消息的存储。
本申请实施例提供的一种延迟消息处理方法,根据待发送时间确定延迟消息归属的目标时间窗口,可以包括:
判断待发送时间是否位于当前已划分出的时间窗口中;
若是,则根据待发送时间,确定延迟消息在当前已划分出的时间窗口中归属的目标时间窗口;
若否,则对延迟消息进行缓存,并每间隔预设时间间隔执行判断待发送时间是否位于当前已划分出的时间窗口中的步骤。
在根据待发送时间确定延迟消息归属的目标时间窗口时,可以先判断待发送时间是否位于当前已经划分出的时间窗口内,若待发送时间位于当前已经划分出的时间窗口内,则根据延迟消息的待发送时间确定该延迟消息在当前已划分出的时间窗口中归属的目标时间窗口,若待发送时间未位于当前已经划分出的时间窗口内,则先对延迟消息进行缓存,并每间隔预设时间间隔(具体可以为十分钟或者其他时间)执行判断待发送时间是否位于当前已划分出的时间窗口中的步骤,直至确定出延迟消息归属的目标时间窗口为止,以便将延迟消息与其归属的目标时间窗口的标识进行对应存储。
通过上述过程可以实现对延迟时间比较短的延迟消息的直接存储、对延迟时间比较长的延迟消息(例如:延迟时间为10小时、延迟时间为1天甚至更长)的缓存且在缓存之后再进行目标时间窗口的确定,以避免对延迟时间比较长的延迟消息的遗漏,从而便于提高延迟消息存储及推送的可靠性,同时避免一次划分过多、过长的时间窗口而造成资源的浪费。
其中,需要说明的是,在对延迟消息进行缓存时,可以以天为时间单位进行缓存,也即待发送时间在第二天的延迟消息可以存储在一起,待发送时间在第三天的延迟消息可以存储在一起……以便于后续直接按照缓存对应的天数而先每间隔预设时间间隔获取待发送时间在第二天的延迟消息,并判断这些延迟消息是否位于当前已划分出的时间窗口内,若否,则不再进行待发送时间位于第二天之后的其他延迟消息的获取和判断,若是,则不仅进行上述延迟消息归属的目标时间窗口的确定,且每间隔预设时间间隔获取待发送时间位于第二天之后的其他延迟消息的获取和判断。
本申请实施例提供的一种延迟消息处理方法,生成与每个时间窗口对应的标识,可以包括:
生成与每个时间窗口对应且包含时间窗口的时间信息的标识。
在生成与每个时间窗口对应的标识时,具体可以根据时间窗口而生成与每个时间窗口对应且包含有时间窗口的时间信息的标识,其中,这里提及的时间信息具体可以为时间窗口中左侧的时间及右侧的时间等,以便于进行标识的查询和获取。
本申请实施例还提供了一种延迟消息处理装置,参见图4,其示出了本申请实施例提供的一种延迟消息处理装置的结构示意图,可以包括:
划分模块41,用于将未来预设时间段划分为多个时间窗口,并生成与每个时间窗口对应的标识;
计算模块42,用于获取接收交互指令的时间、交互指令对应的延迟消息、延迟消息对应的延迟时间,根据接收交互指令的时间及延迟时间,计算延迟消息的待发送时间;
确定模块43,用于根据待发送时间确定延迟消息归属的目标时间窗口,并对目标时间窗口的标识及延迟消息进行存储;
推送模块44,用于获取当前时间归属的时间窗口对应的标识,根据当前时间归属的时间窗口对应的标识获取当前待发送延迟消息,并将当前待发送延迟消息推送给对应的用户。
本申请实施例提供的一种延迟消息处理装置,还可以包括:
扩展模块,用于每失效一个时间窗口,则释放失效的时间窗口,并在最后一个时间窗口前扩展一个时间窗口。
本申请实施例提供的一种延迟消息处理装置,确定模块43可以包括:
判断单元,用于判断待发送时间是否位于当前已划分出的时间窗口中;
执行单元,用于若待发送时间位于当前已划分出的时间窗口中,则根据待发送时间,确定延迟消息在当前已划分出的时间窗口中归属的目标时间窗口;
缓存单元,用于若待发送时间未位于当前已划分出的时间窗口中,则对延迟消息进行缓存,并每间隔预设时间间隔执行判断待发送时间是否位于当前已划分出的时间窗口中的步骤。
本申请实施例提供的一种延迟消息处理装置,划分模块41可以包括:
生成单元,用于生成与每个时间窗口对应且包含时间窗口的时间信息的标识。
本申请实施例还提供了一种延迟消息处理设备,参见图5,其示出了本申请实施例提供的一种延迟消息处理设备的结构示意图,可以包括:
存储器51,用于存储计算机程序;
处理器52,用于执行存储器51存储的计算机程序时可实现如下步骤:
将未来预设时间段划分为多个时间窗口,并生成与每个时间窗口对应的标识;获取接收交互指令的时间、交互指令对应的延迟消息、延迟消息对应的延迟时间,根据接收交互指令的时间及延迟时间,计算延迟消息的待发送时间;根据待发送时间确定延迟消息归属的目标时间窗口,并对目标时间窗口的标识及延迟消息进行存储;获取当前时间归属的时间窗口对应的标识,根据当前时间归属的时间窗口对应的标识获取当前待发送延迟消息,并将当前待发送延迟消息推送给对应的用户。
本申请实施例还提供了一种计算机可读存储介质,计算机可读存储介质中存储有计算机程序,计算机程序被处理器执行时可实现如下步骤:
将未来预设时间段划分为多个时间窗口,并生成与每个时间窗口对应的标识;获取接收交互指令的时间、交互指令对应的延迟消息、延迟消息对应的延迟时间,根据接收交互指令的时间及延迟时间,计算延迟消息的待发送时间;根据待发送时间确定延迟消息归属的目标时间窗口,并对目标时间窗口的标识及延迟消息进行存储;获取当前时间归属的时间窗口对应的标识,根据当前时间归属的时间窗口对应的标识获取当前待发送延迟消息,并将当前待发送延迟消息推送给对应的用户。
该计算机可读存储介质可以包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。另外,本申请实施例提供的上述技术方案中与现有技术中对应技术方案实现原理一致的部分并未详细说明,以免过多赘述。
对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
- 一种延迟消息处理方法、装置、设备及可读存储介质
- 消息处理方法、消息处理装置、可读存储介质、电子设备