消息推送方法、装置及系统,计算机存储介质和电子设备与流程

文档序号:21542383发布日期:2020-07-17 17:45阅读:100来源:国知局
消息推送方法、装置及系统,计算机存储介质和电子设备与流程

本申请涉及计算机信息处理技术领域,具体涉及一种分布式消息的推送方法及装置,以及一种分布式消息推送系统和分布式消息存储系统的扫描方法。本申请同时涉及一种计算机存储介质和电子设备。



背景技术:

分布式消息推送系统是构建应用系统和操作系统之间的桥梁,并对应用系统和操作系统之间的关系进行分析解耦,进而在二者之间完成并记录消息的传递。

在可靠传输的分布式消息推送系统中,服务端在将消息推送给目标的客户端之后,需要等待客户端的ack应答,只有收到ack应答的推送才可以认为推送成功。但对于部分异常情况,客户端并没有回复ack应答的场景,服务端需要识别这种错误状态并存储,然后需要在合适的时机尝试重新推送,直到客户端回复ack应答,这种异常情况包括但不限于:

1.首次推送消息时,客户端不在线。

2.客户端本地处理错误,没有回复ack应答。

3.客户端网络异常,ack应答丢失。

在传统的消息推送领域,解决消息推送状态确认且保证系统可靠,通常需要借助外部持久化kv存储来存储每次推送的事件,其中kv存储是一种数据按照键值对的形式进行组织的存储方式。通常,推送开始时将推送事件写入kv存储,推送完成收到客户端的ack应答后再删除外部kv存储中的推送事件,同时服务端定期轮询查找kv存储中没有推送成功的事件,做重试处理。该方法存在以下缺点:

1.需要依赖外部持久化的kv存储,系统部署和实施的成本很高。

2.消息推送各个环节都需要读写外部kv存储,推送延迟依赖于操作外部kv存储的耗时,系统性能指标受限于外部存储,如果外部存储出现问题,整个推送链路将完全不可用。

基于上述外部存储的解决方案,现有技术还提供另一种消息推送状态确认方案,即在服务端内存中维护每条消息的推送状态,消息推送成功收到客户端的ack应答后在内存中删除对应的数据,否则定期重试。

该方案虽然没有外部依赖,但存在以下问题:

1.该方案完全依赖服务端内存状态存储,并无持久化,服务端异常时状态会丢失,无法做到完全可靠。

2.该方案缓存的数据量有限,如果客户端长时间没有应答,则会丢失部分消息。



技术实现要素:

本申请提供一种分布式消息推送的方法,以解决现有技术中消息推送可靠性差的问题。

本申请提供一种分布式消息的推送方法,包括:

获取存储在消息存储端的需要推送的推送消息;

将所述推送消息推送给消息接收端;

判断所述消息存储端是否存储有用于表示所述推送消息已被所述消息接收端成功接收的应答消息;

根据判断结果,确定所述推送消息是否已被推送完成。

在一些实施例中,还包括:

获取用于表示所述推送消息已被所述消息接收端成功接收的成功状态信息;

根据所述成功状态信息生成所述应答消息;

将所述应答消息提供给所述消息存储端。

在一些实施例中,还包括:

获得所述推送消息,并按照预定的存储顺序将所述推送消息存储在所述消息存储端的消息队列中;

所述获取存储在消息存储端的需要推送的推送消息,包括:

按照所述存储顺序获取存储在所述消息存储端的消息队列中的所述推送消息。

在一些实施例中,所述获得所述推送消息,并按照预定的存储顺序将所述推送消息存储在所述消息存储端的消息队列中,包括:

将获得的所述推送消息按照获得的时间顺序存储在消息存储端的消息队列中。

在一些实施例中,所述将所述推送消息推送给消息接收端,包括:

将获取的需要推送的推送消息按照获取顺序推送给所述消息接收端。

在一些实施例中,所述判断所述消息存储端是否存储有用于表示所述推送消息已被所述消息接收端成功接收的应答消息,包括:

判断将所述推送消息推送给所述消息接收端之后的时长是否满足对所述消息存储端的消息队列进行扫描的触发条件;

若满足,则按照所述存储顺序,以第一预设时长对存储在所述消息存储端中的至少一个推送消息进行扫描,获取所述推送消息在所述消息存储端中的当前存储位置;

按照第二预设时长扫描所述当前存储位置相邻的位置,若扫描到所述应答消息,则确定所述消息存储端的消息队列中存储有所述应答消息。

在一些实施例中,还包括:按照所述存储顺序,以第一预设时长对排序在所述推送消息之后的下一个推送消息进行扫描,以此类推,直至将所有存储在消息存储端中的推送消息扫描完毕。

在一些实施例中,所述根据判断结果,确定所述需要推送的推送消息是否已被推送完成,包括:

如果确定所述消息存储端的消息队列中存储有所述应答消息,则确定所述推送消息已被推送完成。

在一些实施例中,所述判断所述消息存储端是否存储有针对需要推送的推送消息在推送处理成功后生成的应答消息,包括:

判断将所述推送消息推送给所述消息接收端之后的时长是否满足对所述消息存储端的消息队列进行扫描的触发条件;

若满足,则按照所述存储顺序,以第一预设时长对存储在所述消息存储端中至少一个推送消息进行扫描,获取所述推送消息在所述消息存储端中的当前存储位置;

按照第二预设时长扫描所述当前存储位置相邻的位置,若未扫描到所述应答消息,则确定所述消息存储端的消息队列中没有存储所述应答消息。

在一些实施例中,还包括:

如果确定所述消息存储端没有存储所述应答消息,则生成针对所述推送消息的重传消息;

将所述重传消息推送给所述消息接收端;

判断所述消息存储端是否存储有用于表示所述重传消息已被所述消息接收端成功接收的应答消息;

根据判断结果,确定所述重传消息是否已被推送完成。

在一些实施例中,所述如果确定所述消息存储端未存储有所述应答消息,则生成针对所述推送消息的重传消息,包括:

获取当前存储位置上的推送消息;

根据获取的当前存储位置上的推送失败的推送消息生成重传消息;

将生成的所述重传消息进行推送。

在一些实施例中,所述扫描的触发条件具体为:

大于从推送所述推送消息开始至接收针对所述推送消息的应答消息为止的用时。

本申请还提供一种分布式消息的推送装置,包括:

获取单元,用于获取存储在消息存储端的需要推送的推送消息;

推送单元,用于将所述推送消息推送给消息接收端;

判断单元,用于判断所述消息存储端是否存储有用于表示所述推送消息已被所述消息接收端成功接收的应答消息;

确定单元,用于根据判断结果,确定推送消息是否已被推送完成。

本申请还提供一种分布式消息的推送系统,包括:消息存储服务端,消息推送服务端,消息接收客户端;

所述消息存储服务端,用于存储需要推送的推送消息,以及存储针对成功推送的推送消息的应答消息;

所述消息推送服务端,用于将从所述消息存储服务端获取的需要推送的推送消息推送给所述消息接收客户端,判断所述消息存储服务端是否存储有用于表示所述推送消息已被所述消息接收客户端成功接收的应答消息,根据判断结果,确定所述推送消息是否已被推送完成;

所述消息接收客户端,用于接收所述消息推送服务端推送的所述需要推送的推送消息,并向所述消息推送服务端返回针对所述需要推送的推送消息的应答消息。

本申请还提供一种分布式消息存储系统的扫描方法,包括:

获取针对推送消息的返回状态信息;

当所述返回状态信息满足对消息存储系统扫描的触发条件时,扫描所述消息存储系统内存储的推送消息,以及与所述推送消息对应的应答消息,获得扫描结果;

根据扫描结果,确定所述推送消息的推送状态。

本申请还提供一种计算机存储介质,用于存储网络平台产生数据,以及对应所述网络平台产生数据进行处理的程序;

所述程序在被所述处理器读取执行时,执行如下操作:

获取存储在消息存储端的需要推送的推送消息;

将所述推送消息推送给消息接收端;

判断所述消息存储端是否存储有用于表示所述推送消息已被所述消息接收端成功接收的应答消息;

根据判断结果,确定所述推送消息是否已被推送完成。

本申请还提供一种电子设备,包括:

处理器;

存储器,用于存储对网络平台产生数据进行处理的程序,所述程序在被所述处理器读取执行时,执行如下操作:

获取存储在消息存储端的需要推送的推送消息;

将所述推送消息推送给消息接收端;

判断所述消息存储端是否存储有用于表示所述推送消息已被所述消息接收端成功接收的应答消息;

根据判断结果,确定所述推送消息是否已被推送完成。

与现有技术相比,本申请具有以下优点:

本申请提供的一种分布式消息的推送方法,通过将需要推送的推送消息存储在消息存储端,以及存储根据消息推送成功状态生成的应答消息,根据对消息存储端是否存储有与推送消息对应的应答消息来判断推送消息是否推送成功,因为推送消息以及标志推送成功状态以应答消息的形式存储在消息存储端,进而能够使得存储的应答消息持久化,并且推送消息被存储在位于服务器侧的分布式消息推送系统的消息存储端,并通过分布式消息推送系统进行相应的处理后进行推送,推送消息的推送成功状态也被存储在分布式消息推送系统中的消息存储服务端,进而无需额外的存储设备,此处的额外存储设备是指分布式消息推送系统以外的其他存储设备或者是处理设备;推送过程与推送状态确认过程分离,当推送状态过程出现异常时,也不会影响消息推送过程本身,进而在满足消息推送可靠性要求的同时也保证推送的实时性。

附图说明

图1是本申请提供的一种分布式消息的推送方法实施例的流程图;

图2是本申请提供的一种分布式消息的推送方法实施例中推送成功的交互图;

图3是本申请提供的一种分布式消息的推送方法实施例中推送失败的交互图;

图4是本申请提供的一种分布式消息的推送方法实施例中应答消息确定的示意图;

图5是本申请提供的一种分布式消息的推送装置实施例的结构示意图。

具体实施方式

在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此本申请不受下面公开的具体实施的限制。

本申请中使用的术语是仅仅出于对特定实施例描述的目的,而非旨在限制本申请。在本申请中和所附权利要求书中所使用的描述方式例如:“一种”、“第一”、和“第二”等,并非对数量上的限定或先后顺序上的限定,而是用来将同一类型的信息彼此区分。

请参考图1所示,图1是本申请提供的一种分布式消息的推送方法,该方法包括:

步骤s101:获取存储在消息存储端的需要推送的推送消息。

所述步骤s101中推送消息是指通过自动传送信息给客户端,来减少用于网络上搜索的时间,可以根据用户的兴趣来搜索、过滤信息,并定期推给用户,帮助用户高效率地发掘有价值的信息等。

推送消息可以是将消息发送端的推送消息推送至接收推送消息的消息接收端的推送过程,消息发送端需要推送的推送消息首先将会被存储在消息存储端,此处的消息发送端和消息接收端可以理解为消息发送客户端和消息接收客户端。因此,还包括:

获得所述推送消息,并按照预定的存储顺序将所述推送消息存储在所述消息存储端的消息队列中;也可以理解为,将从消息发送端获得的推送消息按照预定的存储顺序存储在消息存储端的消息队列中。

在本实施例中,按照预定的存储顺序存储在消息存储端的消息队列中目的在于保证消息存储端的消息队列中存储的推送消息具有一定的存储顺序,获得的推送消息,需要先保存在消息存储端的消息队列中,那么存储顺序可以按照推送消息的获得的时间顺序进行存储,而获得的时间可以根据消息发送端提供或发送出推送消息的时间确定,当然可以按照推送消息的类别或大小等属性信息进行存储,能够保证存储具有一定存储顺序的方式均可以,并不限于上述的按照获得时间进行存储的方式。

所述步骤s101在获取时也可以按照推送消息的存储顺序进行获取,即:按照存储顺序获取存储在消息存储端的消息队列中的需要推送的推送消息。换言之,从消息存储端的消息队列中获取需要推送的推送消息可以按照先进先出的原则进行获取。

基于上述,所述消息存储端不仅可以存储需要推送的推送消息,还可以存储针对推送消息返回的应答消息,具体包括:

获取用于表示所述推送消息已被所述消息接收端成功接收的成功状态信息;

根据所述成功状态信息生成所述应答消息;

将所述应答消息提供给所述消息存储端。

在本实施例中,所述消息存储端将收到的所述应答消息进行存储,存储位置位于与相对应的所述推送消息所在消息存储端位置的相邻位置,例如:可以是位于相对应的所述推送消息存储位置相邻位置的前或后(如图4所示)。

由于本实施例中,将消息接收端针对接收的推送消息返回的成功状态信息生成应答消息并存储在消息存储端,因此,在消息接收端出现异常或网络异常等情况下,不会造成数据丢失。

需要说明的是,根据所述成功状态信息生成所述应答消息中,所述成功状态信息可以是应答事件,即根据应答事件生成应答消息,该应答消息是消息接收方(可以理解为用户)不可见,在消息推送系统内部生成,用户无需介入和感知。

将获得消息发送端需要推送的推送消息存储后,则对已存储在消息存储端的消息队列中的推送消息进行推送,则进入步骤s102执行。

步骤s102:将所述推送消息推送给消息接收端。

所述步骤s102的具体实现过程可以是通过消息推送端将获取的存储在消息存储端的推送消息推送给消息接收端,即消息接收客户端。

根据前述步骤s101中的描述,所述步骤s102中在向消息接收端推送需要推送的推送消息时可以将获取的需要推送的推送消息按照获取的顺序推送给所述消息接收端。

需要说明的是,基于前述步骤s101中存储顺序按照获取的时间进行存储,那么此处的推送也可以按照存储顺序进行获取,即先进先出原则。

步骤s103:判断所述消息存储端是否存储有用于表示所述推送消息已被所述消息接收端成功接收的应答消息。

首先,通过在步骤s101中的描述可以获知,消息存储端的消息队列中不仅存储有需要推送的推送消息,还存储有针对推送消息在推送成功后的应答消息。也就是说,在消息接收端成功接收到推送消息后,会将成功接收的状态事件生成应答消息存储在消息存储端,存储的推送消息具有相应的存储的应答消息即为推送成功的推送消息,反之,当消息存储端的消息队列中没有存储对应推送消息的应答消息,则该推送消息没有推送成功。

请结合图2和图4所示,图2是本申请提供的一种分布式消息的推送方法实施例中推送成功的交互图;图4是本申请提供的一种分布式消息的推送方法实施例中应答消息确定的示意图。

所述步骤s103判断的具体实现过程可以通过对消息存储端的消息队列进行扫描实现,具体包括:

步骤s103-1a:判断将所述推送消息推送给所述消息接收端之后的时长是否满足对所述消息存储端的消息队列进行扫描的触发条件。

在消息推送处理过程中,推送消息端将推送消息推送给消息接收端之后,消息接收端将在接收处理完成后返回成功状态,而从接收到返回的过程是需要一定处理用时或耗时,通常处理的用时一般定义一个上限值,称为消费超时时长,比如0-3s。所述步骤s103-1a中的扫描的触发条件可以根据所述消费超时时长进行设定,也就是说,扫描的触发条件可以是大于从推送所述推送消息开始至接收针对所述推送消息的应答消息为止,即当推送给消息接收端的推送消息推送时长大于消费超时时长时,则触发对消息存储端的扫描;此处的推送消息推送时长可以是推送消息用时加上返回状态的用时间,即可以看做是返回状态信息。

步骤s103-1b:若满足扫描触发条件,则按照所述存储顺序,以第一预设时长对存储在所述消息存储端中的至少一个推送消息进行扫描,获取所述推送消息在所述消息存储端中的当前存储位置;

步骤s103-1c:按照第二预设时长扫描所述当前存储位置相邻的位置,若扫描到所述应答消息,则确定所述消息存储端的消息队列中存储有所述应答消息。

关于步骤s103-1b和步骤s103-1c可以参考图4所示,对于消息存储端的消息队列可以划分为多个扫描区间,在本实施例中,所述扫描区间的划分可以按照扫描时间进行划分,扫描区间的扫描顺序可以与推送消息的存储顺序相同。一个扫描区间可以包括:扫描推送消息的时间和扫描应答消息的时间之和,每个扫描区间中,推送消息的扫描时间可以设定为第一预设时长,应答消息的扫描时间可以设定为第二预设时长,所述第一预设时长和第二预设时长可以相同也可以不同,设定标准可以按照通常扫描业务场景中扫描的时长确定。

所述步骤s103-1b中,当第一预设时长扫描超时或者根据扫描已经获得推送消息的当前存储位置,则停止对当前存储的推送消息的扫描,进入所述步骤s103-1c即对应答消息的扫描,应答消息在消息存储端是对应的存储在推送消息的相邻位置,因此,可以直接以推送消息的当前存储位置为起点,向推送消息的当前存储位置的相邻位置扫描即可,当第二预设时长扫描超时或者根据扫描已经获得应答消息,则停止对应答消息的扫描,返回至所述步骤s103-1b继续进行扫描,获取消息队列中下一个推送消息的当前存储位置。也就是说,还可以包括:

按照所述存储顺序,以第一预设时长对排序在所述推送消息之后的下一个推送消息进行扫描,以此类推,直至将所有存储在消息存储端中的推送消息扫描完毕。

因此,推送消息的推送过程与推送消息推送成功确认的过程之间没有任何影响,二者可以并列进行,相互不受牵制和影响,即便是在推送成功确认过程中确认结果为不成功,仍然不影响下一个推送消息的推送以及下一个推送消息推送成功的确定。

基于上述内容,可获知所述步骤s103-1b的目的在于扫描消息存储端的消息队列中存储的推送消息,获得推送消息的当前存储位置;所述步骤s103-1c的目的在于,根据所述步骤s103-1b中获得的当前存储位置,扫描相邻位置存储的应答消息。当扫描到推送消息以及在推送消息的相邻位置的应答消息,或者是在扫描区间内扫描到推送消息以及应答消息,则可以获得扫描的推送消息具有相应的应答消息的判断结果。

以上是对消息存储端存储有应答消息的说明,请参考图3,结合图4所示,图3示出本申请提供的一种分布式消息的推送方法实施例中推送失败的交互图。当以获取的推送消息的当前存储位置,向所述当前存储位置相邻的位置按照所述第二预设时间扫描,若未扫描到存储的应答消息,则确定所述消息存储端的消息队列中没有存储针对当前存储位置上的推送消息的应答消息,此时,说明当前存储位置上的推送消息没有推送成功,需要重新进行推送,因此所述步骤s103包括:

步骤s103-2a:判断将所述推送消息推送给所述消息接收端之后的时长是否满足对所述消息存储端的消息队列进行扫描的触发条件;

步骤s103-2b:若满足,则按照所述存储顺序,以第一预设时长对存储在所述消息存储端中至少一个推送消息进行扫描,获取所述推送消息在所述消息存储端中的当前存储位置;

步骤s103-2c:按照所述第二预设时长扫描所述当前存储位置相邻的位置,若未扫描到所述应答消息,则确定所述消息存储端的消息队列中没有存储所述应答消息。

在没有扫描到所述应答消息后,即:确定所述消息存储端的消息队列中没有存储所述应答消息,还可以包括:

生成针对所述推送消息的重传消息;

将所述重传消息推送给所述消息接收端;

判断所述消息存储端是否存储有用于表示所述重传消息已被所述消息接收端成功接收的应答消息;

根据判断结果,确定所述重传消息是否已被推送完成。

与上述步骤s103-1b和步骤s103-1c的描述相同,当未扫描到存储的应答消息,扫描过程可以无需停止,直接返回至步骤s103-2d按照预定的存储顺序,以第一预设时长对存储的需要推送的推送消息进行扫描,获取下一个推送消息的当前存储位置的步骤继续执行。

需要说明的是,返回至所述步骤s103-2b执行继续扫描,可以是在步骤s103-2c之后,即没有存储应答消息之后返回,那么,也就是说,在消息存储端的消息队列中没有扫描到相应的应答消息后,返回至步骤s103-2b执行,同时执行所述步骤s103-2d。因此,推送消息推送的过程与消息推送状态确定过程相互不受影响,在对推送消息确认是否推送成功的过程中仍然可以继续按照存储顺序对下一个推送消息进行推送。

为保证生成的重传消息与相对应的没有推送成功的推送消息一致性,所述如果确定所述消息存储端未存储有所述应答消息,则生成针对所述推送消息的重传消息,可以包括:

获取当前存储位置上的推送消息;

根据获取的当前存储位置上的推送失败的推送消息生成重传消息;

将生成的所述重传消息进行推送。

所述将生成的所述重传消息进行推送后,还可以包括:在所述消息存储端查找与所述重传消息匹配的应答消息,如果有,则说明推送成功,即进入步骤s104,否则为推送失败,失败后还可以再次根据上述过程生成重传消息继续进行推送。

步骤s104:根据判断结果,确定所述需要推送的推送消息是否已被推送完成。

所述步骤s104中判断结果为所述消息存储端的消息队列中存储有针对当前存储位置上的所述推送消息的应答消息时,则将所述当前存储位置上存储的推送消息确定为已被推送完成。

以上是对本申请提供的一种分布式消息的推送方法实施例的说明。与前述提供的一种分布式消息的推送方法实施例相对应,本申请还公开一种分布式消息的推送装置实施例,请参看图5,由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。

如图5所示,分布式消息的推送装置包括:

获取单元501,用于获取存储在消息存储端的需要推送的推送消息。

推送单元502,用于将所述推送消息推送给消息接收端;

判断单元503,用于判断所述消息存储端是否存储有用于表示所述推送消息已被所述消息接收端成功接收的应答消息;

确定单元504,用于根据判断结果,确定推送消息是否已被推送完成。

还包括:

成功状态信息获取单元,用于获取用于表示所述推送消息已被所述消息接收端成功接收的成功状态信息;

生成单元,用于根据所述成功状态信息生成所述应答消息;

提供单元,用于将所述应答消息提供给所述消息存储端。

所述获取单元501在获取存储在消息存储端的需要推送的推送消息之前还可以包括:

获得单元,用于获得所述推送消息,并按照预定的存储顺序将所述推送消息存储在所述消息存储端的消息队列中;其中,所述按照预定的存储顺序可以是将获得的所述推送消息按照获得的时间顺序存储在消息存储端的消息队列中。

所述获取单元501具体用于按照所述存储顺序获取存储在所述消息存储端的消息队列中的所述推送消息。

所述推送单元502具体可以用于将获取的需要推送的推送消息按照获取顺序推送给所述消息接收端。

所述判断单元503包括:

触发条件判断子单元,用于判断将所述推送消息推送给所述消息接收端之后的时长是否满足对所述消息存储端的消息队列进行扫描的触发条件;

第一扫描子单元,用于根据触发条件判断子单元的判断结果为满足时,按照所述存储顺序,以第一预设时长对存储在所述消息存储端中的至少一个推送消息进行扫描,获取所述推送消息在所述消息存储端中的当前存储位置;

第二扫描子单元,用于按照第二预设时长扫描所述当前存储位置相邻的位置,若扫描到所述应答消息,则确定所述消息存储端的消息队列中存储有所述应答消息。

还包括:

下一扫描执行子单元,用于按照所述存储顺序,以第一预设时长对排序在所述推送消息之后的下一个推送消息进行扫描,以此类推,直至将所有存储在消息存储端中的推送消息扫描完毕。

所述判断单元还包括:

触发条件判断子单元,用于判断将所述推送消息推送给所述消息接收端之后的时长是否满足对所述消息存储端的消息队列进行扫描的触发条件;其中,触发条件可以为大于从托送所述推送消息开始至接收针对所述推送消息的应答消息为止的用时。具体可以参考上述步骤s103-1a的描述。

第一扫描子单元,用于根据触发条件判断子单元的判断结果为满足时,按照所述存储顺序,以第一预设时长对存储在所述消息存储端中至少一个推送消息进行扫描,获取所述推送消息在所述消息存储端中的当前存储位置;

第二扫描子单元,用于按照第二预设时长扫描所述当前存储位置相邻的位置,若未扫描到所述应答消息,则确定所述消息存储端的消息队列中没有存储所述应答消息。

所述第二扫描子单元为扫描到所述应答消息,还包括:

重传消息生成子单元,用于生成针对所述推送消息的重传消息;

重传消息推送子单元,用于将所述重传消息推送给所述消息接收端;

重传消息判断子单元,用于判断所述消息存储端是否存储有用于表示所述重传消息已被所述消息接收端成功接收的应答消息;

重传消息确定子单元,用于根据判断结果,确定所述重传消息是否已被推送完成。

需要说明的是,生成重传消息的过程并不影响,对所述消息存储端的扫描过程,也就是说,在针对推送消息发现没有存储相应的应答消息时,消息存储端的扫描继续往下一个推送消息执行,而没有应答消息的推送消息则也会生成重传消息。

所述重传消息生成子单元包括:

推送消息获取子单元,用于获取当前存储位置上的推送消息;

生成子单元,用于根据获取的当前存储位置上的推送失败的推送消息生成重传消息;

重新推送子单元,用于将生成的所述重传消息进行推送。

以上为对本申请提供的一种分布式消息的推送装置实施例的说明,上述描述较为概要,具体相关内容可以参考分布式消息的推送方法实施例的说明。

基于上述,本申请还提供一种分布式消息的推送系统,包括:消息存储服务端、消息推送服务端以及消息接收客户端;

所述消息存储服务端,用于存储需要推送的推送消息,以及存储针对成功推送的推送消息的应答消息;

所述消息推送服务端,用于将从所述消息存储服务端获取的需要推送的推送消息推送给所述消息接收客户端,判断所述消息存储服务端是否存储有用于表示所述推送消息已被所述消息接收客户端成功接收的应答消息,根据判断结果,确定所述推送消息是否已被推送完成;

所述消息接收客户端,用于接收所述消息推送服务端推送的所述需要推送的推送消息,并向所述消息推送服务端返回针对所述需要推送的推送消息的应答消息。

可以理解的是,消息存储服务端存储的需要推送的推送消息,可以通过消息发送客户端获得,也就是说,消息发送客户端在进行消息推送时,将消息先发送至分布式消息推送系统中的消息存储服务端进行存储,存储后由消息推送服务端按照存储顺序获取需要推送的推送消息,并向消息接收客户端推送,消息接收客户端在接收并处理成功后向消息推送服务端发送推送成功的状态信息,消息推送服务端将根据接收的推送成功的状态信息生成针对成功推送的推送消息的应答消息,并发至消息存储服务端进行存储,该应答消息被消息存储服务端存储在相应推送消息的相邻位置。

上段内容是对分布式消息推送系统中推送消息的描述。在本申请提供的分布式消息推送系统中,推送消息的推送过程和推送消息的推送状态确认过程是分离的,下面将概述推送状态的确认过程。

当消息推送服务端推送消息的是时长满足对消息存储服务端的扫描触发条件时,则将根据推送消息的存储顺序对消息存储服务端进行扫描,以第一预设时间对存储的需要推送的推送消息进行扫描,获取推送消息的当前存储位置,之后向所述当前存储位置相邻的位置按照第二预设时间扫描,若扫描到有存储的应答消息,则消息推送服务端认为当前存储位置上的推送消息具有匹配的应答消息,因此所述当前存储位置上的所述推送消息推送成功,继续按照存储顺序,对下一个存储位置上的推送消息进行扫描,并将扫描到的下一个推送消息的存储位置确定为当前存储位置,继续按照第二预设时间扫描,直至扫描到最后一个推送消息为止,或者分布式消息推送系统设定的停止位置为止。

需要特别说明的是,在推送消息推送成功的确认过程中,如果没有扫描到相应的应答消息,则消息推送服务端将根据没有扫描到的应答消息对应的推送消息生成重推送消息继续按照推送过程进行推送,该重推送消息的推送过程中并不会停止对推送消息推送成功的确认过程,即不停止扫描。也就是说,在判断所述推送消息存储端的推送消息是否推送成功的过程中,不论消息存储端当前存储位置上的推送消息推送成功还是失败,均会继续执行下一个需要判断是否推送成功的推送消息,即:在每次判断完成后均更新需要判断推送消息的位置。

在其他一些实施例中,还可以通过消息标记有针对性的对判断结果为失败的推送消息再次进行推送,具体可以是,对确认推送成功的推送消息进行标记,消息推送服务端不会再次对标记的推送消息进行扫描,因此,在完成一个扫描周期后重新进行扫描时,针对的是重推送消息的扫描。也可以是,对推送失败的推送消息进行标记,在进行重新推送时,可以仅扫描具有标记的推送失败的推送消息(此时,推送失败的推送消息将生成重传消息)。

因为在本申请提供的分布式消息推送系统中,推送消息被存储在分布式消息推送系统的消息存储端,并通过分布式消息推送系统进行相应的处理后进行推送,推送消息的推送成功状态也被存储在分布式消息推送系统中的消息存储服务端,进而无需额外的存储设备,此处的额外存储设备是指分布式消息推送系统以外的其他存储设备或者是处理设备;另外,在确认消息存储服务端存储的推送消息是否推送成功的过程,可以通过对消息存储服务端进行扫描,并通过消息推送服务端进行判断完成,进而使得推送状态的确认过程与推送消息的推送过程可以为异步进行,从而使得分布式消息推送系统推送的实时性更好,系统可靠性更高。

基于上述内容,本申请还提供一种分布式消息存储系统的扫描方法,包括:

获取针对推送消息的返回状态信息;

当所述返回状态信息满足对消息存储系统扫描的触发条件时,扫描所述消息存储系统内存储的推送消息,以及与所述推送消息对应的应答消息,获得扫描结果;

根据扫描结果,确定所述推送消息的推送状态。

其中,所述返回状态信息可以包括消息推送过程的耗时,即在消息领域,分布式消息推送系统的服务端推送消息给客户端之后,客户端处理完成并返回状态,该过程通常存在耗时,该耗时一般定义一个上限值(比如3s),称为消费超时时间。触发条件可以是推送动作完成后的消息消费超时之后触发。也可以参考如步骤s103-1a中描述。

如果扫描结果为扫描到推送消息以及与其对应的应答消息,则说明该推送消息的推送状态为推送成功。

基于上述内容,本申请还提供一种计算机存储介质,用于存储网络平台产生数据,以及对应所述网络平台产生数据进行处理的程序;

所述程序在被所述处理器读取执行时,执行如下操作:

获取存储在消息存储端的需要推送的推送消息;

将所述推送消息推送给消息接收端;

判断所述消息存储端是否存储有用于表示所述推送消息已被所述消息接收端成功接收的应答消息;

根据判断结果,确定所述推送消息是否已被推送完成。

本申请还提供一种电子设备,包括:

处理器;

存储器,用于存储对网络平台产生数据进行处理的程序,所述程序在被所述处理器读取执行时,执行如下操作:

获取存储在消息存储端的需要推送的推送消息;

将所述推送消息推送给消息接收端;

判断所述消息存储端是否存储有用于表示所述推送消息已被所述消息接收端成功接收的应答消息;

根据判断结果,确定所述推送消息是否已被推送完成。

在一个典型的配置中,计算设备包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。内存是计算机可读介质的示例。

1、计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。

2、本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本申请虽然以较佳实施例公开如上,但其并不是用来限定本申请,任何本领域技术人员在不脱离本申请的精神和范围内,都可以做出可能的变动和修改,因此本申请的保护范围应当以本申请权利要求所界定的范围为准。

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