具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请的说明书和权利要求书及所述附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结果或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
参阅图1,图1为本申请实施例提供的一种延迟消费系统。如图1所示,延迟消费系统包括第一服务器101、第二服务器102以及第三服务器103,其中,第一服务器101位于延迟服务端、第二服务器102位于生产端以及第三服务器103消费端。
如图1所示,第二服务器102从生产者处获取生产者生产的原始消息,并将获取到的原始消息封装为待消费延迟消息,发布到消息队列的所述预设主题topic中的,本申请中以消息队列为kafka队列为例进行说明,后面全部以kafka队列表示,不再区分。其中,该kafka队列是预先建立好的;
进一步的,第一服务器101从kafka队列的预设主题(topic)中消费待消费延迟消息,并将所述待消费延迟消息存储到预设数据库;并且,第一服务器101会周期性的扫描所述预设数据库,从所述预设数据库中获取出目标延迟消息,其中,目标延迟消息为所述预设数据库中当前存储的所有延迟消息中延迟时间到达的延迟消息;然后第一服务器101获取所述目标延迟消息的目标topic,并将所述目标延迟消息中的原始消息发回到所述kafka队列中的所述目标topic;
进一步的,当第三服务器103监测到目标topic中有发布消息时,则会立即从所述目标topic中消费所述目标延迟消息中的原始消息,从而实现延迟消费消息。
可以看出,在本申请实施例中,当生产的原始消息需要延迟消费时,则第二服务器先将该原始消息封装为待消费延迟消息,并将该待消费延迟消息发送到kafka队列的预设topic,然后第一服务器从该预设topic中消费该待消费延迟消息,并在延迟时间到达时将该原始消息返回到对应的目标topic,这个时候第三服务器才会去目标topic中消费该原始消息,从而实现延迟消费该原始消息,进而保证成功消费原始消息,提高事务处理的成功率。
首先说明,本申请的消息延迟消费方法可以应用各种基于kafka队列,且需要进行延迟消费场景。但是,本申请中主要以延迟消费订单信息为例进行说明。
参阅图2,图2为本申请实施例提供的一种消息延迟消费方法。该方法应用于如图1所示的延迟消费系统。该方法主要包括以下步骤内容:
201:第二服务器向消息队列的预设主题中发布待消费延迟消息。
其中,本申请均消息队列为kafka队列为例进行说明,不再区分。示例性的,在kafka队列中预先设置一个topic用来存储延迟消息,并将该topic称为预设topic。
示例性的,生产端在处理一个事务时,会生成各种原始消息,但是有些原始消息不能立马被处理,需要延迟处理。本申请中将需要进行延迟处理的原始消息称为待消费延迟消息。
举例来说,用户在提交一个订单时,生产端为用户端设备。若在生产订单信息的过程中,用户被其他事情耽搁,比如,和旁边的人说话,并未来得及付款,若生成订单信息之后,第二服务器立马将订单信息发布到kafka队列,则消费端(即第三服务器)会立马从该kafka队列中消费该订单信息,会发现用户并未付款,则会将用户下单这个事务归结为失败,从而取消订单。因此,这种场景下需要给第三服务器处理订单信息留有延迟时间再消费该订单信息,以便在用户将整个付款事务提交之后,再处理该订单信息,从而保证订单处理成功。
因此,第二服务器对生产端生产的原始消息进行识别,确定该原始消息是否为延迟消息,若是,提取该原始消息的主题,即第一topic,比如,原始消息为订单信息,则该原始消息的主题为订单(order);然后,根据原始消息以及原始消息的生产者的用户画像,确定该原始消息的延迟时间,并将该原始消息的第一topic、原始消息的延迟时间、原始消息的生产者的信息,以及该原始消息封装为待消费延迟消息,发布到该预设topic。
示例性的,获取该延迟消息的生产者的用户画像;基于该用户画像,获取该生产者的历史成功订单信息;基于该历史成功订单信息,确定该生产者的操作时长,其中,该操作时长为该生产者从下单的过程中,从产生订单信息到付款成功的时长。例如,获取所有历史成功订单信息中每个历史成功订单信息中从产生订单信息到付款成功的操作时长,然后将所有成功历史订单信息中的最大操作时长作为该生产者的操作时长;或者,将所有成功历史订单信息的操作时长的平均值作为该生产者的操作时长。
进一步的,还可以对历史成功订单信息进行筛选,比如,根据该延迟消息的消息类型,比如,延迟消息为订单信息时,可以将该订单信息中购买的物品的类型作为该延迟消息的消息类型;从历史成功订单信息中筛选与该物品的类型一致的历史成功订单信息,然后基于这些历史成功订单信息确定该生产者的操作时长,其确定操作时长的过程与上述类似,不再叙述。
在本申请的一个实施方式中,还可以通过模型预测的方式预测延迟时间,详细参考图3示出的预测过程,在此不做过多的描述。
202:第一服务器从消息队列的预设主题中消费待消费延迟消息。
示例性的,第二服务器在发布完待消费延迟消息之后,第一服务器为该预设topic的订阅者,会发现预设topic中发布待消费了延迟消息,第一服务器会立即从该预设topic中消费该待消费延迟消息;
203:第一服务器将所述待消费延迟消息存储到预设数据库。
示例性,第一服务器对该待消费延迟消息解封装,得到该待消费延迟消息中的原始消息、延迟时间、生产者信息以及第一topic,并将该原始消息、延迟时间、生产者信息以及第一topic存储到预设数据库中。
其中,针对第一服务器的本地存储,该预设数据库需要满足以下条件:
高性能:写入延迟要低,由于MQ的一个重要作用是削峰填谷,在选择临时存储时,写入性能高,因此,该预设数据库可以为MQ数据库;
高可靠:延迟消息写入后,不能丢失,需要进行持久化,并支持备份;
存储成本低:可以支持大量消息存储,比如,可以使用rocksdb进行存储;
支持排序:支持按照字段对消息进行排序;
支持长时间保存:一些业务的延迟消息,需要延迟几个月,甚至更长,所以延迟消息必须能长时间保留。
204:第一服务器周期性的扫描所述预设数据库,从所述预设数据库中获取目标延迟消息。
示例性的,第一服务器会设置一个定时任务,若当前时刻到达定时时刻就会去扫描该预设数据库中已存储的延迟消息,即周期性的扫描预设数据库。然后,根据每个已存储的延迟消息的延迟时间,以及从该kafka队列中消费该延迟消息的时刻,即消费时刻,基于该消费时刻以及延迟时间,以及当前时刻,确定该延迟消息的延迟时间是否到达,即确定当前时刻和消费时刻之间的第一时长,若该第一时长大于或者等于该延迟时间,则确定该延迟消息的延迟时间到达,将该延迟消息作为该目标延迟消息。
示例性的,由于该预设数据库支持按字段排序,因此,在写入该待消费延迟消息时,针对已存储的延迟消息,获取每个已存储的延迟消息的剩余延迟时间,其中,该剩余延迟时间为第一时长和该已存储的延迟消息的延迟时间之间的差值,其中,该第一时长为当前时刻和消费该已存储的延迟消息的时刻之间的时长。然后,获取该待消费延迟消息的延迟时间,并根据该延迟时间和已存储的延迟消息的剩余延迟时间从大到小的顺序,对该待消费延迟消息以及已存储的延迟消息进行排序,并根据排序结果,将该待消费延迟消息存入到该待写入数据的排序结果对应的位置。这样根据剩余延迟时间进行排序,并将该待消费延迟消息存入到预设数据库之后,后续进行周期性扫描时,扫描到第i个已存的延迟消息的延迟时间未到达,则可确定位于第i个已存储的延迟消息之后的延迟时间均未到达,则可以不用去扫描位于第i个已存储的延迟消息之后的延迟消息,提高了扫描效率。
具体的,第一服务器按照预设数据库中已存储的延迟消息的存储顺序,对该已存储的延迟消息进行周期性扫描;若当前扫描周期,首次扫描到第i个已存储的延迟消息的延迟时间到达,且第i+n个已存储的延迟消息未到达,则不再对位于所述第i个已存储的延迟消息之后的延迟消息进行扫描,并且将第i个已存储的延迟消息到第i+n-1个之间已存储的延迟消息,均作为该目标延迟消息,其中,n为大于或者等于1的整数。
在本申请的一个实施方式中,基于上述的排序存储方法,在周期性扫描时,可能会遇到一种情况,就是本次扫描时,某个已存储的延迟消息的延迟时间并未到达,但是由于扫描之间有间隔,下次扫描时又早已经到达,也就是说某个延迟消息的延迟时间是在两次扫描之间到达的。针对这种情况,在每次扫描时,除了去查询是否存在延迟时间到达的延迟消息之外,还需要统计剩余延迟时间小于扫描间隔的延迟消息,并将剩余延迟时间小于扫描间隔的延迟消息标记为候选延迟消息,并记录下候选延迟消息的延迟时间到达的时刻,当到达该候选延迟消息的延迟时刻时,将该候选延迟消息标记为目标延迟消息。
205:第一服务器获取所述目标延迟消息的目标主题。
示例性的,第一服务器对目标延迟消息进行解封封装,得到该目标延迟消息的目标topic。
206:第一服务器将所述目标延迟消息中的原始消息发回到所述消息队列中的所述目标主题。
示例性的,第一服务器对该目标延迟消息进行解封装,得到该目标延迟消息中封装的原始消息以及目标topic,并根据该目标topic将该目标延迟消息中封装的原始消息发布到kafka队列中的目标topic。
207:第三服务器从所述目标主题中消费所述目标延迟消息中的原始消息。
示例性的,第一服务器将原始消息发回到目标topic之后,第三服务器为该目标topic的订阅者,则可以立即发现目标topic中发布了消息,则会立即从该目标topic中消费该原始消息,从而实现第三服务器延迟消费该原始消息,为事务的提交留下了缓冲的时间,提高了事务处理成功率。
可以看出,在本申请实施例中,当生产者生产的原始消息需要延迟消费时,则第二服务器先将该原始消息封装为待消费延迟消息,并将该待消费延迟消息发送到kafka队列的预设topic,然后第一服务器从该预设topic中消费该待消费延迟消息,并在延迟时间到达时将该原始消息返回到对应的目标topic,这个时候第三服务器才会去目标topic中消费该原始消息,从而实现延迟消费该原始消息,进而保证成功消费原始消息,提高事务处理的成功率。
参阅图3,图3为本申请实施例提供的一种确定延迟时间方法的流程示意图。该方法应用于图1示出的延迟消费系统的第二服务器。该方法包括以下步骤内容:
301:第二服务器根据所述生产者在所述多个特征维度下的多个用户特征数据以及每个候选用户在所述多个特征维度下的多个用户特征数据,从多个候选用户中获取多个目标用户。
其中,所述多个目标用户中的任意一个所述目标用户与所述生产者至少在一个特征维度下具有相同的用户特征数据。
示例性的,第一服务器获取原始消息的生产者,以及原始消息的消息类型,其中,消息类型可以为订单消息、登录消息,等等;获取生产者的用户画像,该用户画像包括该生产者在多个特征维度下的多个用户特征数据,其中,该多个特征维度可以为性别、年龄、居住城市、兴趣爱好、历史浏览行为(比如,历史购买行为);根据该多个用户特征数据从多个参考用户(该多个参考用户为预先录入到用户数据库中的用户)中获取多个目标用户,其中,该多个目标用户中的任意一个目标用户与该生产者具有至少一个特征维度下的用户特征数据相同;然后,获取该多个目标用户中的任意一个目标用户在多个特征维度下的多个用户特征数据。应说明,任意一个用户(包括目标用户和该待消费延迟消息的生产者)的用户特征数据包括用户特征以及操作时长,其中,该操作时长为用户从下单到确认付款的时长。应说明,针对生产者来说,该生产者的操作时长是未知,本申请可以通过填0的方式对生产者的操作时长进行填补;针对任意一个目标用户来说,该目标用户的操作时长是已知的,该操作时长是该目标用户的历史操作时长,即目标用户从下单到付款的历史操作时长。
302:第二服务器根据所述生产者在所述多个特征维度下的多个用户特征数据,以及每个所述目标用户在所述多个特征维度下的多个用户特征数据,确定所述原始消息的延迟时间。
示例性的,第二服务器通过语义提取模型对所述生产者在所述多个特征维度下的多个用户特征数据进行向量化,得到所述生产者的第一特征向量;通过所述语义提取模型分别对每个所述目标用户在所述多个特征维度下的多个用户特征数据进行向量化,得到每个所述目标用户的第二特征向量;基于所述生产者的权重以及每个所述目标用户的权重,对所述生产者的第一特征向量以及每个所述目标用户的第二特征向量进行加权,得到目标特征向量;将所述目标特征向量输入到多层感知器中进行时间预测,得到所述原始消息的延迟时间。
示例性的,对所述生产者的第一特征向量以及每个所述目标用户的第二特征向量进行加权之前,第二服务器获取所述生产者在所述多个特征维度下的多个用户特征数据和每个所述目标用户在所述多个特征维度下的多个用户特征数据相同的数量;根据每个所述目标用户对应的相同的数量进行归一化处理,得到每个所述目标用户的初始权重;对每个所述目标用户的初始权重以及所述生产者的初始权重进行归一化,得到每个所述目标用户的权重,以及所述生产者的权重,其中,所述生产者的初始权重为1。
具体的,通过语义提取模型对生产者在所述多个特征维度下的多个用户特征数据进行向量化,得到生产者的第一特征向量,比如,语义提取模型包括编码层和映射层,则可以先通过编码层对多个用户特征数据进行编码,然后,通过映射层对编码结果进行映射,得到第一特征向量。然后,通过语义提取模型分别对每个目标用户在多个特征维度下的多个用户特征数据进行向量化,得到每个目标用户的第二特征向量。最后,基于生产者的权重,以及每个目标用户的权重,对生产者的第一特征向量,以及每个目标用户的第二特征向量进行加权,得到目标特征向量,具体的,获取每个目标用户在多个特征维度下的多个用户特征数据和生产者在多个特征维度下的多个用户特征数据相同的数量,然后对每个目标用户的相同的数量进行归一化,得到每个目标用户的初始权重;最后再对每个目标用户的初始权重以及生产者的初始权重(设置为1)进行归一化,得到每个目标用户的权重以及生产者的权重。最后,基于目标特征向量预测生产者的操作时长,比如,可以将该目标特征向量输入到多层感知器中进行时长预测,得到该生产者的延迟时间。
参阅图4,图4本申请实施例提供的一种服务器的功能单元组成框图。服务器400包括:收发单元401和处理单元402;
收发单元401,用于从消息队列的预设主题中消费待消费延迟消息,所述待消费延迟消息是由所述第二服务器发布到所述消息队列的所述预设主题中的,所述待消费延迟消息包括原始消息、所述待消费延迟消息包括原始消息、所述原始消息的原始主题以及所述原始消息的延迟时间;
处理单元402,用于将所述待消费延迟消息存储到预设数据库;周期性的扫描所述预设数据库,从所述预设数据库中获取目标延迟消息,其中,目标延迟消息为所述预设数据库中当前存储的所有延迟消息中延迟时间小于第一时长的延迟消息,其中,所述第一时长为当前时刻和所述第一服务器消费所述目标延迟消息的时刻之间的差值;获取所述目标延迟消息的目标主题;
收发单元401,用于将所述目标延迟消息中的原始消息发回到所述消息队列中的所述目标主题,以便所述第三服务器从所述目标主题中消费所述目标延迟消息中的原始消息。
在一些可能的实施方式中,所述消费待消费延迟消息是所述第二服务器通过执行以下步骤得到的:
所述第二服务器对生产者生产的所述原始消息进行类型识别,确定所述原始消息为需要进行延迟消费的消息;
所述第二服务器对所述原始信息进行主题识别,得到所述原始消息的原始主题;
所述第二服务器根据所述生产者在多个特征维度下的多个用户特征数据,确定所述原始消息的延迟时间;
所述第二服务器将所述原始消息、所述原始消息的原始主题以及所述原始消息的延迟时间封装为所述待消费延迟消息。
在一些可能的实施方式中,所述第二服务器根据所述生产者在多个特征维度下的多个用户特征数据,确定所述原始消息的延迟时间,包括:
所述第二服务器根据所述生产者在所述多个特征维度下的多个用户特征数据以及每个候选用户在所述多个特征维度下的多个用户特征数据,从多个候选用户中获取多个目标用户,其中,所述多个目标用户中的任意一个所述目标用户与所述生产者至少在一个所述特征维度下具有相同的用户特征数据;
所述第二服务器根据所述生产者在所述多个特征维度下的多个用户特征数据,以及每个所述目标用户在所述多个特征维度下的多个用户特征数据,确定所述原始消息的延迟时间。
在一些可能的实施方式中,所述第二服务器根据所述生产者在所述多个特征维度下的多个用户特征数据,以及每个所述目标用户在所述多个特征维度下的多个用户特征数据,确定所述原始消息的延迟时间,包括:
所述第二服务器通过语义提取模型对所述生产者在所述多个特征维度下的多个用户特征数据进行向量化,得到所述生产者的第一特征向量;
所述第二服务器通过所述语义提取模型分别对每个所述目标用户在所述多个特征维度下的多个用户特征数据进行向量化,得到每个所述目标用户的第二特征向量;
所述第二服务器基于所述生产者的权重以及每个所述目标用户的权重,对所述生产者的第一特征向量以及每个所述目标用户的第二特征向量进行加权,得到目标特征向量;
所述第二服务器将所述目标特征向量输入到多层感知器中进行时间预测,得到所述原始消息的延迟时间。
在一些可能的实施方式中,所述第二服务器基于所述生产者的权重以及每个所述目标用户的权重,对所述生产者的第一特征向量以及每个所述目标用户的第二特征向量进行加权之前,所述方法还包括:
所述第二服务器获取所述生产者在所述多个特征维度下的多个用户特征数据和每个所述目标用户在所述多个特征维度下的多个用户特征数据相同的数量;
所述第二服务器根据每个所述目标用户对应的相同的数量进行归一化处理,得到每个所述目标用户的初始权重;
所述第二服务器对每个所述目标用户的初始权重以及所述生产者的初始权重进行归一化,得到每个所述目标用户的权重,以及所述生产者的权重,其中,所述生产者的初始权重为1。
在一些可能的实施方式中,在将所述待消费延迟消息存储到预设数据库方面,处理单元402,具体用于:
获取所述预设数据库中每个已存储的延迟消息的剩余延迟时间,其中,所述剩余延迟时间为第一时长和每个已存储的延迟消息的延迟时间之间的差值,其中,所述第一时长为当前时刻和消费所述每个已存储的延迟消息的时刻之间的时长;
对所述待消费延迟消息的延迟时间和每个已存储的延迟消息的剩余延迟时间从大到小进行排序,得到所述待消费延迟消息在所述预设数据库中的存储顺序;
根据所述待消费延迟消息的存储顺序,将所述待消费延迟消息存储到所述预设数据库。
在一些可能的实施方式中,在周期性的扫描所述预设数据库,从所述预设数据库中获取出目标延迟消息方面,处理单元402,具体用于:
按照所述预设数据库中已存储的延迟消息的存储顺序,对所述已存储的延迟消息进行周期性扫描;
若首次扫描到第i个已存储的延迟消息的延迟时间到达,且第i+n个已存储的延迟消息未到达,则不再对位于所述第i个已存储的延迟消息之后的延迟消息进行扫描,并且将第i个已存储的延迟消息到第i+n-1个已存储的延迟消息,均作为所述目标延迟消息,其中,n为大于或者等于1的整数。
参阅图5,图5为本申请实施例提供的一种电子设备的结构示意图。如图5所示,电子设备500包括收发器501、处理器502和存储器503。它们之间通过总线504连接。存储器503用于存储计算机程序和数据,并可以将存储器503存储的数据传输给处理器502。
处理器502用于读取存储器503中的计算机程序执行以下操作:
控制收发器501从消息队列的预设主题主题中消费待消费延迟消息,其中,所述待消费延迟消息是由所述第二服务器发布到所述消息队列的所述预设主题中的,所述待消费延迟消息包括原始消息、所述待消费延迟消息包括原始消息、所述原始消息的原始主题以及所述原始消息的延迟时间;
将所述待消费延迟消息存储到预设数据库;周期性的扫描所述预设数据库,从所述预设数据库中获取目标延迟消息,其中,目标延迟消息为所述预设数据库中当前存储的所有延迟消息中延迟时间小于第一时长的延迟消息,其中,所述第一时长为当前时刻和所述第一服务器消费所述目标延迟消息的时刻之间的差值;获取所述目标延迟消息的目标主题;
控制收发器501将所述目标延迟消息中的原始消息发回到所述消息队列中的所述目标主题,以便所述第三服务器从所述目标主题中消费所述目标延迟消息中的原始消息。
在一些可能的实施方式中,所述消费待消费延迟消息是所述第二服务器通过执行以下步骤得到的:
所述第二服务器对生产者生产的所述原始消息进行类型识别,确定所述原始消息为需要进行延迟消费的消息;
所述第二服务器对所述原始信息进行主题识别,得到所述原始消息的原始主题;
所述第二服务器根据所述生产者在多个特征维度下的多个用户特征数据,确定所述原始消息的延迟时间;
所述第二服务器将所述原始消息、所述原始消息的原始主题以及所述原始消息的延迟时间封装为所述待消费延迟消息。
在一些可能的实施方式中,所述第二服务器根据所述生产者在多个特征维度下的多个用户特征数据,确定所述原始消息的延迟时间,包括:
所述第二服务器根据所述生产者在所述多个特征维度下的多个用户特征数据以及每个候选用户在所述多个特征维度下的多个用户特征数据,从多个候选用户中获取多个目标用户,其中,所述多个目标用户中的任意一个所述目标用户与所述生产者至少在一个所述特征维度下具有相同的用户特征数据;
所述第二服务器根据所述生产者在所述多个特征维度下的多个用户特征数据,以及每个所述目标用户在所述多个特征维度下的多个用户特征数据,确定所述原始消息的延迟时间。
在一些可能的实施方式中,所述第二服务器根据所述生产者在所述多个特征维度下的多个用户特征数据,以及每个所述目标用户在所述多个特征维度下的多个用户特征数据,确定所述原始消息的延迟时间,包括:
所述第二服务器通过语义提取模型对所述生产者在所述多个特征维度下的多个用户特征数据进行向量化,得到所述生产者的第一特征向量;
所述第二服务器通过所述语义提取模型分别对每个所述目标用户在所述多个特征维度下的多个用户特征数据进行向量化,得到每个所述目标用户的第二特征向量;
所述第二服务器基于所述生产者的权重以及每个所述目标用户的权重,对所述生产者的第一特征向量以及每个所述目标用户的第二特征向量进行加权,得到目标特征向量;
所述第二服务器将所述目标特征向量输入到多层感知器中进行时间预测,得到所述原始消息的延迟时间。
在一些可能的实施方式中,所述第二服务器基于所述生产者的权重以及每个所述目标用户的权重,对所述生产者的第一特征向量以及每个所述目标用户的第二特征向量进行加权之前,所述方法还包括:
所述第二服务器获取所述生产者在所述多个特征维度下的多个用户特征数据和每个所述目标用户在所述多个特征维度下的多个用户特征数据相同的数量;
所述第二服务器根据每个所述目标用户对应的相同的数量进行归一化处理,得到每个所述目标用户的初始权重;
所述第二服务器对每个所述目标用户的初始权重以及所述生产者的初始权重进行归一化,得到每个所述目标用户的权重,以及所述生产者的权重,其中,所述生产者的初始权重为1。
在一些可能的实施方式中,在将所述待消费延迟消息存储到预设数据库方面,处理器501具体用于执行以下步骤:
获取所述预设数据库中每个已存储的延迟消息的剩余延迟时间,其中,所述剩余延迟时间为第一时长和每个已存储的延迟消息的延迟时间之间的差值,其中,所述第一时长为当前时刻和消费所述每个已存储的延迟消息的时刻之间的时长;
对所述待消费延迟消息的延迟时间和每个已存储的延迟消息的剩余延迟时间从大到小进行排序,得到所述待消费延迟消息在所述预设数据库中的存储顺序;
根据所述待消费延迟消息的存储顺序,将所述待消费延迟消息存储到所述预设数据库。
在一些可能的实施方式中,在周期性的扫描所述预设数据库,从所述预设数据库中获取出目标延迟消息方面,处理器501具体用于执行以下步骤:
按照所述预设数据库中已存储的延迟消息的存储顺序,对所述已存储的延迟消息进行周期性扫描;
若首次扫描到第i个已存储的延迟消息的延迟时间到达,且第i+n个已存储的延迟消息未到达,则不再对位于所述第i个已存储的延迟消息之后的延迟消息进行扫描,并且将第i个已存储的延迟消息到第i+n-1个已存储的延迟消息,均作为所述目标延迟消息,其中,n为大于或者等于1的整数。
具体地,上述收发器501可为图4所述的实施例的服务器400的收发单元401,上述处理器502可以为图4所述的实施例的服务器400的处理单元402。
应理解,本申请中的服务器可以包括智能手机(如Android手机、iOS手机、WindowsPhone手机等)、平板电脑、掌上电脑、笔记本电脑、移动互联网设备MID(Mobile InternetDevices,简称:MID)或穿戴式设备等。上述电子设备仅是举例,而非穷举,包含但不限于上述电子设备。在实际应用中,上述电子设备还可以包括:智能车载终端、计算机设备等等。
本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行以实现如上述方法实施例中记载的任何一种消息延迟消费方法的部分或全部步骤。
本申请实施例还提供一种计算机程序产品,所述计算机程序产品包括存储了计算机程序的非瞬时性计算机可读存储介质,所述计算机程序可操作来使计算机执行如上述方法实施例中记载的任何一种消息延迟消费方法的部分或全部步骤。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作和模块并不一定是本申请所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件程序模块的形式实现。
所述集成的单元如果以软件程序模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储器包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储器中,存储器可以包括:闪存盘、只读存储器(英文:Read-Only Memory,简称:ROM)、随机存取器(英文:Random Access Memory,简称:RAM)、磁盘或光盘等。
以上对本申请实施例进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。