一种消息传输方法和装置与流程

文档序号:12494962阅读:205来源:国知局
一种消息传输方法和装置与流程

本申请涉及网络通信技术领域,尤其涉及一种消息传输方法和装置。



背景技术:

发布订阅机制能够同时提供一对多和多对多的异步通信模式,它能使得通信的各个参与者在时间和空间上完全解耦。发布订阅系统包括若干个发布消息的发布者以及若干个订阅消息的订阅者,其中,消息的发布者可以将消息发布到发布订阅系统中的主题;而订阅者可以向发布订阅系统发出主题订阅条件,即订阅者设定感兴趣的主题。发布订阅系统可以将发布者发布的消息及时、可靠地传送给所有对其感兴趣的订阅者。

为了提高消息处理效率,发布订阅系统在向订阅者传输该订阅者感兴趣的消息时,每次连续的向该订阅者传输多条消息。然而如果每次连续传输的消息数量过多,则可能导致订阅者的终端无法及时处理这些消息,从而可能会导致订阅者无法接收到部分或全部消息,影响到消息的可靠性传输;而每次连续传输的消息数量过少,则又会影响到发布订阅系统的消息处理性能,因此,如何兼顾发布订阅系统处理消息的性能以及可靠性是本领域技术人员迫切需要解决的技术问题。



技术实现要素:

有鉴于此,本申请提供了一种消息传输方法和装置,以在保证订阅者的客户端可以可靠接收订阅消息的同时,最大限度的提高发布订阅系统的消息处理性能。

为实现上述目的,一方面,本申请实施例提供了一种消息传输方法,包括:

对于主题中的任意一个消息队列,如果满足所述消息队列的消息投递条件,则确定所述消息队列对应的订阅者;

如果所述消息队列中存在尚未被投递的消息,且用于限制连续投递次数的动态变量小于用于限制并行传输消息数量的预期数量,则从所述消息队列中确定需要投递的目标消息,向所述订阅者的终端传输所述目标消息,并将所述动态变量的取值加一,直至所述动态变量不小于所述预期数量;

如果接收到所述订阅者的终端针对所述目标消息的消息确认指示,则将所述动态变量的取值减一,并增加所述预期数量的取值,其中,所述消息确认指示表明所述订阅者的终端成功接收到消息;

其中,在每次向所述订阅者的终端传输所述目标消息之后,记录所述目标消息的传输时刻;

如果所述目标消息的传输时刻距离当前时刻的时长超过预设的超时时长,且未接收到针对所述目标消息的消息确认指示,则降低所述预期数量的取值。

另一方面,本申请实施例还提供了一种消息传输装置,包括:

订阅者确定单元,用于对于主题中的任意一个消息队列,如果满足所述消息队列的消息投递条件,则确定所述消息队列对应的订阅者;

消息传输单元,用于如果所述消息队列中存在尚未被投递的消息,且用于限制连续投递次数的动态变量小于用于限制并行传输消息数量的预期数量,则从所述消息队列中确定需要投递的目标消息,向所述订阅者的终端传输所述目标消息,并将所述动态变量的取值加一,直至所述动态变量不小于所述预期数量;

确认调整单元,用于如果接收到所述订阅者的终端针对所述目标消息的消息确认指示,则将所述动态变量的取值减一,并增加所述预期数量的取值,其中,所述消息确认指示表明所述订阅者的终端成功接收到消息;

时刻记录单元,用于在所述消息传出单元每次向所述订阅者的终端传输所述目标消息之后,记录所述目标消息的传输时刻;

超时调整单元,用于如果所述目标消息的传输时刻距离当前时刻的时长超过预设的超时时长,且未接收到针对所述目标消息的消息确认指示,则降低所述预期数量的取值。

由以上可知,在服务节点中设置了两个变量,即用于限制连续投递次数的动态变量以及用于限制并行传输消息数量的预期数量,对于主题中的任意一个消息队列,如果满足该消息队列的消息投递条件,且在消息队列中存在尚未被投递的消息的情况下,只要该动态变量小于该预期数量,服务节点会持续的向订阅者发送消息。而由于服务节点每次向订阅者传输一条消息就会将该动态变量的取值加一,而订阅者每返回一条消息确认指示,服务节点又会将动态变量的取值减一,并增加该预期数量的取值,从而在维持连续传输的消息总量不超过预期的消息处理能力的前提下,增加连续传输消息的总量,提高消息传输以及处理的效率。

而且服务节点每次向订阅者传输消息之后,都会将传输的消息添加到已投递消息集合中,并在监测到已投递消息集合中存在传输时刻距离当前时刻的时长超过预设的超时时长的消息时,降低预期数量的取值,以减少连续向订阅者传输的消息总量,减少由于向订阅者的终端连续传输的消息数量过大,而导致终端无法及时处理消息的情况,以提高服务节点向订阅者终端传输消息的可靠性。

附图说明

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

图1为本申请公开一种消息传输方法所适用的一种消息传输系统的系统组成结构图;

图2示出了本申请实施例的消息传输方法所适用的一种应用场景的示意图;

图3为本申请公开的一种消息传输方法一个实施例的流程示意图;

图4为本申请公开的一种消息传输方法又一个实施例的流程交互示意图;

图5示出了在不存在消息超时的情况下,预期数量随着投递次数的变化示意图;

图6示出了在存在消息超时的情况下,预期数量随着投递次数的变化示意图;

图7示出了本申请一种消息传输装置一个实施例的组成结构示意图;

图8示出了本申请公开的一种服务器的组成结构示意图。

具体实施方式

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

参见图1,其示出了本申请的消息传输方法所适用的一种消息传输系统的组成架构示意图,由图1可以看出,系统组成架构可以包括:

至少一台服务节点101,至少一台发布者的终端102(也可以称为发布客户端)以及至少一台订阅者的终端103(也可以称为订阅客户端)。

其中,服务节点101与发布者的终端102,以及服务节点101与订阅者的终端103之间可以通过网络连接,该网络可以为有线网络以及无线通信网络等。

在本申请实施例中,服务节点可以能够向外提供服务的计算机设备。该至少一台服务节点101可以构成发布订阅服务系统。可选的,为了提高发布订阅的可靠性,提高数据的安全性,该发布订阅服务系统中可以部署有多台服务节点101。

发布者的终端以及订阅者的终端可以为手机、笔记本电脑等移动终端,也可以是台式机等计算机设备;还可以是智能电视、智能冰箱等智能家电或其他智能设备。

其中,发布者的终端101可以向服务节点发布消息,该消息中携带有该消息的主题。

其中,发布订阅模型中的主题可以表明该消息的类型,在服务节点中为每一个主题分配有一个存储地址;通过消息的主题可以确定该消息的存储地址。

服务节点101,用于在接收到发布者的终端发送的消息之后,确定订阅该主题的订阅者;并依据该消息的主题,将该消息存储到该主题对应的存储空间;在满足消息发送传输条件时,将该主题中的消息传输给订阅该主题的订阅者的终端。

同时,由图1可知,在发布订阅系统中,消息的发布者相当于消息的生产者,而消息的订阅者相当于消息的消费者,生产者通过发布订阅系统发布消息,而消费者也通过发布订阅系统消息,实现了消费者与生产者的解耦,这样,消息者无需关心生产者,生产者也无需了解消费者。

可选的,为了提高发布订阅系统的可用性,减少数据丢失的情况,在本申请实施例中,发布订阅系统可以包括多个服务节点,其中,一个服务节点作为主节点,其他服务节点作为用于进行数据备份的辅助节点,作为主节点的服务节点在接收到消息之后,在将该消息存储到该主题对应的存储空间的同时,会将消息备份到各个辅助节点中与该主题对应的存储空间内。

可选的,在本申请实施例中,服务节点为每个订阅者分配了一个消息队列,则服务节点将该消息存储到主题对应的存储地址具体为服务节点将消息分别存储到存储地址中与各个订阅者各自对应的消息队列中。相应的,服务节点将消息传输给订阅者的终端可以为服务节点将订阅者对应的消息队列中的消息传输给订阅者的终端。

其中,消息队列相当于消息传输过程中保存消息的容器。

在发布订阅系统中,发布者发布到服务节点中的主题内的消息可以被多次复用,为了便于理解,以一个分布订阅系统的实际应用场景为例进行介绍,如,参见图2,发布者发布一个交易或下单的消息之后,发布订阅系统会将消息堆积到消息队列,这样,交易或下单数据只需生产一次,就可以被发布订阅系统的服务节点推送给多个订阅者,从而使得实现积分管理、库存管理、CRM(客户关系管理,Customer Relationship Management)软件应用等多个订阅者都可以消费。

在本申请实施例中,服务节点可以是主动将消息队列中的消息推送给订阅者的终端;也可以是在订阅者的终端发出消息读取请求时,将消息队列中的消息传输给订阅者的终端。

可以理解的是,订阅某个主题的订阅者可以有一个或多个,而向某个主题发布消息的发布者也可以有一个或多个。当发布者连续向同一个主题发布多条消息,或者多个发布者短时间内向同一个主题发布了多条消息的情况下,订阅该主题的订阅者对应的消息队列中就可能会存在多条待传输的消息。在订阅者的消息队列中存在多条待传输的消息的前提下,如果每次仅仅将消息队列中的一条待传输消息传输给该订阅者的终端,就会导致消息传输效率较低;为了提高传输效率,服务节点可以每次向订阅者的终端并行传输多条消息,然而不同订阅者的终端的消息处理能力也会有所不同,如果传输给订阅者的终端的消息数量过多,则可能会导致订阅者的终端无法及时有效的处理消息,导致订阅者接收消息失败。

为了解决以上问题,以兼容消息处理效率以及可靠性,本申请实施例中,服务节点会根据订阅者的终端的消息处理能力,合理确定每次连续传输给订阅者的终端的消息数量,以在提高消息处理效率的同时,减少订阅者的终端无法有效处理消息的情况,减少消息处理失败的情况,提高消息处理的可靠性。

结合以上共性,下面对本申请实施例的一种消息传输方法进行详细介绍。

参见图3,其示出了本申请一种消息传输方法又一个实施例的流程示意图,本实施例的方法

S301,发布者的终端向服务节点发送待发布消息,该待发布消息携带有该消息的主题。

可选的,为了提高消息内容的安全性,发布者向服务节点发送消息时,可以预先通过指定的协议对消息内容进行加密。

S302,服务节点根据该待发布消息的主题,将该待发布消息存储到该主题对应的存储空间中的各个消息队列内。

消息队列为该服务节点为订阅该主题的订阅者所分配的消息队列,其中,服务节点为订阅该主题的每个订阅者分别创建了一个消息队列,消息队列与订阅者一一对应。

可选的,为了提高服务节点接收消息的可靠性,减少发布者发布消息失败的情况,在服务节点将待发布消息存储到该主题对应的存储空间中的各个消息队列之后,服务节点还可以返回针对该待发布消息的消息确认指示,该消息确认指示用于指示服务节点接收并存储了该待发布消息。其中,该消息确认指示可以携带有该待发布消息的标识,以便于发布者区分服务节点接收到的是所需发布的哪条消息。

相应的,如果发布者在发送待发布消息之后的指定时长内,未接收到该待发布消息的消息确认指示,则会向该主题重新发布该待发布消息。

进一步的,由于服务节点同一时刻或者一段时间内可能会接收到多条需要发布的消息,如果每接收并存储一条消息之后,就向发布者反馈消息的确认接收指示,则可能会影响到消息处理效率,因此,服务节点可以每隔设定时间,触发一次对该时间段内接收到的所有消息的确认,如每隔10秒,批量反馈该10秒内成功接收到的消息的消息确认指示。

可以理解的是,由于不同时刻可能会存在多个发布者向服务节点发布消息,以及一个发布者连续发布多条消息等情况,因此,在实际应用中,以上步骤S301和步骤S302可以被多次执行。

需要说明的是,以上步骤S301和S302为可选步骤,目的仅仅是为了便于理解后续服务节点从主题的消息队列中获取消息,并投递给订阅者的过程。

S303,对于主题中的任意一个消息队列,如果服务节点确定满足该消息队列的消息投递条件,则确定该消息队列对应的订阅者。

可选的,消息队列的消息投递条件可以包括任意一种或几种情况:

在一种可能的情况下,该消息投递条件为该消息队列中存在新发布的消息。该种情况也可以认为是该消息队列所属的主题存在新发布的消息。

在又一种可能的情况中,该消息投递条件可以为:接收到该消息队列的订阅者返回的消息确认指示,该消息确认指示为针对该消息队列中已投递或者说传输的消息所生成的消息确认指示。

在又一种可能的情况中,该消息投递条件可以为:最近一次向订阅者的终端传输消息的时刻距离当前时刻的时长超过预设时长。该种情况可以认为是设定了一个定时器,以通过定时器定时触发消息投递,从而避免在不满足其他几种投递条件,而消息队列中又存在未被投递的消息时,所导致的消息队列中消息无法投递给订阅者的情况。

在又一种可能的情况中,该消息投递条件,接收到所述订阅者的终端发送的消息获取请求。当然,在大部分情况下,服务节点会主动向订阅者推送为该订阅者分配的消息队列中所存在的消息,而无需订阅者主动拉取消息。

S304,如果服务节点确定该消息队列中存在尚未被投递的消息,且用于限制连续投递次数的动态变量小于用于限制并行传输消息数量的预期数量,则从该消息队列中确定需要投递的目标消息;

其中,动态变量可以表征当前处于投递状态的消息的总数量,其中,处于投递状态的消息称为处于传输状态的消息,其可以理解为服务节点向订阅者的终端传输的消息中,尚未被订阅者的终端确认接收的消息。该动态变量会随着连续投递次数的增加而逐渐增加,表明当前处于投递状态的消息的数量增多;同时,终端每确认接收到一条该服务节点传输的消息,该动态变量就会相应减少,表征处于投递状态的消息减少。

该预期数量可以为根据终端的消息处理状态,预估的一个能够同时向终端投递的消息的总数量的最大值。在不存在消息超时(传输给订阅者的消息超过预设时长仍未被接收)的情况下,终端每确认接收一条消息,则可以逐步增加该预期数量。

在满足消息投递条件,且消息队列中存在尚未被投递的消息的情况下,服务节点会确定当前该动态变量以及该预期数量的取值,如果动态变量的取值不小于该预期数量的取值,则说明当前处于投递状态的消息数量已经达到预期数量,不适合再继续进行消息投递,在该种情况下,结束消息投递;反之,则可以进行消息投递。

可以理解的是,消息队列中的消息存在先进先出的规则,因此,在每次需要投递消息时,可以按照消息队列中消息的顺序,从消息队列中确定需要投递的一条消息。为了便于区分,在本申请实施例中,将从消息队列中确定出的需要投递的该条消息称为目标消息。

需要说明的是,该步骤S303中确定消息队列的订阅者,可以是与步骤S304同时执行,也可以是在步骤S304之后,再确定该消息队列的订阅者。

S305,服务节点向该订阅者的终端传输该目标消息。

S306,服务节点记录该目标消息的传输时刻。

其中,服务节点向订阅者传输目标消息的时刻就是该目标消息的传输时刻。服务节点记录该传输时刻,以便后续判断该目标消息是否超过预设的超时时长仍未被确认接收。

其中,该步骤S305和S306的顺序不限于图3所示,在实际应用中这两个步骤也可以同时执行。

S307,服务节点将该动态变量的取值加一,并返回步骤S304,直至该动态变量不小于该预期数量。

可以理解的是,服务节点每向订阅者传输一条消息,则会增加处于投递状态的消息数量,即并行传输的消息数量增加,此时,为了使得动态变量与处于投递状态的消息的总数量一致,则需要增加该动态变量的取值。

如果动态变量仍小于预期数量,则可以循环执行该步骤S304,以实现连续从消息队列中取出消息并向订阅者传输。

其中,该步骤S307也可以与步骤S306同时执行。

S308,如果订阅者的终端接收到服务节点发送的目标消息时,则会向该服务节点返回该目标消息的消息确认指示。

为了避免由于网络问题导致消息丢失,而服务节点无法察觉等情况,提高消息传输的可靠性,订阅者如果接收到服务节点传输的消息,同样会反馈消息确认指示。该消息确认指示表明该订阅者的终端成功接收到消息。

可选的,该订阅者的终端同样可以批量进行消息确认,具体与服务节点批量确认所接收到的消息相似,即可以每隔设定时间,触发一次对该时间段内接收到的所有消息的确认。

S309,如果服务节点接收到针对该目标消息的消息确认指示,则将该动态变量的取值减一,并增加该预期数量的取值。

其中,增加该预期数量的取值,可以是将预取数量的取值增加目标设定值,该目标设定值可以理解为预期数量每次增加的步长,该目标设定值可以根据需要设定。可选的,该目标设定值可以为1,即将预期数量的取值加一。

需要说明的是,该步骤S309与步骤S305至307的顺序并不限于图3所示,在执行应用中,也可以在执行步骤S305至307的同时,执行该步骤S309。

310,如果服务节点监测到该目标消息的传输时刻距离当前时刻的时长超过预设的超时时长,且未接收到针对该目标消息的消息确认指示,则降低所述预期数量的取值。

其中,该超时时长可以根据实际需要设定。

可以理解的是,当消息队列中存在已投递的消息超过该超时时长仍未被接收的情况,则说明向订阅者的终端传输的消息数量已经超出终端的处理能力,同时,也说明该预期数量已经大于订阅者的终端能够同步处理消息的最大数量,因此,需要降低该预期数量的取值,以便于降低连续订阅者的终端投递消息的数量。

可选的,服务节点可以在每传输一条目标消息之后,为该目标消息创建一个定时器,并通过定时器检测到到达预设的超时时长时,触发服务节点降低该预期数量的取值。

可以理解的是,步骤S309以及步骤S310中对动态变量以及预期数量的取值的调整也会反馈到步骤S304中,影响到动态变量与预期数量之间的大小关系。

其中,降低该预期数量的取值可以是将该预期数量的取值降低预设值,也可以是将该预期数量的取值降低为预先设定的指定值,该指定值一般为较小的数值,使得该指定值小于该S310调整该预期数量之前的取值。如,该指定值可以为前面提到的目标设定值,作为一种优选实施方式,该目标设定值可以为1,即将该预设数量重置为1。

需要说明的是,该步骤S309和步骤S310的顺序并不限于图3所示,在实际应用中,该步骤S309和步骤S310的顺序可能会互换,也可能是同时执行该步骤S309和步骤S310。

可以理解的是,在实际应用中,为了考虑到服务节点自身的性能,以及订阅者的终端的性能,可以预先设定用于限制并行传输消息的最大数量的参数,在本申请实施例中,将该参数成为最大限制数量,该最大限制数量可以根据终端或者服务节点的性能进行设定,以避免由于服务节点同时传输的消息数量过多,而导致服务节点的负载过高;或者是,避免终端出现消息拥塞,导致向订阅者的终端传输的大部分消息都无法得到及时处理。

相应的,在该步骤S304从所述消息队列中确定需要投递的目标消息之前,还可以:检测该预期数量的取值是否小于预设的最大限制数量,如果该预期数量的取值小于该最大限制数量,则执行从所述消息队列中确定需要投递的目标消息以及向所述订阅者的终端传输所述目标消息的操作。

进一步的,如果该预期数量的取值不小于所述最大限制数量,则可以将该预期数量的取值减少目标设定值,如,将该预期数量的取值减一,同时,本次不进行消息投递,而是监控当前是否满足所述消息队列的消息投递条件,并在满足消息投递条件时,再进行消息投递。当然,也可以是将该预期数量的取值减少目标设定值之后,再返回步骤S304,并在检测到该预期数量的取值是否小于预设的最大限制数量时,从所述消息队列中确定需要投递的目标消息。

可选的,为了避免每次存在消息确认指示之后,预期数量的增速过快,系统还可以设定一个拥塞临界值,这样,如果接收到订阅者的终端针对目标消息的消息确认指示,在将所述动态变量的取值减一的同时,还会判断该预期数量的取值是否小于预设的拥塞临界值;如果该预期数量的取值小于拥塞临界值,则将该预期数量的取值增加目标设定值;如果该预期数量的取值不小于该拥塞临界值,则将该预期数量的取值与预设的递增变量值之和,设定为该预期数量的取值。其中,该递增变量值小于该目标设定值。

可选的,该目标设定值为1;相应的,预设的递增值为:1与预期数量的取值的比值。

进一步的,为了提高消息的可靠传输,在存在目标消息超时的情况下,还可以发起消息重试,即重新向订阅者的终端传输该目标消息。

为了便于理解,下面以一种优选实施方式为例对本申请实施例的消息传输方法进行介绍。为了便于理解,以服务节点直接向订阅者的终端推送消息为例进行介绍。如,参见图4,其示出了本申请一种消息传输方法一个实施例的流程示意图,本实施例的方法可以包括:

S401,发布者的终端向服务节点发送待发布的消息,该待发布的消息携带有该消息的主题。

S402,服务节点根据该消息的主题,并基于Raft算法,将该消息存储到该主题对应的存储空间中的各个消息队列内。

S403,服务节点基于Raft算法,将该消息进行复制,并将复制的消息存储到备用服务节点中该主题对应的存储空间内的各个消息队列中。

其中,Raft算法是一致性算法,基于Raft算法进行消息备份是一种优选实施方式,其可以实现数据一致性和容灾主备切换,简单易维护。

S404,如果到达消息确认时刻,服务节点确定该消息确认时刻之前指定时间段内接收到并成功存储的待确认的消息,向该待确认的消息所对应的发布者的终端返回消息确认指示。

其中,该消息确认时刻可以是按照预设的消息确认周期推算出的需要批量确认接收到的消息的时刻。

S405,服务节点确定预设的拥塞临界值T,最大限制数量QPS,并设定预期数量P的初始值为1,设定用动态变量D的初始值为0。

其中,该步骤S405为可选步骤,其仅仅在首次投递消息时执行,目的是确定预期数量P以及动态变量D的初始值,以便后续在该初始值的基础上,动态调整这两个参数。

S406,对于主题内的任意一个消息队列,如果服务节点检测到当前满足该消息队列的消息投递条件,则确定该消息队列的订阅者。

由于本实施例为服务节点主动向订阅者推送消息队列中的消息,因此,消息投递条件可以不包括:该消息队列的订阅者向该服务节点发送消息获取请求。

S407,服务节点检测该消息队列中是否存在尚未被投递的消息,如果是,则执行步骤S408;如果否,则结束本次投递流程;

S408,如果该消息队列中存在尚未被投递的消息,服务节点检测该动态变量D的取值是否小于预期数量P的取值,如果是,则执行步骤S409,如果否,则返回步骤S406。

S409,服务节点检测该预期数量P的取值是否小于该最大限制数量QPS,如果是,则执行步骤S411,如果否,则执行步骤S410;

S410,服务节点将该最大预期数量P的取值减一,并返回步骤S406;

S411,服务节点按照消息队列中尚未被投递的消息的顺序,从消息队列中确定本次需要投递的目标消息,并将目标消息推送给该订阅者的终端;

S412,服务节点将该动态变量D的取值加一,并触发返回步骤S407,以及执行步骤S413。

S413,服务节点将该目标消息作为已投递消息存储到消息队列中的已投递消息集合中,并标记该目标消息的推送时刻。

其中,该推送时刻相对于前面实施例所提到的目标消息的传输时刻。

其中,已投递消息集合中存储了该消息队列中已经被投递但未确认投递成功的消息。

S414,如果订阅者的终端接收到服务节点推送的目标消息时,则会向该服务节点发送该目标消息的确认接收指示;

S415,服务节点在接收到该目标消息的确认接收指示时,从该已投递消息集合中删除该目标消息,并将动态变量D的取值减一;

S416,服务节点判断该预期数量P的取值是否小于该拥塞临界值T,如果是,则执行步骤S417;如果否,则执行步骤S418;

S417,服务节点将该最大预期数量P的取值加一,返回步骤S407;

S418,服务节点将该最大预期数量P的取值,与该预期数量P的取值分之一的和,设定为该最大预设数量P的取值,并返回步骤S407;

在步骤S418中,预期数量P=P+1/P。

S419,如果服务节点检测到该目标消息的推送时刻距离当前时刻的时长超过预设的超时时长,且已投递消息集合中仍存在该目标消息,则检测推送该目标消息的次数是否超过预设次数,如果是,则执行步骤S420;如果否,则执行步骤S421;

其中,该已投递消息集合中仍存在该目标消息则说明未接收到该目标消息的确认接收指示。

S420,如果服务节点检测到推送该目标消息的次数超过预设次数,则将该目标消息从该已投递消息集合中删除,并将该动态变量D的取值减一,并返回步骤S407;

S421,服务节点重新向该订阅者的终端推送该目标消息;

S422,更新该目标消息的推送时刻。

可以理解的是,在执行了步骤S422之后可以触发返回该步骤S413,以更新步骤S413中的目标消息的推送时刻,并触发后续流程。

S423,将该动态变量D的取值加一。

在步骤S423之后,动态变量D的取值发送变化,此时可以返回步骤S407,以便服务节点判断是否需要继续进行消息投递。

S424,如果服务节点检测到该目标消息的推送时刻距离当前时刻的时长超过预设的超时时长,且已投递消息集合中仍存在该目标消息,则将拥塞临界值设定为该预期数量的一半,并将预期数量重置为1。

当然,执行了该步骤S424之后,可以触发返回步骤S407,以便服务节点判断是否需要继续进行消息投递。

需要说明的是,该步骤S424与步骤S419可以同时执行,另外,在本申请实施例中将触发重新推送目标消息的时长设置为与超时时长相同,但是可以理解的是,触发重新推送目标消息的时长也可以设置的与超时时长不相同。

同时,为了便于理解在预期数量随着投递次数的动态变化,结合图4,可以参见图5和图6,其中,图5和图6中的横坐标表示投递次数,纵坐标表示预期数量的取值。该图5示出了在不存在消息超时的情况下,预期数量随着投递次数的变化示意图,由图5可以看出,在预期数量不超过拥塞临界值T的前提下,随着投递次数的增加,预期数量的增速较快;当预期数量超过拥塞临界值T的前提下,随着投递次数的增加,预期数量的增速变慢;同时,在预期数量临近最大限制数量QPS时,该预期数量的取值会维持在临界该QPS的数值范围内,而不会持续增长。

图6示出了在存在消息超时的情况下,预期数量随着投递次数的变化示意图,由图6可以看出,在预期数量为到达该QPS之前,存在消息超时情况,在该种情况下,服务节点会重新设置拥塞临界值T,并将预期数量的取值设置为1,使得预期数量重新从1开始,随着投递递增,且预期数量增速较快的时间段变少。

另一方面,本申请实施例还提供了一种消息传输装置。

参见图7,其示出了本申请一种消息传输装置一个实施例的组成结构示意图,本实施例的装置可以包括:

订阅者确定单元701,用于对于主题中的任意一个消息队列,如果满足所述消息队列的消息投递条件,则确定所述消息队列对应的订阅者;

消息传输单元702,用于如果所述消息队列中存在尚未被投递的消息,且用于限制连续投递次数的动态变量小于用于限制并行传输消息数量的预期数量,则从所述消息队列中确定需要投递的目标消息,向所述订阅者的终端传输所述目标消息,并将所述动态变量的取值加一,直至所述动态变量不小于所述预期数量;

确认调整单元703,用于如果接收到所述订阅者的终端针对所述目标消息的消息确认指示,则将所述动态变量的取值减一,并增加所述预期数量的取值,其中,所述消息确认指示表明所述订阅者的终端成功接收到消息。

时刻记录单元704,用于在所述消息传出单元每次向所述订阅者的终端传输所述目标消息之后,记录所述目标消息的传输时刻;

超时调整单元705,用于如果所述目标消息的传输时刻距离当前时刻的时长超过预设的超时时长,且未接收到针对所述目标消息的消息确认指示,则降低所述预期数量的取值。

可选的,所述超时调整单元在降低所述预期数量的取值时具体用于,将所述预期数量降低为目标设定值。进一步的,所述目标设定值为1。

可选的,所述订阅者确定单元中的所述消息队列的消息投递条件包括以下任意一种或几种:

所述消息队列中存在新发布的消息;

接收到所述订阅者的终端返回的针对所述消息队列中消息的消息确认指示;

最近一次向所述订阅者的终端传输消息的时刻距离当前时刻的时长超过预设时长;

接收到所述订阅者的终端发送的消息获取请求。

可选的,所述消息传输装置还可以包括:

消息标记单元,用于在所述时刻记录单元记录所述目标消息的传输时刻的同时,将所述目标消息作为已投递消息存储到所述消息队列的已投递集合中;

消息删除单元,用于所述如果接收到所述订阅者的终端针对所述目标消息的消息确认指示,则在所述超时调整单元将所述动态变量的取值减一的同时,将所述目标消息从所述已投递集合中删除;

所述超时调整单元,具体为用于如果所述目标消息的传输时刻距离当前时刻的时长超过预设的超时时长,且所述已投递消息集合中仍存在所述目标消息,则降低所述预期数量的取值。

可选的,本实施例中的消息传输装置的确认调整单元可以包括:

变量调整单元,用于如果接收到所述订阅者的终端针对所述目标消息的消息确认指示,则将所述动态变量的取值减一;

第一判断单元,用于在所述变量调整单元将所述动态变量的取值减一的同时,判断所述预期数量的取值是否小于预设的拥塞临界值;

第一预期调整单元,用于如果所述预期数量的取值小于所述拥塞临界值,则将所述预期数量的取值增加目标设定值;

第二预期调整单元,用于如果所述预期数量的取值不小于所述拥塞临界值,则将所述预期数量的取值与预设的递增变量值之和,设定为所述预期数量的取值,其中,所述递增变量值小于所述目标设定值。

可选的,预设的递增值为1与所述预期数量的取值的比值。

可选的,所述消息传输装置还可以包括:

临界值调整单元,用于如果所述目标消息的传输时刻距离当前时刻的时长超过预设的超时时长,且未接收到针对所述目标消息的消息确认指示,则在所述超时调整单元降低所述预期数量的取值之前,将所述拥塞临界值更新为所述预期数量的取值的一半。

可选的,所述降低所述预期数量的取值包括:

将所述预设数量的取值设定为1。

可选的,所述消息传输装置还可以包括:

检测单元,用于在所述消息传输单元从所述消息队列中确定需要投递的目标消息之前,检测所述预期数量的取值是否小于预设的最大限制数量,所述最大限制数量用于限制并行传输消息的最大数量;

所述消息传输单元,具体用于如果所述消息队列中存在尚未被投递的消息,用于限制连续投递次数的动态变量小于用于限制并行传输消息数量的预期数量,且所述检测单元检测到所述预期数量的取值小于所述最大限制数量,则从所述消息队列中确定需要投递的目标消息,向所述订阅者的终端传输所述目标消息,并将所述动态变量的取值加一,直至所述动态变量不小于所述预期数量。

可选的,所述装置还可以包括:

第三预期调整单元,用于如果检测单元检测到所述预期数量的取值不小于所述最大限制数量,则将所述预期数量的取值减少目标设定值,并触发执行条件监控单元的操作;

条件监控单元,用于监控当前是否满足所述消息队列的消息投递条件。

可选的,所述装置还可以包括:

次数监测单元,用于如果所述目标消息的传输时刻距离当前时刻的时长超过预设的超时时长,且未接收到针对所述目标消息的消息确认指示,则检测传输所述目标消息的次数是否达到预设次数;

投递重试单元,用于如果传输所述目标消息的次数未超过所述预设次数,则向所述订阅者的终端传输所述目标消息,将所述目标消息的传输时刻更新为当前时刻,并将所述动态变量的取值加一;

失败处理单元,用于如果传输所述目标消息的次数超过所述预设次数,则丢弃所述目标消息,并将所述动态变量的取值减一。

另一方面,本发明实施例还提供了一种服务器,该服务器可以包括上述所述的一种消息传输方法。

图8示出了服务器的硬件结构框图,参照图8,服务器800可以包括:处理器801,通信接口802,存储器803和通信总线804;

其中处理器801、通信接口802、存储器803通过通信总线804完成相互间的通信;

可选的,通信接口802可以为通信模块的接口,如GSM模块的接口;

处理器801,用于执行程序;

存储器803,用于存放程序;

程序可以包括程序代码,所述程序代码包括计算机操作指令。

处理器801可能是一个中央处理器CPU,或者是特定集成电路ASIC(Application Specific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。

存储器803可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。

其中,程序可具体用于:

对于主题中的任意一个消息队列,如果满足所述消息队列的消息投递条件,则确定所述消息队列对应的订阅者;

如果所述消息队列中存在尚未被投递的消息,且用于限制连续投递次数的动态变量小于用于限制并行传输消息数量的预期数量,则从所述消息队列中确定需要投递的目标消息,向所述订阅者的终端传输所述目标消息,并将所述动态变量的取值加一,直至所述动态变量不小于所述预期数量;

如果接收到所述订阅者的终端针对所述目标消息的消息确认指示,则将所述动态变量的取值减一,并增加所述预期数量的取值,其中,所述消息确认指示表明所述订阅者的终端成功接收到消息。

其中,在每次向所述订阅者的终端传输所述目标消息之后,记录所述目标消息的传输时刻;

如果所述目标消息的传输时刻距离当前时刻的时长超过预设的超时时长,且未接收到针对所述目标消息的消息确认指示,则降低所述预期数量的取值。

需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。

对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

以上仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

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