消息处理方法及装置与流程

文档序号:11206571阅读:193来源:国知局
消息处理方法及装置与流程
本发明实施例涉及计算机
技术领域
,尤其涉及一种消息处理方法及装置。
背景技术
:在互联网领域,客户端可以定制业务、及业务的处理时刻,以使业务服务器在业务的处理时刻到达时,自动处理用户定制的业务。目前,在客户端定制业务之后,客户端向业务服务器发送业务消息,业务消息中包括了该业务的处理时刻,业务服务器将未处理的业务消息存储在消息队列中,并周期性的轮询每一个业务消息,并判断业务消息中的处理时刻是否到达,若是,则对该业务消息对应的业务进行处理,并将该业务消息移出消息队列,若否,则业务服务器在下一个周期继续轮询该消息队列。然而,在上述过程中,在业务服务器的每一个工作周期内,均需要轮询消息队列中的每一个消息,导致业务服务器的工作效率较低。技术实现要素:本发明实施例提供一种消息处理方法及装置,提高了业务服务器的工作效率。第一方面,本发明实施例提供一种消息处理方法,应用于消息处理器,所述方法包括:确定当前时刻对应的第一索引信息集合,所述第一索引信息集合中包括至少一个索引信息,每个索引信息对应一个消息集合,每个消息集合中包括至少一个待处理消息;根据所述第一索引信息集合中包括的索引信息,确定第一消息集合;在所述第一消息集合中获取待处理消息,并处理所述待处理消息;其中,所述第一索引信息集合中每一个索引信息对应的消息集合中的待处理消息的处理时刻在所述当前时刻对应的第一时段之内,所述第一时段的时长与所述消息处理器的处理周期的时长相同;一个消息集合中的待处理消息的处理时刻在所述第一时段的一个子时段内。在一种可能的实施方式中,确定当前时刻对应的第一索引信息集合,包括:获取所述消息处理器对应的第一消息类型标识;根据所述消息处理器的处理周期,生成所述当前时刻对应的第一时间戳;根据所述第一消息类型标识、预设索引信息集合指示符和所述第一时间戳,确定所述第一索引信息集合的标识;根据所述第一索引信息集合的标识,确定所述第一索引信息集合。在另一种可能的实施方式中,所述消息处理器对应有并行消息处理器,相应的,根据所述索引信息集合中包括的索引信息,确定第一消息集合,包括:根据所述并行消息处理器的个数,在所述至少一个索引信息中确定所述消息处理器对应的第一索引信息;根据所述第一索引信息,确定所述第一消息集合。在另一种可能的实施方式中,所述方法还包括:获取待存储消息、及所述待存储消息的第一处理时刻;根据所述第一处理时刻,确定所述待存储消息对应的第二索引信息;将所述待存储消息存储至所述第二索引信息对应的第二消息集合。在另一种可能的实施方式中,将所述待存储消息存储至所述第二索引信息对应的第二消息集合,包括:根据所述第二索引信息,判断存储介质中是否存在所述第二消息集合;若是,则将所述待存储消息存储至所述第二消息集合;若否,则根据所述第二索引信息在所述存储介质中创建所述第二消息集合,并将所述待存储消息存储至所述第二消息集合中。在另一种可能的实施方式中,根据所述第二索引信息创建所述第二消息集合之后,还包括:确定所述第二索引信息对应的第二索引信息集合;将所述第二索引信息存储至所述第二索引信息集合。在另一种可能的实施方式中,根据所述第一处理时刻,确定所述待存储消息对应的第二索引信息,包括:获取所述待存储消息的消息类型;在所述待存储消息的消息类型对应的至少一个消息类型标识中,确定第二消息类型标识;根据所述待存储消息的消息类型对应的时间粒度,生成所述第一处理时刻对应的第二时间戳;根据所述第二消息类型标识和所述第二时间戳,确定所述第二索引信息。在另一种可能的实施方式中,确定所述第二索引信息对应的第二索引信息集合,包括:根据所述待存储消息的消息类型对应的时间精度,生成所述第一处理时刻对应的第三时间戳;所述时间精度为所述时间粒度的n倍,所述n为大于1的整数,所述时间精度对应的时长与所述消息处理器的处理周期的时长相同;根据所述第二消息类型标识、预设索引信息集合指示符和所述第三时间戳,确定所述第二索引信息集合的标识;根据所述第二索引信息集合的标识,判断所述存储介质中是否存在所述第二索引信息集合;若是,则根据所述第二索引信息集合的标识,在所述存储介质中确定所述第二索引信息集合;若否,则在所述存储介质中创建第二索引信息集合。第二方面,本发明实施例提供一种消息处理装置,应用于消息处理器,包括第一确定模块、第二确定模块、第一获取模块和处理模块,其中,所述第一确定模块用于,确定当前时刻对应的第一索引信息集合,所述第一索引信息集合中包括至少一个索引信息,每个索引信息对应一个消息集合,每个消息集合中包括至少一个待处理消息;所述第二确定模块用于,根据所述第一索引信息集合中包括的索引信息,确定第一消息集合;所述第一获取模块用于,在所述第一消息集合中获取待处理消息;所述处理模块用于,处理所述待处理消息;其中,所述第一索引信息集合中每一个索引信息对应的消息集合中的待处理消息的处理时刻在所述当前时刻对应的第一时段之内,所述第一时段的时长与所述消息处理器的处理周期的时长相同;一个消息集合中的待处理消息的处理时刻在所述第一时段的一个子时段内。在一种可能的实施方式中,所述第一确定模块具体用于:获取所述消息处理器对应的第一消息类型标识;根据所述消息处理器的处理周期,生成所述当前时刻对应的第一时间戳;根据所述第一消息类型标识、预设索引信息集合指示符和所述第一时间戳,确定所述第一索引信息集合的标识;根据所述第一索引信息集合的标识,确定所述第一索引信息集合。在另一种可能的实施方式中,所述消息处理器对应有并行消息处理器,相应的,所述第二确定模块具体用于:根据所述并行消息处理器的个数,在所述至少一个索引信息中确定所述消息处理器对应的第一索引信息;根据所述第一索引信息,确定所述第一消息集合。在另一种可能的实施方式中,所述装置还包括第二获取模块、第三确定模块和存储模块,其中,所述第二获取模块用于,获取待存储消息、及所述待存储消息的第一处理时刻;所述第三确定模块用于,根据所述第一处理时刻,确定所述待存储消息对应的第二索引信息;所述存储模块用于将所述待存储消息存储至所述第二索引信息对应的第二消息集合。在另一种可能的实施方式中,所述存储模块具体用于:根据所述第二索引信息,判断存储介质中是否存在所述第二消息集合;若是,则将所述待存储消息存储至所述第二消息集合;若否,则根据所述第二索引信息在所述存储介质中创建所述第二消息集合,并将所述待存储消息存储至所述第二消息集合中。在另一种可能的实施方式中,所述装置还包括第四确定模块,其中,所述第四确定模块用于,在所述存储模块根据所述第二索引信息创建所述第二消息集合之后,确定所述第二索引信息对应的第二索引信息集合;所述存储模块还用于,将所述第二索引信息存储至所述第二索引信息集合。在另一种可能的实施方式中,所述第三确定模块具体用于:获取所述待存储消息的消息类型;在所述待存储消息的消息类型对应的至少一个消息类型标识中,确定第二消息类型标识;根据所述待存储消息的消息类型对应的时间粒度,生成所述第一处理时刻对应的第二时间戳;根据所述第二消息类型标识和所述第二时间戳,确定所述第二索引信息。在另一种可能的实施方式中,所述第四确定模块具体用于:根据所述待存储消息的消息类型对应的时间精度,生成所述第一处理时刻对应的第三时间戳;所述时间精度为所述时间粒度的n倍,所述n为大于1的整数,所述时间精度对应的时长与所述消息处理器的处理周期的时长相同;根据所述第二消息类型标识、预设索引信息集合指示符和所述第三时间戳,确定所述第二索引信息集合的标识;根据所述第二索引信息集合的标识,判断所述存储介质中是否存在所述第二索引信息集合;若是,则根据所述第二索引信息集合的标识,在所述存储介质中确定所述第二索引信息集合;若否,则在所述存储介质中创建第二索引信息集合。本发明实施例提供的消息处理方法及装置,在存储介质中设置有索引信息集合,每一个索引信息集合中包括多个索引信息,每一个索引信息对应一个消息集合,消息集合中包括多个待处理消息,索引信息集合中每一个索引信息对应的消息集合中的待处理消息的处理时刻在当前时刻对应的第一时段之内,第一时段的时长与所述消息处理器的处理周期的时长相同,一个消息集合中的待处理消息的处理时刻在第一时段的一个子时段内。在当前时刻,当消息处理器需要对存储介质中的待处理消息进行处理时,先获取当前时刻对应的第一索引信息集合,根据索引信息集合中包括的索引信息,确定第一消息集合,并对第一消息集合中的待处理消息进行处理。在上述过程中,第一消息集合中的待处理消息的处理时刻均在当前时刻附近,这样,消息处理器无需遍历存储介质中的待处理消息,即可方便的获取得到需要在当前时刻处理的待处理消息,提高了消息处理器的工作效率,进而提高业务服务器的工作效率。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1为本发明实施例提供的消息处理方法的应用场景示意图;图2为本发明实施例提供的消息存储方法的流程示意图;图3为本发明实施例提供的确定第二索引信息方法的流程示意图;图4为本发明实施例提供的确定第二索引信息集合方法的流程示意图;图5为本发明实施例提供的消息处理方法的流程示意图;图6为本发明实施例提供的消息处理装置的结构示意图一;图7为本发明实施例提供的消息处理装置的结构示意图二。具体实施方式为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。图1为本发明实施例提供的消息处理方法的应用场景示意图。请参见图1,包括客户端101和业务服务器102,在业务服务器102中包括消息处理器1021和存储介质1022。可选的,客户端101可以为手机、电脑、电视等设备。在存储介质1022中包括多个索引信息集合,每一个索引信息集合中包括多个索引信息,每一个索引信息对应一个消息集合,每一个消息集合中包括多个待处理消息;其中,一个索引信息集合中的索引信息对应的所有消息集合中的待处理消息的处理时刻位于一个时段内,一个消息集合中的待处理消息的处理时刻位于该时段的一个子时段内。例如,假设索引信息集合1中包括3个索引信息,分别记为索引信息1-索引信息3,索引信息1-索引信息3对应的消息集合分别记为消息集合1-消息集合3,其中,消息集合1-消息集合3中的待处理消息的处理时刻在时段1(1点1分0秒-1点1分59秒)中,时段1可以划分为3个子时段,分别记为子时段1-子时段3,消息集合1-消息集合3中的待处理消息的处理时刻分别位于子时段1-子时段3中。例如,该索引信息集合、索引信息、消息集合、时段和子时段的关系可以如表1所示:表1请参见表1,索引信息1-索引信息3(或消息集合1-消息集合3)对应的子时段均在索引信息集合1对应的时段内,消息集合1中所有待处理消息的处理时刻均在子时段1点1分0秒-1点1分19秒中,消息集合2中所有待处理消息的处理时刻均在子时段1点1分20秒-1点1分39秒中,消息集合3中所有待处理消息的处理时刻均在子时段1点1分40秒-1点1分59秒中。存储介质1022中索引信息集合、消息集合分别与不同的时段对应,随着时间的推移,存储介质1022中的索引信息集合、消息集合不断发生变化(新增或删除)。具体的,当消息集合中的待处理消息被处理完成之后,消息集合会被删除,当索引信息集合对应的所有消息集合均被删除之后,索引信息集合也会被删除;当存储介质1022中新增的待处理消息不属于现有的任何一个消息集合时,可需要在存储介质1022中创建新的消息集合,当新创建的消息集合不对应任何一个索引信息集合时,则需要在存储介质1022中创建新的索引信息集合。客户端101可以向消息处理器1021发送待存储消息,消息存储器1021根据待存储消息的类型及处理时刻等信息,将待存储消息存储在对应的消息集合中。消息处理器1021按照其处理周期对存储介质1022中的待处理消息进行处理,在任意一个处理周期中,消息处理器1021可以获取当前时刻对应的索引信息集合,并对确定得到的索引信息集合对应的消息集合中的待处理消息进行处理,其中,确定得到的索引信息集合对应的消息集合中的待处理消息的处理时刻均位于当前时刻对应的时段内,这样,消息处理器1021无需遍历存储介质1022中的待处理消息,即可方便的获取得到需要在当前时刻处理的消息,提高了消息处理器的工作效率,进而提高业务服务器的工作效率。需要说明的是,图1只是以示例的形式示意一种应用场景,并非对应用场景的限定,当然,本申请所示的技术方案还可以适用于其它应用场景,本发明实施例对此不作具体限定。下面,提高具体实施例,对本申请所示的技术方案进行详细说明。需要说明的是,下面几个具体实施例可以相互结合,对于相同或相似的内容,在不同的实施例中不再进行赘述。为了便于对本申请的理解,首先通过图2-图4所示的实施例,对消息的存储过程进行说明。图2为本发明实施例提供的消息存储方法的流程示意图。请参见图2,该方法可以包括:s201、获取待存储消息、及待存储消息的第一处理时刻。本发明实施例的执行主体可以为消息处理器,当然,本发明实施例的执行主体也可以为消息处理器中的一个模块,例如消息接收模块、消息存储模块等。下文以执行主体为消息处理器为了进行说明。在本发明实施例中,待存储消息为需要消息处理器处理、且未存放到存储介质中的消息。每一个待存储消息对应第一处理时刻,该第一处理时刻指示消息处理器在第一处理时刻时对该待存储消息进行处理。可选的,第一处理时刻可以携带在待存储消息中。可选的,待存储消息可以为客户端向消息处理器发送的,例如,当用户需要在上午10点收到电视观看提醒时,用户可以通过客户端向消息处理器发送电视观看提醒消息,以使消息处理器先存储该电视观看提醒消息,并在上午10点时处理该电视观看提醒消息,以使消息处理器在上午10点向客户端发送电视观看提醒。可选的,待处理消息还可以为业务服务器中的其它模块发送的,例如,订单模块收到订单后,该订单指示卖家在24小时内发货,若卖家未发货,则生成发货提醒消息,并向消息处理器发送该发货提醒消息,以使消息处理器先存储该发货提醒消息,并订单生成的24小时时处理该发货提醒消息,以使消息处理器在订单生成24小时时向卖家客户端发送发货提醒。s202、根据第一处理时刻,确定待存储消息对应的第二索引信息。可选的,第二索引信息可以通过字符串表示,第二索引信息与第一处理时刻相关,例如,第二索引信息中可以包括第一处理时刻对应的时间戳。第二索引信息对应的消息集合中的待处理消息的处理时刻在第一处理时刻对应的时段内,例如,假设第一处理时刻为2017年4月20日17点1分13秒,第一处理时刻对应的时段为2017年4月20日17点1分0秒至2017年4月20日17点1分59秒,相应的,第二索引信息对应的消息集合中的待处理消息的处理时刻均在时段2017年4月20日17点1分0秒至2017年4月20日17点1分59中。需要说明的是,下文通过图3所示的实施例,对确定第二索引信息的过程进行详细说明,此处不再进行赘述。s203、根据第二索引信息,判断存储介质中是否存在第二消息集合。若是,则执行s204。若否,则执行s205-s207。可选的,存储介质可以为业务服务器中的数据库、业务服务器中的缓存介质等。可选的,第二索引信息为第二消息集合的标识,通过第二索引信息可以查询得到第二消息集合。可选的,可以判断存储介质中的索引信息集合中是否包括该第二索引信息,若是,则可以确定存储介质中存在第二消息集合,若否,则可以确定存储介质中不包括第二消息集合。当然,还可以根据其它可行的实现女方是判断存储介质中是否存在第二消息集合,本发明实施例对此不作具体限定。s204、将待存储消息存储至第二消息集合。若确定存储介质中存在第二消息集合,则将待存储消息存储在第二消息集合中。s205、根据第二索引信息在存储介质中创建第二消息集合,并将待存储消息存储至第二消息集合中。若确定存储介质中不存在第二消息集合,则在存储介质中创建第二消息集合,并将待存储消息存储在第二消息集合中。s206、确定第二索引信息对应的第二索引信息集合,并将第二索引信息存储至第二索引信息集合。根据s202的记载可知,第二索引信息与第一处理时刻相关,相应的,可以根据第一处理时刻,确定第二索引信息对应的第二索引信息集合,并将第二索引信息存储至第二索引信息集合。需要说明的是,下文通过图4所示的实施例,对确定第二索引信息的过程进行详细说明,此处不再进行赘述。本发明实施例提供的消息存储方法,在存储待存储消息时,先根据待存储消息的第一处理时刻,确定用于标识消息集合的第二索引信息,并根据第二索引信息确定待存储消息对应的第二消息集合,并将待存储消息存储在第二消息集合中,该第二消息集合中的每一个消息的处理时刻均在第一处理时刻对应的子时段内,第一处理时刻位于该子时段内,这样,可以保证一个消息集合中的各消息的处理时刻较为接近。若第二消息集合为新创建的消息集合,则根据第一处理时刻,将第二索引信息存储到对应的索引信息集合中,索引信息集合中各索引信息对应的子时段均在索引信息集合对应的时段内,这样,可以保证索引信息集合中各索引信息对应的消息集合中待处理消息的处理时刻也较为接近。通过上述存储方式,可以根据消息的处理时刻,将处理时刻较为接近的消息集中存储,以使消息处理器可以方便的获取每一个时刻对应的待处理消息,提高了消息处理器的工作效率,进而提高业务服务器的工作效率。在图2所示实施例的基础上,可选的,可以通过如下可行的实现方式确定待存储消息对应的第二索引信息(图2所示实施例中的s202),具体的,请参见图3所示的实施例。图3为本发明实施例提供的确定第二索引信息方法的流程示意图。请参见图3,该方法可以包括:s301、获取待存储消息的消息类型。可选的,待存储消息的类型可以为电视观看通知类型、发货通知类型、付款通知类型等,在实际应用过程中,可以根据实际需要设置待存储消息的类型,本发明实施例对此不作具体限定。s302、在待存储消息的消息类型对应的至少一个消息类型标识中,确定第二消息类型标识。一种消息类型对应一个或多个消息类型标识,例如,电视观看通知类型对应的消息类型标识可以包括:programwatching0、programwatching1、programwatching2、programwatching3。当然,在实际应用过程中,可以根据实际设置消息类型对应的消息类型标识的个数。当待存储消息的消息类型对应一个消息类型标识时,可以将该消息类型对应的一个消息类型标识确定为第二消息类型标识。当待存储消息的消息类型对应多个消息类型标识时,可以以循环的方式,将多个消息类型标识中的一个消息类型标识确定为第二消息类型标识。可选的,可以通过至少如下两种可行的实现方式确定第二消息类型标识:一种可行的实现方式:可选的,可以获取接收到待存储消息的第一时刻和待存储消息的消息类型对应的消息类型标识的个数,获取第一时刻的时间戳,根据第一时刻的时间戳和消息类型标识的个数,确定第二目标类型标识。可以将第一时刻的时间戳对消息类型标识的个数取余,得到余数a,并将多个消息类型标识中的第a个消息类型标识确定为第二消息类型标识。例如,假设电视观看通知类型对应4个消息类型标识,分别记为:programwatching0,programwatching1,programwatching2,programwatching3。再假设消息处理器在2017年4月20日17点1分13秒接收到的消息1的消息类型为电视观看通知类型,消息处理器获取该时刻的时间戳1492678873,并1492678872除以4取余得到数值为1,因此,可以将第一个消息类型标识(programwatching0)确定为消息1的对应的第二消息类型标识。另一种可行的实现方式:可选的,可以获取到当前时刻(接收到待存储消息的时刻)为止、接收到的该消息类型的消息个数m,并根据该个数和该消息类型对应的消息类型标识的个数n,确定第二目标消息类型的标识。可以将消息个数m对消息类型标识的个数n取余,得到余数b,并将多个消息类型标识中的第b个消息类型标识确定为第二消息类型标识。例如,假设电视观看通知类型对应4个消息类型标识,分别记为:programwatching0,programwatching1,programwatching2,programwatching3。再假设到接收到待存储消息的时刻为止,一共接收到12568个电视观看通知类型的消息,即,待存储消息为接收到的第12570个电视观看通知类型的消息,则将12570除以4取余得到数值为2,因此,可以将第二个消息类型标识(programwatching1)确定为消息1的对应的第二消息类型标识。s303、根据待存储消息的消息类型对应的时间粒度,生成第一处理时刻对应的第二时间戳。每种消息类型可以对应一种时间粒度,可以预先配置每一种消息类型对应的时间粒度。例如,时间粒度可以为10毫秒、20毫秒、1秒、10秒、30秒等,在实际应用过程中,可以根据实际需要设置消息类型对应的时间粒度。可选的,可以先获取第一处理时刻的协调世界时(coordinateduniversaltime,简称utc)时间戳,该utc时间戳是以毫秒为时间粒度生成的时间戳,并根据该utc时间戳和消息类型对应的时间粒度,生成第一处理时刻对应的第二时间戳。可选的,第二时间戳=第一处理时刻的utc时间戳-第一处理时刻的utc时间戳%消息类型对应的时间粒度。例如,假设第一处理时刻为2017年4月21日20点1分11秒22毫秒,该第一处理时刻的utc时间戳为1492776071022,再假设待存储消息的消息类型对应的时间粒度为10毫秒,则第二时间戳为:1492776071022-1492776071022%10=1492776071022-2=1492776071020。s304、根据第二消息类型标识和第二时间戳,确定第二索引信息。可选的,可以将第二消息类型标识和第二时间戳的组合,确定为第二索引信息,例如,假设第二消息类型标识为programwatching1,假设第二时间戳为1492776071020,则可以确定第二索引信息如下:programwatching1:1492776071020。当然,在实际应用过程中,第二索引信息中还可以包括预设前缀,例如,预设前缀可以为delayqueue:content,相应的,可以确定第二索引信息如下:delayqueue:content:programwatching1:1492776071020。在图3所示的实施例中,确定得到的第二索引信息第二时间戳相关,且第二时间戳与待存储消息的消息类型对应的时间粒度相关,因此,可以保证第二索引信息对应的消息集合中的消息的处理时刻在一个时间粒度内。进一步的,当一个消息类型对应多个消息类型标识时,可以实现将同一类型的消息均匀的分配到多个消息集合中,这样,可以实现由多个消息处理器对同一类型的消息进行并行处理。在上述任意一个实施例的基础上,可选的,可以通过如下可行的实现方式确定第二索引信息对应的第二索引信息集合(图2所示实施例中的s206),具体的,请参见图4所示的实施例。图4为本发明实施例提供的确定第二索引信息集合方法的流程示意图。请参见图4,该方法可以包括:s401、根据待存储消息的消息类型对应的时间精度,生成第一处理时刻对应的第三时间戳。每一种消息类型对应一种时间粒度和时间精度,时间精度为时间粒度的n倍,n为大于1的整数,时间精度对应的时长与消息处理器的处理周期的时长相同。可以根据实际需要设置消息类型对应的时间精度,可选的,可以根据对该种类型的消息进行处理的消息处理器的处理周期设置该消息类型对应的时间精度。在本发明实施例中,消息类型对应的时间精度为该消息类型对应的时间粒度的n倍,n可以为2、5、10、100等,可以根据实际需要设置n的大小。例如,假设消息类型对应的时间粒度为10毫秒,n为100,则该消息类型对应的时间精度为1000毫秒。可选的,可以先获取第一处理时刻的协调世界时utc时间戳,,并根据该utc时间戳和消息类型对应的时间精度,生成第一处理时刻对应的第三时间戳。可选的,第三时间戳=第一处理时刻的utc时间戳-第一处理时刻的utc时间戳%消息类型对应的时间精度。例如,假设第一处理时刻为2017年4月21日20点1分11秒22毫秒,该第一处理时刻的utc时间戳为1492776071022,再假设待存储消息的消息类型对应的时间粒度为1000毫秒,则第三时间戳为:1492776071022-1492776071022%1000=1492776071022-22=1492776071000。s402、根据第二消息类型标识、预设索引信息集合指示符和第三时间戳,确定第二索引信息集合的标识。预设索引信息集合指示符用于指示字符串为第二索引信息集合的标识,例如,预设索引信息集合指示符可以为indexset,当然,在实际应用过程中,可以根据实际需要设置该预设索引信息集合指示符。可选的,可以将第二消息类型标识、预设索引信息集合指示符、和第三时间戳的组合,确定为第二索引信息集合的标识,例如,假设第二消息类型标识为programwatching1,预设索引信息集合指示符为indexset,第三时间戳为1492776071000,则可以确定第二索引信息集合的标识如下:programwatching1:indexset:1492776071000。当然,在实际应用过程中,第二索引信息集合的标识中还可以包括预设前缀,例如,预设前缀可以为delayqueue:content,相应的,可以确定第二索引信息集合的标识如下:delayqueue:content:programwatching1:indexset:1492776071000。s403、根据第二索引信息集合的标识,判断存储介质中是否存在第二索引信息集合。若是,则执行s404。若否,则执行s405。s404、根据第二索引信息集合的标识,在存储介质中确定第二索引信息集合。若存储介质中存在第二索引信息集合,则根据第二索引信息集合的标识,在存储介质中确定第二索引信息集合。s405、在存储介质中创建第二索引信息集合。若存储介质中不存在第二索引信息集合,则在存储介质中创建第二索引信息集合。通过图4所示的实施例,可以方便、准确的确定得到第二索引信息对应的第二索引信息集合。下面,通过具体示例,对上述方法实施例所示的技术方案进行详细说明。示例性的,假设用户需要在2017年4月21日20点1分11秒22毫秒提示用户观看电视剧1,则在2017年4月20日17点1分13秒时,用户通过客户端向消息处理器发送电视观看通知类型的消息1,并在消息1中携带处理时刻2017年4月21日20点1分11秒22毫秒、电视剧1、消息类型(电视观看通知类型)。消息处理器接收到消息1之后,在消息1中获取处理时刻(2017年4月21日20点1分11秒22毫秒)和消息类型(电视观看通知类型),并获取电视观看通知类型对应的消息类型标识如下:programwatching0,programwatching1,programwatching2,programwatching3消息处理器获取接收到消息1的时刻2017年4月20日17点1分13秒的时间戳1492678873,并1492678872除以4取余得到数值为1,因此,可以将第一个消息类型标识(programwatching0)确定为消息1的对应的消息类型标识。消息处理器获取消息1的处理时刻(2017年4月21日20点1分11秒22毫秒)的utc时间戳为:1492776071022,消息处理器获取电视观看通知类型的时间粒度为:10毫秒,并根据utc时间戳1492776071022和时间粒度10毫秒,生成消息1的处理时刻对应的第二时间戳为:1492776071022-1492776071022%10=1492776071022-2=1492776071020。消息处理器根据消息1对应的消息类型标识(programwatching0)、第二时间戳(1492776071020)和预设前缀(delayqueue:content),生成消息1的索引信息1为:delayqueue:content:programwatching1:1492776071020。消息1的索引信息1为消息1所属的消息集合的标识。假设存储介质中包括索引信息1对应的消息集合1,则直接将消息1存储在消息集合1中。其中,消息集合1中所有的消息的类型均为电视观看通知类型、且消息集合1中所有消息的处理时刻对应的第二时间戳均为1492776071020,相应的,消息集合1中所有消息的处理时刻对应的utc时间戳在1492776071020-1492776071029之间。消息处理器获取电视观看通知类型的时间精度为:1000毫秒,并根据utc时间戳1492776071022和时间精度1000毫秒,生成消息1的处理时刻对应的第三时间戳为:1492776071022-1492776071022%1000=1492776071022-22=1492776071000。消息处理器根据消息1对应的消息类型标识(programwatching0)、预设索引信息集合指示符(indexset)、第三时间戳(1492776071000)、预设前缀(delayqueue:content),生成消息1对应的索引信息集合1的标识。delayqueue:content:programwatching1:indexset:1492776071000。假设存储介质中包括索引信息1对应的索引信息集合1,则直接将索引信息1存储在索引信息集合1中。其中,索引信息集合1中的所有索引信息对应的消息集合中的消息的处理时刻的utc时间戳均在1492776071001-1492776071999之间。在上述任意一个实施例的基础上,消息处理器可以通过如下可行的实现方式对缓存介质中的消息进行处理,具体的,请参见图5所示的实施例。图5为本发明实施例提供的消息处理方法的流程示意图。请参见图5,该方法可以包括:s501、确定当前时刻对应的第一索引信息集合。消息处理器通常周期性的对缓存介质中的待处理消息进行处理,消息处理器在每一个处理周期对待处理消息进行处理的过程相同,下面,以消息处理器在任意一个处理器周期对待处理消息进行处理的过程为例,对消息处理方法进行详细说明。当消息处理器在当前时刻需要对缓存介质中的待处理消息进行处理时,消息处理器确定当前时刻对应的第一索引信息集合,可选的,消息处理器可以根据如下可行的实现方式确定当前时刻对应的第一索引信息集合:消息处理器获取消息处理器对应的第一消息类型标识;根据消息处理器的处理周期,生成当前时刻对应的第一时间戳;根据第一目标消息类型、预设索引信息集合指示符和第一时间戳,确定第一索引信息集合的标识;根据第一索引信息集合的标识,确定第一索引信息集合。可选的,可以预先设置消息处理器与第一消息类型标识的对应关系,以使消息处理器可以根据该对应关系获取第一消息类型标识。消息处理器的处理周期的时长与第一消息类型标识对应的消息类型的时间精度的时长相同,可选的,获取第一时间戳的过程可以参见图4所示的实施例中的获取第三时间戳的过程,此处不再进行赘述。可选的,确定第一索引信息集合的标识的过程,可以参见图4所示实施例中的确定第二索引信息集合的标识的过程,此处不再进行赘述。当然,第一索引信息集合的标识中还可以包括预设前缀,例如,预设前缀可以为delayqueue:content。s502、根据第一索引信息集合中包括的索引信息,确定第一消息集合。消息处理器可能对应有并行消息处理器,由并行消息处理器与该消息处理器共同处理索引信息集合中的索引信息对应的消息集合中的待处理消息;相应的:消息处理器可以获取并行消息处理器的个数,并根据并行消息处理器的个数,在至少一个索引信息中确定消息处理器对应的第一索引信息;根据第一索引信息,确定第一消息集合。例如,假设索引信息集合中包括100个索引信息,相应的,索引信息集合对应100个消息集合,分别记为消息集合1-消息集合100,若消息处理器对应4个并行消息处理器,分别记为并行消息处理器1-并行消息处理器4,则消息处理器和并行消息处理器可以分别处理20个消息集合中的待处理消息,消息处理器和消息集合的对应关系可以如表2所示:表2消息处理器的标识消息集合的标识消息处理器消息集合1-消息集合20并行消息处理器1消息集合21-消息集合40并行消息处理器2消息集合41-消息集合60并行消息处理器3消息集合61-消息集合80并行消息处理器4消息集合81-消息集合100当然,在实际应用过程中,还可以根据每个消息处理器和并行消息处理器的处理效率,为消息处理器和并行消息处理器分配消息集合,例如,在初始时,为消息处理器和每一个并行消息处理器分配一个消息集合,在一个消息处理器或并行消息处理器对分配的消息集合中的待处理消息处理完成之后,再为消息处理器或并行消息处理器分配一个消息集合,直至索引信息集合中的索引信息对应的消息集合被分配完毕。s503、在第一消息集合中获取待处理消息,并处理第一消息集合中的待处理消息。在确定得到第一消息集合之后,对第一消息集合中的待处理消息进行处理。本发明实施例提供的消息处理方法,在存储介质中设置有索引信息集合,每一个索引信息集合中包括多个索引信息,每一个索引信息对应一个消息集合,消息集合中包括多个待处理消息,索引信息集合中每一个索引信息对应的消息集合中的待处理消息的处理时刻在当前时刻对应的第一时段之内,第一时段的时长与所述消息处理器的处理周期的时长相同,一个消息集合中的待处理消息的处理时刻在第一时段的一个子时段内。在当前时刻,当消息处理器需要对存储介质中的待处理消息进行处理时,先获取当前时刻对应的第一索引信息集合,根据索引信息集合中包括的索引信息,确定第一消息集合,并对第一消息集合中的待处理消息进行处理。在上述过程中,第一消息集合中的待处理消息的处理时刻均在当前时刻附近,这样,消息处理器无需遍历存储介质中的待处理消息,即可方便的获取得到需要在当前时刻处理的待处理消息,提高了消息处理器的工作效率,进而提高业务服务器的工作效率。下面,通过具体示例,对图5实施例所示的方法进行详细说明。示例性的,假设当前时刻为2017年4月21日20点1分11秒,再假设消息处理器1的处理周期为1秒(1000毫秒)。当消息处理器1需要在当前时刻进行消息处理时,消息处理器1通常查询预设对应关系,获取其对应的第一消息类型标识programwatching1。消息处理器根据其处理周期(1000毫秒),获取当前时刻对应的时间戳1492776071000,其中,具体获取过程可以参见图4所示的实施例,此处不再进行赘述。消息处理器根据第一消息类型标识(programwatching1)、预设索引信息集合指示符(indexset)、第一时间戳(1492776071000)和预设前缀(delayqueue:content),确定第一索引信息集合的标识为:delayqueue:content:programwatching1:indexset:149277607100。假设该第一索引信息集合中包括100个索引信息,该100个索引信息对应的消息集合记为消息集合1-消息集合100,。假设消息处理器1对应4个并行消息处理器,分别记为消息处理器2-消息处理器5,则消息处理器1可以根据消息处理器1-消息处理器5的处理效率,为该5个消息处理器分配消息集合,例如,在初始时,为该5个消息处理器和分配一个消息集合,在一个消息处理器对分配的消息集合中的待处理消息处理完成之后,再为该消息处理器分配一个消息集合,直至索引信息集合中的索引信息对应的消息集合被分配完毕。假设消息处理器1被分配的消息集合为消息集合1-消息集合20,则消息处理器1对消息集合1-消息集合20中的待处理消息进行处理。在上述任意一个实施例的基础上,可选的,缓存介质中的消息可以进行持久化存储,也可以进行非持久化存储,可选的,可以根据消息的类型确定消息是否进行持久化。当对消息进行持久化存储时,可以通过同步持久化或者异步持久化的方式进行存户。针对同步持久化的方式,消息处理器可以先将接收到的消息存储到持久化数据库中,再将消息存储到缓存中,该种消息存储方式的可靠性较高,但是对消息的存储效率较低,这种方式适用于对消息有高可靠性要求的场景。针对异步持久化的方式,消息处理器在内存中为每个消息队列维护一个静态内容的先入先出队列,接收到消息后先将消息写入该队列,每个先入先出队列对应一个异步线程,这些线程每隔预设时长执行一次,从先入先出队列中获取预设条消息,并将消息批量写入持久化数据库。针对非持久化的方式,消息处理器接收到消息后直接将消息写入缓存,该种方式的可靠性最低,但是处理速度最快,如果缓存因为异常重启,消息会丢失。这种方式适用于对消息处理性能要求很高,对可靠性要求不高的场景,比如用户预约需要在某个时刻提醒自己看指定的影视内容。针对上述的异步持久化的处理方式,在消息接收及存储过程中,如果消息接收的服务重启但是还没到批量写入到持久化数据库,部分消息会在内存中丢失导致对这些消息的持久化失败。为此,本发明提出的相应的应对方法为:在缓存中为每个内存的先进先出队列维护一个对应的key,其对应的内容的数据结构为hashmap,hashmap中的field为上文中的前缀+服务器名称+线程号(此处的线程为上文中异步持久化方式中每个先进先出队列对应的线程),hashmap中的value为线程第一次读取数据的时间,每次执行读取内容时的开始时间以及是否写入完毕的标志三者构成的组合。获取数据之前先更新本次任务读取内容开始时间,将写入完毕标志位清零,数据库写入成功之后将写入完毕标志位置位。如果消息接收服务因异常重启,每个线程的线程号会变化,上述动作继续在新线程号下维护。而重启之前上一次线程的执行情况会在缓存中留有快照。程序每次启动时都在缓存中检查是否留有上次执行时的快照,查找在本线程的启动处理时间和上个线程最后读取时间这个时间段中覆盖到的在缓存中存储的事件消息。将每个消息取出在数据库中判断是否已写入,如果没写入,则写入数据库。处理成功后,将上个线程的快照删除即可。在上述任意一个实施例的基础上,消息处理器还可以接收客户端发送的事件取消消息,根据该时间取消消息,删除缓存介质中的待处理消息。消息监控模块为每个消息队列在静态内存中维护一个先进先出的队列,任务将每个消息从缓存中删除后马上写入对应的先进先出队列。每个先进先出队列对应维护一个异步线程,这些线程每预设时长执行一次,从先入先出队列中获取预设条消息,将消息从数据库的事件表批量移到事件历史表中。为控制消息监控模块中每个任务并行执行的个数,防止任务过多导致内存不足进程挂掉。该模块中为每个任务维护一个程序内部全局静态计数器,定时任务每次启动时,数值加1,任务执行完时数值减1。任务启动时判断该数值,如果超过指定数值(默认20)则认为模块处理能力已经超过设计负载,该任务线程直接结束,同时进行告警。图6为本发明实施例提供的消息处理装置的结构示意图一。该消息处理装置可以设置在消息处理器中,请参见图6,该装置可以包括第一确定模块11、第二确定模块12、第一获取模块13和处理模块14,其中,所述第一确定模块11用于,确定当前时刻对应的第一索引信息集合,所述第一索引信息集合中包括至少一个索引信息,每个索引信息对应一个消息集合,每个消息集合中包括至少一个待处理消息;所述第二确定模块12用于,根据所述第一索引信息集合中包括的索引信息,确定第一消息集合;所述第一获取模块13用于,在所述第一消息集合中获取待处理消息;所述处理模块14用于,处理所述待处理消息;其中,所述第一索引信息集合中每一个索引信息对应的消息集合中的待处理消息的处理时刻在所述当前时刻对应的第一时段之内,所述第一时段的时长与所述消息处理器的处理周期的时长相同;一个消息集合中的待处理消息的处理时刻在所述第一时段的一个子时段内。本发明实施例提供的消息处理装置可以执行上述方法实施例所示的技术方案,其实现原理以及有益效果类似,此处不再进行赘述。在一种可能的实施方式中,所述第一确定模块11具体用于:获取所述消息处理器对应的第一消息类型标识;根据所述消息处理器的处理周期,生成所述当前时刻对应的第一时间戳;根据所述第一消息类型标识、预设索引信息集合指示符和所述第一时间戳,确定所述第一索引信息集合的标识;根据所述第一索引信息集合的标识,确定所述第一索引信息集合。在另一种可能的实施方式中,所述消息处理器对应有并行消息处理器,相应的,所述第二确定模块12具体用于:根据所述并行消息处理器的个数,在所述至少一个索引信息中确定所述消息处理器对应的第一索引信息;根据所述第一索引信息,确定所述第一消息集合。图7为本发明实施例提供的消息处理装置的结构示意图二。在图6所示实施例的基础上,请参见图7,所述装置还包括第二获取模块15、第三确定模块16和存储模块17,其中,所述第二获取模块15用于,获取待存储消息、及所述待存储消息的第一处理时刻;所述第三确定模块16用于,根据所述第一处理时刻,确定所述待存储消息对应的第二索引信息;所述存储模块17用于将所述待存储消息存储至所述第二索引信息对应的第二消息集合。在另一种可能的实施方式中,所述存储模块17具体用于:根据所述第二索引信息,判断存储介质中是否存在所述第二消息集合;若是,则将所述待存储消息存储至所述第二消息集合;若否,则根据所述第二索引信息在所述存储介质中创建所述第二消息集合,并将所述待存储消息存储至所述第二消息集合中。在另一种可能的实施方式中,所述装置还包括第四确定模块18,其中,所述第四确定模块18用于,在所述存储模块17根据所述第二索引信息创建所述第二消息集合之后,确定所述第二索引信息对应的第二索引信息集合;所述存储模块17还用于,将所述第二索引信息存储至所述第二索引信息集合。在另一种可能的实施方式中,所述第三确定模块16具体用于:获取所述待存储消息的消息类型;在所述待存储消息的消息类型对应的至少一个消息类型标识中,确定第二消息类型标识;根据所述待存储消息的消息类型对应的时间粒度,生成所述第一处理时刻对应的第二时间戳;根据所述第二消息类型标识和所述第二时间戳,确定所述第二索引信息。在另一种可能的实施方式中,所述第四确定模块18具体用于:根据所述待存储消息的消息类型对应的时间精度,生成所述第一处理时刻对应的第三时间戳;所述时间精度为所述时间粒度的n倍,所述n为大于1的整数,所述时间精度对应的时长与所述消息处理器的处理周期的时长相同;根据所述第二消息类型标识、预设索引信息集合指示符和所述第三时间戳,确定所述第二索引信息集合的标识;根据所述第二索引信息集合的标识,判断所述存储介质中是否存在所述第二索引信息集合;若是,则根据所述第二索引信息集合的标识,在所述存储介质中确定所述第二索引信息集合;若否,则在所述存储介质中创建第二索引信息集合。本发明实施例提供的消息处理装置可以执行上述方法实施例所示的技术方案,其实现原理以及有益效果类似,此处不再进行赘述。本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。最后应说明的是:以上各实施例仅用以说明本发明实施例的技术方案,而非对其限制;尽管参照前述各实施例对本发明实施例进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明实施例方案的范围。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1