延迟消息推送方法、装置、计算机设备及存储介质与流程

文档序号:15143886发布日期:2018-08-10 20:13阅读:157来源:国知局

本发明涉及信息处理领域,尤其涉及一种延迟消息推送方法、装置、计算机设备及存储介质。



背景技术:

当前消息推送平台向特定用户发送消息时,可以发送实时消息也可以发送延迟消息。其中,实时消息是指消息形成之后即可被发送给特定用户,以使特定用户可实时获取到的消息;相应地,延迟消息是指消息形成之后,若处于免打扰时间段内则暂停发送,直到处于非免打扰时间之后才发送,使得特定用户获取的消息。当前延迟消息的发送完全依赖于数据库,当延迟消息处于免打扰时间段内,则需将该延迟消息存储在数据库中,数据库集群中的每一机器都会起一个线程去抢占数据库中的延迟消息并逐条处理,对数据库的存储空间造成巨大压力,且增加线程资源的消耗。而且,随着时间的推移,数据库中的延迟消息不断增加,导致对数据库的存储空间需求不断增加,还需增加人工定期清理延迟消息,以完成数据库中存储空间的回收工作,导致成本增加。



技术实现要素:

本发明实施例提供一种延迟消息推送方法、装置、计算机设备及存储介质,以解决当前延迟消息推送过程造成线程资源消耗较大的问题。

第一方面,本发明实施例提供一种延迟消息推送方法,包括:

获取待推送消息,所述待推送消息包括消息类型和消息模板;

基于所述消息类型,将所述待推送消息缓存在与所述消息类型相对应的目标消息中间件上;

根据所述消息模板确定所述待推送消息是否为延迟消息,若所述待推送消息为所述延迟消息,则将所述待推送消息缓存在所述目标消息中间件上创建的延迟队列上;

采用监听线程轮询监听所述延迟队列,并对所述延迟队列中缓存的待推送消息进行推送处理。

第二方面,本发明实施例提供一种延迟消息推送装置,包括:

消息获取模块,用于获取待推送消息,所述待推送消息包括消息类型和消息模板;

消息缓存模板,用于基于所述消息类型,将所述待推送消息缓存在与所述消息类型相对应的目标消息中间件上;

延迟判断处理模块,用于根据所述消息模板确定所述待推送消息是否为延迟消息,若所述待推送消息为所述延迟消息,则将所述待推送消息缓存在所述目标消息中间件上创建的延迟队列上;

监听处理模块,用于采用监听线程轮询监听所述延迟队列,并对所述延迟队列中缓存的待推送消息进行推送处理。

第三方面,本发明实施例提供一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如所述延迟消息推送方法的步骤。

第四方面,本发明实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现所述延迟消息推送方法的步骤。

本发明实施例提供的延迟消息推送方法、装置、计算机设备及存储介质中,根据获取到的待推送消息的消息类型,将待推送消息缓存在与消息类型相对应的目标消息中间件上,通过采用目标消息中间件实现对待推送消息的集中推送管理,可有利于提高待推送消息的推送效率并减少线程资源的消耗。根据待推送消息的消息模板确定其是否为延迟消息,以将属于延迟消息的待推送消息缓存在目标消息中间件上创建的延迟队列上,以实现对延迟消息进行集中管理,有助于提高属于延迟消息的待推送消息的推送管理效率。采用监听线程轮询监听延迟队列,对延迟队列中缓存的待推送消息进行及时推送处理,可保证待推送消息能够得到及时处理,提高消息处理的时效性。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1是本发明实施例1中延迟消息推送方法的一流程图。

图2是图1中步骤s20的一具体流程图。

图3是图1中步骤s40的一具体流程图。

图4是本发明实施例2中延迟消息推送装置的一原始框图。

图5是本发明实施例4中计算机设备的一原始框图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

实施例1

图1示出本实施例中延迟消息推送方法的一流程图。该延迟消息推送方法应用在消息推送平台中,具体应用在消息推送平台的服务器(该服务器包括但不限于本实施例提及的主服务器和个推服务器)上,用于对需要通过消息推送平台进行推送的消息进行管理,尤其用于对延迟消息的推送过程进行管理,以避免延迟消息对消息推送平台的存储空间和线程资源造成巨大的消耗,影响消息推送平台的正常工作。如图1所示,该延迟消息推送方法包括如下步骤:

s10:获取待推送消息,待推送消息包括消息类型和消息模板。

消息推送平台的主服务器获取业务平台发送的至少一个待推送消息。该主服务器是消息推送平台上设置的用于进行消息推送管理的服务器。该业务平台是消息推送平台所服务的app对应的平台,每一app对应一具体业务。待推送消息是业务平台基于自身业务需求形成并向特定用户推送的消息。业务平台的待推送消息需要通过消息推送平台推送给特定用户。例如,某银行开发一款理财app,该理财app对应的平台为一具体的业务平台,若该业务平台需要给某些用户推送关于理财产品的消息(则该消息为待推送消息)时,可向消息推送平台发送该待推送消息,以使消息推送平台获取到该待推送消息。

由于待推送消息需发送给特定用户,因此,待推送消息中还需携带有用户id,以便基于该用户id进行查询,以获取需要接收该待推送消息的特定用户所使用的客户端。其中,用户id是用于识别用户的标识,可以是指用户在app对应的业务平台上的用户名或用户账号,也可以是用户的手机号或电子邮箱等联系方式。待推送消息中携带有用户id,可确保该待推送消息被消息推送平台准确无误地推送给特定用户,以使特定用户获取待推送消息的内容。可以理解地,每一待推送消息中携带的用户id可以是一个,也可以是一批(即至少一个)。

消息类型是基于待推送消息的受众(即接收消息的特定用户)的数量进行划分的类型。该消息类型包括单条任务类型和批量任务类型。单条任务类型是指该待推送消息是需单独推送给一个特定用户的消息类型。例如,根据某一用户上月的信用卡消费情况,在还款日之前,消息推送平台会发送与该用户对应的还款消息给该用户,以提醒该用户需要还款的金额和还款时间,此时,该还款消息即为单条任务类型。相应地,批量任务类型是指该待推送消息是需批量推送给一批特定用户的消息类型。例如,某一app对应的业务平台想要给其平台的会员用户推送会员福利消息,此时需将相同内容的会员福利消息推送给平台的所有会员用户,此时,该会员福利消息为批量任务类型。

进一步地,批量任务类型包括全网任务类型,即全网任务类型是批量任务类型的一种具体形式,具体是指该待推送消息需批量推送给使用特定的设备操作系统的一批特定用户的消息类型。例如,iphonex的促销活动会发给所有与手机销售相关的平台,以满足相应的业务需求。

本实施例中,业务平台将待推送消息发送给消息推送平台时,每一待推送消息携带有接口参数,该接口参数可以是用于识别消息类型的参数标识,如用1代表单条任务类型,用2代表批量任务类型,用3代表全网批量任务类型。消息推送平台在获取到该待推送消息时,即可根据该接口参数获取其对应的消息类型,其过程简单方便。

消息模板是指包括不同消息内容的模板,是消息推送平台中用于生成或获取不同的待推送消息的模板。消息推送平台在生成或获取待推送消息时,需调用预先设置的消息模板,并对选取的消息模板的内容进行调整修改,以形成需要进行推送的待推送消息。本实施例中的消息模板可以为通用消息模板和专用消息模板,通用消息模板是指可以被推送给多个特定用户的消息模板,专用消息模板是指需被推送给单个特定用户的消息模板。一般而言,通用消息模板一般对应于批量任务类型这一消息类型,无需加入用户专有的用户信息。例如,在给某一业务平台的会员用户推送新的活动消息时,可以调用通用消息模板生成待推送消息。相应地,专用消息模板一般对应于单条任务类型这一消息类型,基于专用消息模板生成或获取待推送消息时,需加入用户专有的用户信息。例如,给每一用户推送还款信息时,由于每一用户的信用卡卡号、还款时间和金额等用户信息均不相同,因此在获取还款信息的专用消息模板后,还需基于用户id获取对应的用户信息,并将该用户信息与专用消息模板结合,以形成待推送消息。

消息模板中携带有可推送时间,可根据消息模板中携带的可推送时间确定其为延迟消息还是实时消息(即非延迟消息)。可推送时间是该待推送消息可以推送给一个或者一批特定用户的时间段。与可推送时间相对应的是免打扰时间,该免打扰时间是消息推送平台中不能向一个或一批特定用户推送消息的时间段。本实施例中,可推送时间和免打扰时间均可指代每天的一个时间段。例如,每天9:00-17:00为免打扰时间,则17:00-次日9:00为可推送时间。可以理解地,可推送时间可以为全天,即24小时。若可推送时间为全天时,则消息推送平台在获得该待推送消息时,即可将其推送给特定用户,使得特定用户可实时获取该待推送消息,则此时该待推送消息为实时消息。相应地,若可推送时间不为全天,即存在一具体时间段的免打扰时间或者可推送时间,则消息推送平台在获取到待推送消息之后,只有在可推送时间内或者免打扰时间外,才可将其推送其特定用户,使得特定用户延时获取该待推送消息,则此时该待推送消息为延迟消息。

s20:基于消息类型,将待推送消息缓存在与消息类型相对应的目标消息中间件上。

其中,消息中间件(adaptivemessagequeue,简称:amq)是指消息推送平台上配置的用于缓存数据库的消息或其他数据的队列。消息推送平台中配置至少一个消息中间件,每一消息中间件用于存储一种消息类型的消息。消息中间件是一个高性能的消息中间件,amq提供了基于publish/subscribe的消息通讯服务,同时amq可以提供服务总线功能,供其他进程可以在amq上进行服务注册,业务平台可以通过进程间通讯api(即cedaapi)来访问amq上注册的服务。采用消息中间件替代传统数据库存储待推送消息,并通过数据库集群中线程轮询方式,可以提高待推送消息的处理效率,并有效减少线程资源的消耗。

具体地,该消息中间件依据其消息类型具体可以划分为第一消息中间件、第二消息中间件和第三消息中间件。其中,第一消息中间件为用于缓存消息类型为单条任务类型的消息的消息中间件。第二消息中间件为用于缓存消息类型为批量任务类型的消息的消息中间件。第三消息中间件为用于缓存消息类型为全网任务类型的消息的消息中间件。本实施例中,与消息推送消息的消息类型相对应的消息中间件为目标消息中间件,即目标消息中间件有可能为第一消息中间件,也有可能为第二消息中间件或者第三消息中间件。

在一具体实施方式中,如图2所示,步骤s20,即基于消息类型,将待推送消息缓存在与消息类型相对应的目标消息中间件上,具体包括如下步骤:

s21:若消息类型为单条任务类型,则将待推送消息缓存在与单条任务类型相对应的第一消息中间件上。

具体地,若待推送消息的消息类型为单条任务类型,则说明该待推送消息只需推送给一个用户id对应的客户端,此时,将该待推送消息缓存在与单条任务类型相对应的第一消息中间件上。第一消息中间件是消息推送平台上配置的专门用于缓存并管理消息类型为单条任务类型的待推送消息的队列,用于对消息类型为单条任务类型的待推送消息进行集中推送管理,以保证单条任务类型的待推送消息的推送效率,减少数据库中线程资源的消耗。

s22:若消息类型为批量任务类型,则对待推送消息进行任务拆分,以拆分形成至少两个批量子任务消息,并将至少两个批量子任务消息分别存储到与批量任务类型相对应的第二消息中间件上。

具体地,若待推送消息的消息类型为批量任务类型,则说明该待推送消息需要被推送给一批用户id(即至少一个用户id)对应的客户端,此时,将该待推送消息缓存在与批量任务类型相对应的第二消息中间件上。第二消息中间件是消息推送平台上配置的专门用于缓存并管理消息类型为批量任务类型的待推送消息的队列,用于对消息类型为批量任务类型的待推送消息进行集中推送管理,以保证批量任务类型的待推送消息的推送效率,减少数据库中线程资源的消耗。

进一步地,由于批量任务类型对应的待推送消息所要推送的用户较多,若将所有待推送消息仅通过一个线程或队列进行推送管理,可能使得推送过程等待时间较长,影响消息推送效率。为避免采用单一线程或队列对消息类型为批量任务类型的待推送消息进行推送而影响消息推送效率的问题,本实施例中,需要采用预设的划分规则对消息类型为批量任务类型的待推送消息进行拆分,以将其拆分成至少两个批量子任务消息。该划分规则是预先设置的用于将待推送消息划分成至少两个批量子任务消息的规则。

具体地,可以先获取该消息类型为批量任务类型的待推送消息的用户数据量,采用预设的分块算法对该用户数据量与预设处理量进行比较运算,确定对应的分块数量,并将该待推送消息按分块数量进行划分,以确定至少两个批量子任务消息。其中,预设处理量为消息推送平台预先设置的数据量,一般用于限定每一消息中间件可以批量推送给特定用户的用户量。本实施例中,分块算法为其中,a为用户数据量,b为预设处理量,n为分块数量,表示向上取整。若用户数据量a小于预设处理量b,则将该待推送消息进行划分的分块数量为2,即将待推送消息划分成2个批量子任务消息,以使待推送消息进行并行推送处理,提高推送效率。若用户数量量a大于或等于预设处理量b,则先采用用户数量量a除以预设处理b以获取商,再对商进行向上取整,以确定其分块数量为n,由于a≥b,则n为≥2的整数,此时需将待推送消息划分成n个批量子任务消息,以实现对待推送消息进行并行推送处理,提高消息推送效率。进一步地,n个批量子任务消息需分别存储到与批量任务类型相对应的一个第二消息中间件上,从而确保对批量子任务消息进行并行处理。

步骤s21-s22中,依据待推送消息的消息类型的不同,将该待推送消息分别缓存在与消息类型相对应的目标消息中间件上,以实现对消息类型不同的待推送消息进行集中管理和集中推送,以提高消息推送效率;而且,由于采用目标消息中间件对所有待推送消息进行集中管理,无需使得数据库集群中的每一机器分别起线程对待推送消息进行处理,可以有效减少线程资源的消耗。进一步地,对于消息类型为批量任务类型的待推送消息,需将其拆分形成至少两个批量子任务消息,以将其分别缓存在与批量任务类型相对应的至少两个第二消息中间件上,以实现对消息类型为批量任务类型的待推送消息进行并行推送处理,从而提高消息推送效率。

s30:根据消息模板确定待推送消息是否为延迟消息,若待推送消息为延迟消息,则将待推送消息缓存在目标消息中间件上创建的延迟队列上。

具体地,根据消息模板确定待推送消息是否为延迟消息,以确定该待推送消息是需要通过消息推送平台实时推送给特定用户的客户端,还是延迟到可推送时间(即免打扰时间之外)再推送给特定用户的客户端,以避免在免打扰时间推送消息,打扰特定用户的正常生活或工作,影响其对消息推送的业务平台的服务满意度。

由于待推送消息的消息模板中携带有可推送时间,可以根据消息模板中携带的可推送时间确定其是否为延迟消息。即若可推送时间为全天(即24小时),则说明其可实时给特定用户推送消息,此时,该待推送消息为非延迟消息(即实时消息);相应地,若可推送时间为某一具体时间段(如9:00-17:00),则说明只能在该具体时间段推送消息,此时,该待推送消息为延迟消息。

其中,延迟队列是目标消息中间件上创建的专门用于缓存延迟消息的队列。在目标消息中间件上对其缓存的待推送消息进行处理时,一般依据先进先出的处理原则对队列中的消息进行处理,由于延迟消息不能实时进行推送处理,如果将延迟消息与非延迟消息放在同一队列中,可能使得非延迟消息需等待先进入队列的延迟消息处理完才能进行推送处理,使得整个消息推送过程受限于延迟消息的可推送时间,因此,需给延迟消息创建对应的延迟队列。本实施例中,将确定为延迟消息的待推送消息缓存到目标消息中间件上创建的延迟队列上,以使其与非延迟消息分别处理,避免影响非延迟消息的推送效率,而且,可以通过对延迟队列中的待推送消息进行集中推送管理,也可以提高推送管理效率。

s40:采用监听线程轮询监听延迟队列,并对延迟队列中缓存的待推送消息进行推送处理。

其中,监听线程是用于监听队列中是否有特定事件发生的线程。本实施例中的队列具体是目标消息中间件,尤其是指目标消息中间件上创建的延迟队列。相应地,特定事件可以是指有待推送消息进入队列这一事件。采用监听线程轮询监听延迟队列,具体是指在监听线程启动后,该监听线程循环地去询问延迟队列中是否有新的待推送消息加入,以便后续对新加入延迟队列的待推送消息进行推送处理,从而保证对延迟队列中的待推送消息进行处理的时效性,避免待推送消息进入延迟队列后一直得不到处理。

本实施例中可以采用元数据控制器(metadatacontroller,以下简称mdc)作为监听线程,以轮询监听延迟队列中是否存在新入延迟队列的待推送消息,并进行推送处理。mdc作为监听线程,用于实时监听延迟队列中的待推送消息,以便对其进行及时处理,以保证延迟队列中的待推送消息处理过程的时效性,并有利于保障消息推送效率,避免因没有及时了解延迟队列中缓存的待推送消息的状态而没有进行推送处理的情况发生。

在一具体实施方式中,如图3所示,步骤s40,即采用监听线程轮询监听延迟队列,并对延迟队列中缓存的待推送消息进行推送处理,具体包括如下步骤:

s41:采用监听线程轮询监听延迟队列中的待推送消息,获取目标推送消息。

具体地,采用监听线程轮询监听延迟队列中的待推送消息,若监听线程所要监听的事件为待推送消息进入延迟队列这一特定事件,则监听线程无限循环地询问延迟队列中是否有新的待推送消息进入,以实时了解延迟队列中的消息的状态,从而确保对延迟队列中的待推送消息进行及时处理。其中,目标推送消息是监听线程在监听延迟队列过程中,确定的需要进行推送处理的待推送消息。

由于目标消息中间件上创建的延迟队列可能是第一消息中间件创建的延迟队列,也可能是第二消息中间件创建的延迟队列,因此,其缓存的待推送消息可以是消息类型为单条任务类型的待推送消息,也可以是消息类型为批量任务类型的待推送消息。若延迟队列中缓存的待推送消息的消息类型为批量任务类型,则每一第二消息中间件中缓存的待推送消息为批量子任务消息,在采用监听线程轮询监听延迟队列的待推送消息时,获取到的目标推送消息即为目标子任务消息。其中,目标子任务消息是监听线程在监听第二消息中间件创建的延迟队列过程中,确定的需要进行推送处理的批量子任务消息。

s42:若目标推送消息的消息类型为单条任务类型,则在系统当前时间为可推送时间时,将目标推送消息发送给个推服务器,以使个推服务器推送接收到的目标推送消息。

其中,个推服务器是指消息推送平台上用于向个人推送消息的服务器,该个推服务器与消息推送平台的主服务器相连。由于第一消息中间件创建的延迟队列用于缓存的延迟消息,且其消息类型为单条任务类型,在步骤s41中采用监听线程轮询监听第一消息中间件创建延迟队列时,确定需要进行处理的待推送消息即为目标推送消息。本实施例中,由于每一待推送消息的消息模板中均携带有可推送时间,因此,延迟队列中的每一延迟消息中携带有可推送时间。系统当前时间是指消息推送平台的系统时钟在当前时刻对应的时间。对于第一消息中间件创建的延迟队列上的目标推送消息,需获取目标推送消息的可推送时间,在系统当前时间为可推送时间(即系统当前时间在可推送时间内),则说明可以将该目标推送消息推送给特定用户,因此,需将该目标推送消息发送给个推服务器,以使个推服务器实时推送所接收到的目标推送消息,从而使得每一目标推送消息在可推送时间内可被及时推送到相应的用户id对应的客户端。

s43:若目标推送消息的消息类型为批量任务类型,则目标推送消息为目标子任务消息,将消息状态数据表中的目标子任务消息的状态更新为待推送状态,并在系统当前时间为可推送时间时,将目标子任务消息发送给个推服务器,以使个推服务器推送接收到的目标子任务消息。

本步骤中的目标推送消息是缓存在第二消息中间件创建的延迟队列上的延迟消息,且其消息类型为批量任务类型,在步骤s41中采用监听线程轮询监听第二消息中间件上的延迟队列时,确定需要进行处理的待推送消息即为目标推送消息。如步骤s22所示,在消息类型为批量任务类型时,需将消息类型为批量任务类型的待推送消息划分成至少两个批量子任务消息并分别上传到第二消息中间件上,故此时获取到的目标推送消息即为需要进行推送处理的批量子任务消息(即目标子任务消息)。

消息状态数据表是预先存储在消息推送平台上的用于记录数据库中的消息的状态的数据表。消息状态数据表中的消息状态包括未推送状态,待推送状态和已推送状态。其中,未推送状态是指还没有进行推送准备的状态;待推送状态是已经做好推送准备,等待时间达到即可进行推送的状态;已推送状态是已经向特定用户对应的客户端推送的状态。

本实施例中,每一待推送消息进入延迟队列时,默认设置其对应的消息状态为未推送状态。当监听线程轮询监听到需要进行推送准备的待推送消息时,则该待推送消息为目标推送消息,此时需将其对应的消息状态更新为待推送状态。当消息推送平台的系统当前时间在可推送时间内时,说明该目标推送消息可以被推送给特定用户,此时,需将目标推送消息(即本步骤中的目标子任务消息)发送给个推服务器,以使个推服务器将目标推送消息发送给批量用户id对应的客户端,以实现对延迟消息的批量推送处理。在个推服务器将消息类型为批量任务类型待推送消息推送给特定用户(即用户id对应的客户端)时,需将其消息状态更新为已推送状态,以说明该待推送消息已经被推送给特定用户。

进一步地,已推送状态包括推送成功状态和推送失败状态。推送成功状态是指已经推送且顺利推送给特定用户的状态。推送失败状态是指已经推送但没有推送到特定用户的状态。导致消息处于推送失败状态的原因有多种,可以是消息在推送过程中因服务器宕机或重启而导致正在推送的消息没有顺利推送给特定用户。为避免消息丢失的情况发生,消息推送平台的主服务器可定时监控其数据库中的消息状态数据表,并将消息状态为推送失败状态的消息重新推送给其特定用户,以避免相应的消息没有推送到特定用户,从而使得该特定用户无法及时获知其所要了解的消息。

进一步地,消息推送平台的主服务器还可定时监控其数据库中的消息状态数据表,并定时清除消息状态为推送成功状态的消息,以达到节省数据库的存储空间的目的。可以理解地,消息推送平台每获取一待推送消息时,将其消息推送状态默认设置为未推送状态;在对待推送消息进行时间校验或设备校验之后,对校验通过的待推送消息的消息状态更改为待推送状态;在推送之后依据获取到的反馈信号分别将其消息状态更改为推送成功状态或推送失败状态,以便基于消息状态数据表中的消息状态实时了解不同业务平台的待推送消息的状态。

本实施例中,数据库具体为redis数据库,redis数据库是一种存储键值数据的数据库。其中,redis是一个键值(key-value)存储系统,支持存储多种value类型的数据,value类型包括string(字符串)、list(链表)、set(集合)、zset(sortedset,有序集合)和hash(哈希类型)。redis支持主从机同步,可以从主服务器向任意数量的从服务器上同步数据,也可以向与每一从服务器关联的其他从服务器对应的主服务器同步数据,存储数据的存储效率高。

步骤s41-s43中,通过采用监听线程轮询监听延迟队列中的待推送消息,以确定每一延迟队列中需要进行推送处理的目标推送消息,从而确保对延迟队列中的待推送消息进行及时处理。对于延迟队列中消息类型为单条任务类型的目标推送消息,由于其只需推送给一个用户(即一个用户id对应的客户端),推送过程所需时间较短,可实现在系统当前时间在可推送时间内时即可进行消息推送,以提高消息推送的效率。对于延迟队列中消息类型为批量任务类型的目标推送消息,由于其需要被推送给批量用户(即至少一个用户id对应的客户端),推送过程所需时间较长,可通过先更新其消息状态为待推送状态以等待进行推送处理,使得在系统当前时间在可推送时间时,将待推送状态的目标推送消息进行推送处理,可实现对批量任务类型的待推送消息进行有序推送,无需数据库集群中的机器中创建多个线程进行管理,从而有效节省数据库中的线程资源。

s50:若待推送消息为非延迟消息,则将待推送消息发送给个推服务器,以使个推服务器实时推送接收到的待推送消息。

其中,个推服务器是指消息推送平台上用于向个人推送消息的服务器,该个推服务器与消息推送平台的主服务器相连。本实施例中的非延迟消息即为实时消息,是消息推送平台可以随时推送给特定用户的消息。当消息推送平台的主服务器在基于待推送消息的消息模板确定该待推送消息为非延迟消息时,说明该待推送消息可实时推送给特定用户,因此,可将该待推送消息发送给个推服务器,由个推服务器基于该待推送消息中的用户id发送给对应的客户端,以实现实时定向地向特定用户推送该待推送消息的目的。

本实施例所提供的延迟消息推送方法中,根据获取到的待推送消息的消息类型,将待推送消息缓存在与消息类型相对应的目标消息中间件上,可以减少对数据库的存储空间的压力,通过采用目标消息中间件实现对待推送消息的集中推送管理,可有利于提高待推送消息的推送效率并减少线程资源的消耗。根据待推送消息的消息模板确定其是否为延迟消息,以将属于延迟消息的待推送消息缓存在目标消息中间件上创建的延迟队列上,以实现对延迟消息进行集中管理,有助于提高属于延迟消息的待推送消息的推送管理效率。采用监听线程轮询监听延迟队列,对延迟队列中缓存的待推送消息进行及时推送处理,可保证待推送消息能够得到及时处理,提高消息处理的时效性。

在一具体实施方式中,如上所述,批量任务类型包括全网任务类型这一种具体形式,全网任务类型这一消息类型对应的待推送消息中,其消息模板中携带的可推送时间为全天(即24小时),不存在免打扰时间,因此,全网任务类型对应的待推送消息均为非延迟消息(即实时消息)。此时,步骤s22中,基于消息类型,将待推送消息缓存在与消息类型相对应的目标消息中间件上,具体还包括:若消息类型为全网任务类型,则待推送消息为非延迟消息,将待推送消息缓存在与全网任务类型相对应的第三消息中间件上。

具体地,若确定待推送消息的消息类型为全网任务类型时,则说明该待推送消息需被实时推送给一批用户id(即至少一个用户id)对应的客户端。第三消息中间件是消息推送平台上配置的专门用于缓存消息类型为全网任务类型的待推送消息的队列,用于对消息类型为全网任务类型的待推送消息进行集中推送管理,以提高消息推送效率。

采用监听线程轮询监听第三消息中间件中的待推送消息,获取目标推送消息,并将目标推送消息发送给个推服务器,以使个推服务器实时推送接收到的目标推送消息。

其中,监听线程是用于监听队列中是否有特定事件发生的线程。本实施例中,采用监听线程轮询监听第三消息中间件上是否有新的待推送消息进入,若有新的待推送消息进入,则该待推送消息即为目标推送消息。由于第三消息中间件上的所有待推送消息均为非延迟消息,需进行实时推送,因此,在获取目标推送消息时,即可将该目标推送消息发送给个推服务器,以使个推服务器实时推送接收到的目标推送消息。

该具体实施方式中,由于全网任务类型的待推送消息既为批量任务类型的一种具体形式,也是非延迟消息,因此其消息推送过程存在一定特殊性,即在将全网任务类型对应的待推送消息缓存至目标消息中间件后,无需再判断待推送消息是否为延迟消息,以节省相应的处理过程。并且,将所有消息类型为全网任务类型的待推送消息缓存在对应的第三消息中间件上,可实现对该消息类型的所有待推送消息的集中管理,可有利消息推送处理的效率。另外,由于采用监听线程轮询监听第三消息中间件上的待推送消息,可保证第三消息中间件上的待推送消息能够得到及时处理,提高消息处理的时效性。

应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。

实施例2

图4示出与实施例1中延迟消息推送方法一一对应的延迟消息推送装置的原理框图。如图4所示,该延迟消息推送装置包括消息获取模块10、消息缓存模板20、延迟判断处理模块30、监听处理模块40和非延迟处理模块50。其中,消息获取模块10、消息缓存模板20、延迟判断处理模块30、监听处理模块40和非延迟处理模块50的实现功能与实施例1中延迟消息推送方法对应的步骤一一对应,为避免赘述,本实施例不一一详述。

消息获取模块10,用于获取待推送消息,待推送消息包括消息类型和消息模板。

消息缓存模板20,用于基于消息类型,将待推送消息缓存在与消息类型相对应的目标消息中间件上。

延迟判断处理模块30,用于根据消息模板确定待推送消息是否为延迟消息,若待推送消息为延迟消息,则将待推送消息缓存在目标消息中间件上创建的延迟队列上。

监听处理模块40,用于采用监听线程轮询监听延迟队列,并对延迟队列中缓存的待推送消息进行推送处理。

进一步地,消息缓存模板20包括第一消息缓存单元21和第二消息缓存单元22。

第一消息缓存单元21,用于在消息类型为单条任务类型时,将待推送消息缓存在与单条任务类型相对应的第一消息中间件上。

第二消息缓存单元22,用于在消息类型为批量任务类型时,对待推送消息进行任务拆分,以拆分形成至少两个批量子任务消息,并将至少两个批量子任务消息分别存储到与批量任务类型相对应的第二消息中间件上。

其中,目标消息中间件包括第一消息中间件和第二消息中间件。

优选地,延迟消息中携带有可推送时间。

监听处理模块40具体包括目标消息获取单元41、第一监听处理单元42和第二监听处理单元43。

目标消息获取单元41,用于采用监听线程轮询监听延迟队列中的待推送消息,获取目标推送消息。

第一监听处理单元42,用于在目标推送消息的消息类型为单条任务类型时,则在系统当前时间为可推送时间时,将目标推送消息发送给个推服务器,以使个推服务器推送接收到的目标推送消息。

第二监听处理单元43,用于在目标推送消息的消息类型为批量任务类型,则目标推送消息为目标子任务消息,将消息状态数据表中目标子任务消息的状态更新为待推送状态,并在系统当前时间为可推送时间时,将目标子任务消息发送给个推服务器,以使个推服务器推送接收到的目标子任务消息。

优选地,延迟消息推送装置还包括非延迟处理模块50。

非延迟处理模块50,用于在待推送消息为非延迟消息时,将待推送消息发送给个推服务器,以使个推服务器实时推送接收到的待推送消息。

优选地,消息缓存模板20还包括第三消息缓存单元23,用于在消息类型为全网任务类型时,则待推送消息为非延迟消息,将待推送消息缓存在与全网任务类型相对应的第三消息中间件上。

监听处理模块40还包括第三监听处理单元44,用于采用监听线程轮询监听第三消息中间件中的待推送消息,获取目标推送消息,并将目标推送消息发送给个推服务器,以使个推服务器实时推送接收到的目标推送消息。

其中,目标消息中间件还包括第三消息中间件。

实施例3

本实施例提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现实施例1中延迟消息推送方法,为避免重复,这里不再赘述。或者,该计算机程序被处理器执行时实现实施例2中延迟消息推送装置的各模块/单元的功能,为避免重复,这里不再赘述。

可以理解地,该计算机可读存储介质可以包括:能够携带计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、电载波信号和电信信号等。

实施例4

图5是本发明一实施例提供的计算机设备的示意图。如图5所示,该实施例的计算机设备60包括:处理器61、存储器62以及存储在存储器62中并可在处理器61上运行的计算机程序63。处理器61执行计算机程序63时实现上述实施例1中延迟消息推送方法的步骤,例如图1所示的步骤s10-s50。或者,处理器61执行计算机程序63时实现实施例2中延迟消息推送装置的各模块/单元的功能,例如图5所示消息获取模块10、消息缓存模板20、延迟判断处理模块30、监听处理模块40和非延迟处理模块50的功能。

所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。

以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1