一种消息发送方法及服务器与流程

文档序号:14395551阅读:159来源:国知局

本发明涉及通信技术领域,尤其涉及一种消息发送方法及服务器。



背景技术:

在传统的mas(mobileagentserver,移动代理服务器)业务中,用户在电信运营商开户后,电信运营商会为用户部署独立的mas服务器,并为该用户设定一个网关。用户需要发送短信时,首先将短信提交到该mas服务器,再由mas服务器连接用户开户的网关,实现短信发送。

一般来说,mas服务器在为用户提供发送短信的服务时,可连接几个或几十个网关。如此,在mas服务器内部可为每个网关均创建一个发送器,发送器中包括一个由有限大小的队列和由多个线程组成的线程池。于是,服务器在收到用户要发送的短信后,通过内部的相关逻辑,确定出该消息对应的网关,进而根据网关标识查找到该网关的发送器,然后将消息提交发送器,发送器按照该网关的发送速度进行消息发送。可以看出,在mas服务器连接的网关数量不多的情况下,上述方案可以实现较高效率的短信发送,因为每个网关均具有一个独立的线程池不仅可以有效地利用cpu,还可避免不同网关的消息之间的互相影响。

然而,随着业务模式的变化,电信运营商逐渐将mas业务部署在云服务器上,在这种场景下,云服务器通常需要连接上万个网关,如此庞大的网关数量,为每个网关均创建一个独立的线程池的方案已不可取,否则cpu会在忙于在海量线程中进行切换而无力执行其他业务,进而导致了消息发送的速率降低。而若采用海量网关使用一个统一的线程池的方案,发送到多个网关的消息将按照消息提交到云服务器的顺序存在同一队列中,由于云服务器按照队列中消息的顺序进行依次处理,若发送到某一网关的消息数量较多,则会影响其他网关的消息发送。

因此,目前亟需要一种消息发送方法,用于解决现有技术中云服务器在连接海量网关进行消息发送的复杂场景下,发送到不同网关的消息互相影响的技术问题。



技术实现要素:

本发明提供一种消息发送方法及服务器,用于解决现有技术中云服务器在连接海量网关进行消息发送的复杂场景下,发送到不同网关的消息互相影响的技术问题。

本发明实施例提供的一种消息发送方法,所述方法应用于服务器,所述服务器中包括多个消息发送器,每一消息发送器中均包括用于存储待发送消息的消息队列;所述消息发送器用于向对应的网关发送消息,且所述消息发送器对应至少一个网关;所述方法包括:

针对第一消息发送器,所述服务器从所述第一消息发送器的消息队列中获取待发送的第一消息;所述第一消息是所述服务器根据所述第一消息所要发送到的第一网关存入所述第一消息发送器的消息队列中的;所述第一消息发送器为所述多个消息发送器中的任一消息发送器;

所述服务器根据所述第一网关,判断所述第一消息发送器当前时间周期内已发送给所述第一网关的消息数量是否达到设定阈值,若达到所述设定阈值,则将所述第一消息重新存入所述消息队列,若没有达到所述设定阈值,则将所述第一消息发送给所述第一网关。

可选地,所述服务器通过如下方式将所述第一消息存入所述第一消息发送器的消息队列中:

所述服务器接收所述第一消息,确定所述第一消息所要发送到的第一网关;

所述服务器根据所述第一网关以及所述服务器中存储的各网关与消息发送器的对应关系,确定出所述第一网关对应的第一消息发送器;

所述服务器将所述第一消息存入所述第一消息发送器的消息队列中。

可选地,所述服务器将所述第一消息存入所述第一消息发送器的消息队列中,包括:

所述服务器获取所述第一消息发送器的消息队列存储的待发送到所述第一网关的待发送消息的第一消息数量;

所述服务器若确定所述第一消息数量小于所述第一网关对应的队列消息限额,则将所述第一消息存入所述消息队列中。

可选地,所述方法还包括:

所述服务器若确定所述第一消息数量大于等于所述第一网关对应的队列消息限额,则获取所述服务器的消息缓存中存储的待发送到所述第一网关的待发送消息的第二消息数量;

所述服务器若确定所述第二消息数量小于等于所述第一网关对应的缓存消息限额,则将所述第一消息存入所述消息缓存中,否则发出延迟提交指示,以指示所述第一消息的发送方在设定时间后再次提交所述第一消息。

可选地,所述方法还包括:

所述服务器按照设定周期获取所述第一消息数量以及所述第二消息数量;

所述服务器若确定所述第一消息数量小于所述第一网关对应的队列消息限额,且所述第二消息数量不为零,则根据所述第一消息数量、所述第二消息数量以及所述第一网关对应的队列消息限额,将所述消息缓存中存储的待发送到所述第一网关的待发送消息存入所述第一消息发送器的消息队列中。

可选地,所述消息队列包括发送队列和接收队列;

所述服务器从所述第一消息发送器的消息队列中获取待发送的第一消息,包括:所述服务器从所述第一消息发送器的发送队列中获取待发送的第一消息;

所述若达到所述设定阈值,则将所述第一消息重新存入所述消息队列,包括:若达到所述设定阈值,则将所述第一消息存入所述接收队列;

所述服务器将所述第一消息存入所述第一消息发送器的消息队列中,包括:所述服务器将所述第一消息存入所述接收队列;

所述方法还包括:

所述服务器若确定所述第一消息发送器的所述发送队列中存储的消息发送完毕,则将所述发送队列设置为接收队列,同时将所述接收队列设置为发送队列。

可选地,所述方法还包括:

所述服务器周期性地获取每个消息发送器在设定时间段内发送的消息总数;

所述服务器根据每个消息发送器发送的消息总数,调整所述各网关与消息发送器之间的对应关系。

基于同样的发明构思,本发明实施例还提供一种服务器,所述服务器包括:

获取模块,用于针对第一消息发送器,从所述第一消息发送器的消息队列中获取待发送的第一消息;所述第一消息是根据所述第一消息所要发送到的第一网关存入所述第一消息发送器的消息队列中的;所述第一消息发送器为多个消息发送器中的任一消息发送器;

处理模块,用于根据所述第一网关,判断所述第一消息发送器当前时间周期内已发送给所述第一网关的消息数量是否达到设定阈值,若达到所述设定阈值,则将所述第一消息重新存入所述消息队列,若没有达到所述设定阈值,则将所述第一消息发送给所述第一网关。

可选地,所述服务器中还包括收发模块,用于:

接收所述第一消息,确定所述第一消息所要发送到的第一网关;

根据所述第一网关以及所述服务器中存储的各网关与消息发送器的对应关系,确定出所述第一网关对应的第一消息发送器;

将所述第一消息存入所述第一消息发送器的消息队列中。

可选地,所述收发模块具体用于:

获取所述第一消息发送器的消息队列存储的待发送到所述第一网关的待发送消息的第一消息数量;

若确定所述第一消息数量小于所述第一网关对应的队列消息限额,则将所述第一消息存入所述消息队列中。

可选地,所述收发模块还用于:

若确定所述第一消息数量大于等于所述第一网关对应的队列消息限额,则获取所述服务器的消息缓存中存储的待发送到所述第一网关的待发送消息的第二消息数量;

若确定所述第二消息数量小于等于所述第一网关对应的缓存消息限额,则将所述第一消息存入所述消息缓存中,否则发出延迟提交指示,以指示所述第一消息的发送方在设定时间后再次提交所述第一消息。

可选地,所述处理模块还用于:

按照设定周期获取所述第一消息数量以及所述第二消息数量;

若确定所述第一消息数量小于所述第一网关对应的队列消息限额,且所述第二消息数量不为零,则根据所述第一消息数量、所述第二消息数量以及所述第一网关对应的队列消息限额,将所述消息缓存中存储的待发送到所述第一网关的待发送消息存入所述第一消息发送器的消息队列中。

可选地,所述消息队列包括发送队列和接收队列;

所述获取模块具体用于:从所述第一消息发送器的发送队列中获取待发送的第一消息;

所述处理模块具体用于:若达到所述设定阈值,则将所述第一消息存入所述接收队列;

所述收发模块具体用于:将所述第一消息存入所述接收队列;

所述服务器还包括切换模块,用于:

若确定所述第一消息发送器的所述发送队列中存储的消息发送完毕,则将所述发送队列设置为接收队列,同时将所述接收队列设置为发送队列。

可选地,所述处理模块还用于:

周期性地获取每个消息发送器在设定时间段内发送的消息总数;

根据每个消息发送器发送的消息总数,调整所述各网关与消息发送器之间的对应关系。

本发明另一实施例提供了一种服务器,其包括存储器和处理器,其中,所述存储器用于存储程序指令,所述处理器用于调用所述存储器中存储的程序指令,按照获得的程序执行上述任一种方法。

本发明另一实施例提供了一种计算机存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使所述计算机执行上述任一种方法。

本发明实施例中,服务器中包括多个消息发送器,针对其中的任一消息发送器,服务器从该消息发送器的消息队列中获取待发送的第一消息,根据第一消息所要发送到的第一网关,判断该第一消息发送器当前时间周期内已发送给第一网关的消息数量是否达到设定阈值,若达到所述设定阈值,则将第一消息重新存入消息队列,否则将第一消息发送给第一网关。由于一个消息发送器对应至少一个网关,一个消息发送器的消息队列中可存储有待发送到多个网关的消息。因此,采用本发明实施例中的技术方案,可在确定出当前时间周期内已发送到第一网关的消息数量达到设置阈值时,将获取到的待发送到第一网关的第一消息重新存入消息队列,以使服务器可继续从消息队列中获取并处理下一条消息,因而可有效避免服务器当前处理的消息无法发送时,后续发送到其他网关的消息也无法发送的问题,从而有效避免了不同网关的消息发送的互相影响,提高了系统的消息发送的效率、吞吐量和及时性。

附图说明

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

图1为本发明实施例提供的一种服务器的控制结构示意图。

图2为本发明实施例提供的一种消息发送方法所对应的流程示意图;

图3为本发明实施例中将第一消息存入第一消息发送器的消息队列中的方法所对应的流程示意图

图4为本发明实施例提供的一种服务器的结构示意图。

具体实施方式

为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例,仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

下面结合说明书附图对本发明实施例做进一步详细描述。

图1为本发明实施例中的服务器的控制结构示意图,如图1所示,服务器中包括多个消息发送器(如图1中所示的消息发送器1011、1012…101n)、消息缓存102,以及控制中心103。

其中,消息发送器用于向对应的网关发送消息,每一消息发送器中均包括一个用于存储待发送消息的消息队列。消息缓存也用于存储各个网关的待发送消息,但是针对某一网关,消息缓存中存储的该网关的待发送消息是在该网关对应的消息发送器的消息队列相对第一网关来说已满的情况下,才存入消息缓存的。控制中心用于记录各个网关分别对应的消息发送器,统计各网关在其对应的消息发送器的消息队列中存储的待发送消息的数量、各网关在消息缓存中存储的待发送消息的数量,以及各网关已发送的消息数量。

具体的,本发明实施例中,服务器中存储有各网关与消息发送器之间的对应关系,一个消息发送器可对应一个或多个网关。若消息发送器仅对应一个网关,则该消息发送器的消息队列中仅存储有该网关的待发送消息,若消息发送器对应多个网关,则该消息发送器的消息队列中可存储有这多个网关的待发送消息。

还需说明的是,本发明实施例中,不同的消息发送器对应的各网关互不重叠,从网关的角度,一个网关仅可对应一个消息发送器。如此,某一网关的待发送消息仅通过一个指定的消息发送器发送,从而服务器可对该网关的消息发送进行有效的集中控制和管理。

由于一个消息发送器的消息队列中可存储有一个或多个网关的待发送消息,本发明实施例中,服务器还可针对各个网关分别设定队列消息限额,一个网关对应的队列消息限额为,该网关对应的消息发送器的消息队列中最多可存储的该网关的待发送消息的消息数量。作为一种优选的实现方式,该队列消息限额的数值可以设置为该网关对应的消息发送器在设定时间段内允许发送到该网关的最大消息数量,比如说,可以将某一网关对应的队列消息限额设置为该网关对应的消息发送器的在1秒钟内可发送到该网关的消息数量。

本发明实施例中,服务器对各个网关设定的队列消息限额可以相同,也可以不相同,本领域技术人员可针对各网关的业务量对网关的队列消息限额的数值进行具体的设定,本发明对此不做具体限制。

可见,针对发送到某一网关的某一消息,服务器接收到该消息后,只有在该网关对应的消息发送器的消息队列中存储的该网关的待发送消息的消息数量小于该网关对应的队列消息限额时,才可存储到该消息发送器的消息队列中。若消息队列中已存储的该网关的待发送消息的消息数量达到队列消息限额,则无法将消息存储到消息队列中,在这种情况下,服务器可将超出队列消息限额的消息根据网关标识,存入消息缓存中。

本发明实施例中,服务器中还为各个网关分别设置了一个缓存队列,一个网关的缓存队列用于存储该网关的待发送消息,缓存队列中的各消息按照存入缓存队列的时间先后顺序排列。相应地,本发明实施例中的消息缓存具体可以为哈希表,该哈希表以各网关的网关标识为键值,存储了各网关的网关标识与缓存队列之间的对应关系。

如此,当服务器需要从消息缓存中获取某一网关的待发送消息时,可根据该网关的网关标识,通过查询哈希表可快速地定位到该网关的缓存队列,从而从该网关的缓存队列中到获取该网关的待发送消息。本发明实施例中,哈希表可以具有多种具体实现方式,比如,concurrenthashmap等。本发明对此不做具体限制。

本发明实施例中,服务器还可针对各个网关分别设定缓存消息限额,一个网关对应的缓存消息限额为,该网关对应的缓存队列中最多可存储的待发送消息的消息数量。对于同一网关,该网关的缓存消息限额大于队列消息限额,即缓存消息限额的数值也可以设置为该网关对应的消息发送器在设定时间段内允许发送到该网关的最大消息数量,但是缓存消息限额的设定时间段长度大于队列消息限额的时间段长度。比如说,若将某一网关的队列消息限额设置为该网关对应的消息发送器在1秒钟内可发送到该网关的消息数量,则相应地,可将该网关对应的缓存消息限额设置为该网关对应的消息发送器的在10秒钟内可发送到该网关的消息数量。

本发明实施例中,可由本领域技术人员根据实际业务需要对各个网关的缓存消息限额进行具体的设置,各网关的缓存消息限额可以相同,也可以不相同,本发明对此不做具体限制。

需要说明的是,当服务器对各个网关具体设定了队列消息限额和缓存消息限额后,还可将各网关对应的队列消息限额和缓存消息限额记录在控制中心中,以便在服务器获取、处理消息时进行查询。

图2为本发明实施例提供的一种消息发送方法所对应的流程示意图,如图2所示,所述方法包括:

步骤s201:针对第一消息发送器,所述服务器从所述第一消息发送器的消息队列中获取待发送的第一消息;所述第一消息是所述服务器根据所述第一消息所要发送到的第一网关存入所述第一消息发送器的消息队列中的;

步骤s202:所述服务器根据所述第一网关,判断所述第一消息发送器当前时间周期内已发送给所述第一网关的消息数量是否达到设定阈值,若达到所述设定阈值,则将所述第一消息重新存入所述消息队列,若没有达到所述设定阈值,则将所述第一消息发送给所述第一网关。

由于一个消息发送器对应至少一个网关,一个消息发送器的消息队列中可存储有待发送到多个网关的消息。因此,采用本发明实施例中的技术方案,可在确定出当前时间周期内已发送到第一网关的消息数量达到设置阈值时,将获取到的待发送到第一网关的第一消息重新存入消息队列,以使服务器可继续从消息队列中获取并处理下一条消息,因而可有效避免服务器当前处理的消息无法发送时,后续发送到其他网关的消息也无法发送的问题,从而有效避免了不同网关的消息发送的互相影响,提高了系统的消息发送的效率、吞吐量和及时性。

本发明实施例中,所述第一消息发送器为服务器的多个消息发送器中的任一消息发送器,本发明实施例将以该第一消息发送器为例,来说明消息的发送过程。

具体来说,在步骤s201中,服务器从第一消息发送器的消息队列中获取待发送的第一消息,该第一消息是服务器根据该第一消息所要发送到的第一网关存入第一消息发送器的消息队列中的。由于队列这种数据结构的先进先出特性,服务器获取到的第一消息实际上该消息队列的所有待发送消息中存入时间最早的消息,即消息队列中的第一条消息。

随后,服务器可根据获取到的第一消息,确定出该第一消息所要发送到的第一网关,该第一网关为第一消息发送器对应的一个或多个网关中的一个网关。

进而,在步骤s202中,服务器可获取第一消息发送器在当前时间周期内已发送到第一网关的消息数量,并判断该消息数量是否达到设定阈值。其中,设定阈值为消息发送器在一个时间周期内允许向某一网关发送的最大消息数量,标志了服务器为该网关设定的最大消息发送速度。本发明实施例中,服务器可为各个网关分别设置设定阈值,各个网关对应的设定阈值可以相同,也可以不相同。若两个网关对应的设定阈值相同,则表示服务器对这两个网关设定了相同的最大消息发送速度。本领域技术人员根据各网关的实际业务情况对设定阈值进行具体设置,本发明对此不做具体限制。

具体的,若消息数量达到该设定阈值,则表示第一网关的消息发送已达到了设定的最大消息发送速度,那么服务器确定不在当前时间周期内发送该第一消息,并将该第一消息重新存入消息队列。由于服务器总是在消息队列的起始获取消息,末尾存入消息,因此,将第一消息重新存入消息队列后,该第一消息就由消息队列中的第一条消息变为了消息队列中的最后一条消息。若消息数量没有达到设定阈值,则表示第一消息发送还未达到设定的最大消息发送速度,因此,服务器将第一消息发送给第一网关。

假设在第一消息发送器的消息队列中,位于第一消息之后的下一条消息为第二消息。由于第一消息和第二消息所要发送到的网关可能不同,因此,在当第一网关的消息发送达到限定的最大消息发送速度时,将第一消息重新存入消息队列,那么第二消息就由消息队列中的第二条消息变为了消息队列中的第一条消息,服务器就可从消息队列中获取第二消息,并判断第二消息是否能够发送。在这种场景下,若第二消息所要发送到的网关为第二网关,此时若第二网关的消息发送未达到设定的最大消息发送速度,则服务器就可正常发送该第二消息。同理,若第二消息所要发送到的网关为上述第一网关,或者第二消息所要发送到的第二网关也达到了设定的最大消息发送速度,则服务器可将第二消息也重新存入该消息队列。

可以看出,由于服务器可在某一网关的消息发送达到最大发送速度时,可将获取到的该网关的待发送消息重新存入消息队列,因此可避免由于某一网关的消息发送达到最大发送速度而无法发送消息时,其他网关的待发送消息也无法发送的问题,从而避免了不同网关的消息发送的互相影响。

本发明实施例中,每个消息发送器中还包括一个发送线程,该发送线程用于依次获取消息队列中的各个待发送消息,并发送。因此,服务器通过第一发送器中的发送线程来执行上述步骤s201至步骤s202中,从第一消息发送器的消息队列中获取第一消息、判断是否能够发送、发送消息等步骤。

由于每个消息发送器均通过自身的发送线程来处理该消息发送器的消息队列中消息发送,而服务器中又包括多个消息发送器,如此,服务器利用多个线程来同时工作,可有效提高系统整体的吞吐量。

本发明实施例中,服务器在执行上述步骤s101至步骤s102处理第一消息之前,还可采用如下方式将第一消息存入第一消息发送器的消息队列中,如图3所示,包括如下步骤:

步骤s301:所述服务器接收所述第一消息,确定所述第一消息所要发送到的第一网关;

步骤s302:所述服务器根据所述第一网关以及所述服务器中存储的各网关与消息发送器的对应关系,确定出所述第一网关对应的第一消息发送器;

步骤s303:所述服务器将所述第一消息存入所述第一消息发送器的消息队列中。

具体的,在步骤s301中,服务器接收第一消息,并根据该第一消息确定出其要发送到的第一网关。

在步骤s302中,服务器中可直接存储各网关与消息发送器之间的对应关系,或者也可按照设定规则将发送到某一网关的消息指定到某个消息发送器,比如说,可以将网关标识作为键值key,采用设定的哈希算法,计算出某一网关对应的消息发送器,或者也可以使用循环冗余校验算法计算出某一网关对应的消息发送器,本发明对此不做具体限制。

在步骤s303中,服务器可获取第一消息发送器的消息队列存储的待发送到所述第一网关的第一消息数量,若确定第一消息数量小于第一网关对应的队列消息限额,则将第一消息存入所述消息队列中。

否则,若确定第一消息数量大于等于第一网关对应的队列消息限额,则说明当前无法将该第一消息存入第一消息发送器的消息队列中,因而,服务器可进一步获取消息缓存中存储的待发送到第一网关的第二消息数量,若确定第二消息数量小于等于第一网关对应的缓存消息限额,则将第一消息存入消息缓存,于是,在后续第一消息发送器的消息队列的第一消息数量小于第一网关的队列消息限额时,可再将该第一消息存入消息队列中。

否则,若第一消息数量大于等于第一网关对应的队列消息限额,同时第二消息数量大于等于第一网关对应的缓存消息限额,则说明针对第一网关,当前第一消息发送器的消息队列,以及服务器的消息缓存均已满,当前无法接收发送至第一网关的消息,于是,服务器可向第一消息的发送方发送延迟提交指示,以指示第一消息的发送方在设定时间后再次提交所述第一消息。举例来说,该设定时间可以为几秒钟、几分钟或者其他时长,其具体数值可由本领域技术人员根据实际情况自行设定,本发明对此不做具体限制。

针对第一网关,由于服务器可在第一消息发送器的消息队列中存储的发送至第一网关的消息数量达到第一网关的队列消息限额的情况下,将发送至第一网关的消息存入消息缓存中,因此本发明实施例,服务器还可按照设定周期获取上述第一消息数量和第二消息数量,若确定所述第一消息数量小于所述第一网关对应的队列消息限额,且所述第二消息数量不为零,则可根据所述第一消息数量、所述第二消息数量以及所述第一网关对应的队列消息限额,将所述消息缓存中存储的待发送到所述第一网关的待发送消息存入所述第一消息发送器的消息队列中,直至第一消息数量达到队列消息限额或者第二消息数量变为零。

具体的,若获取到的第一消息数量小于所述第一网关对应的队列消息限额,则表示第一消息发送器的消息队列中当前还可存入的第一网关的待发送消息的数量等于队列消息限额与第一消息数量之差。

进而,若第二消息数量小于等于队列消息限额与第一消息数量之差,则可将消息缓存中存储的所有第一网关的待发送消息都存入第一消息发送器的消息队列中,在这种情况下,消息缓存中第一网关对应的缓存队列将变为空。

若第二消息数量大于队列消息限额与第一消息数量之差,则可将消息缓存中存储的(队列消息限额-第一消息数量)个消息存入第一消息发送器的消息队列中,在这种情况下,存入消息队列中的消息为,消息缓存中第一网关对应的缓存队列中的前(队列消息限额-第一消息数量)个消息。

本发明实施例中,服务器可通过设置一个扫描线程来单独执行上述扫描第一消息发送器的消息队列以及消息缓存来确定上述第一消息数量和第二消息数量、将消息缓存中的消息发送到消息队列中的方法。

本发明实施例中,每个消息发送器的消息队列可以为一个队列,也可以是由发送队列和接收队列两个队列组成的消息队列。其中,发送队列仅用于服务器获取和发送消息,而接收消息仅用于存入消息。

具体的,若每个消息发送器的消息队列包括发送队列和接收队列两个队列,那么服务器在接收消息,并判断消息可存入消息队列的情况下,将消息存入接收队列;与此同时,服务器还将从发送队列中逐一获取消息,若判断该消息对应的网关未达到设定的最大发送速度,则将消息发送给对应的网关,否则,将该消息取出后存入接收队列中。

此外,若发送队列中存储的待发送消息全部发送完毕,服务器还将切换发送队列和接收队列,即将发送队列设置为接收队列,同时将接收队列设置为发送队列,然后继续进行消息发送。当前,若发送队列中的待发送消息发送完毕时,接收队列也为空,则服务器可等待一段时间,待接收队列中接收到一定量的消息后,再进行队列的切换。

本发明实施例中,服务器中存储的各网关与消息发送器的对应关系可以是在设定后保持不变,但是考虑到各网关的业务情况可能随着时间的变化而动态变化,因此,本发明实施例中服务器还可根据各消息发送器的运行情况,对各网关与消息发送器的对应关系进行动态的调整。

具体的,可在服务器中设置一个管理线程,用来周期性的扫描控制中心,以确定出各个消息发送器的消息队列中的消息总数,以及各个网关存储在对应的消息队列中的待发送消息的数量。若发现某一消息发送器的消息队列中存储的待发送消息的数量远大于其他消息发送器的消息队列中存储的待发送消息的数量,可动态地将该消息发送器对应的一个或多个网关分配给其他消息发送器。

本发明实施例中,调整各网关与消息发送器的对应关系可通过改变为消息指定消息发送器的算法来实现。举例来说,若服务器在接收到消息后,根据消息所要发送到的网关的网关标识,采用哈希算法来确定处理消息的发送器,则服务器可通过更改为消息指定消息发送器的哈希算法来更改各网关与消息发送器的对应关系。

可见,通过动态调整各网关与消息发送器的对应关系,可防止服务器接收到的消息集中到少数的几个消息发送器中进行处理,而导致系统的整体吞吐量降低的问题,从而可消除系统热点,保证系统平稳运行。

基于同样的发明构思,本发明实施例还提供一种服务器,图4为本发明实施例中提供的一种服务器的结构示意图,如图4所示,该服务器400包括:

获取模块401,用于针对第一消息发送器,从所述第一消息发送器的消息队列中获取待发送的第一消息;所述第一消息是根据所述第一消息所要发送到的第一网关存入所述第一消息发送器的消息队列中的;所述第一消息发送器为多个消息发送器中的任一消息发送器;

处理模块402,用于根据所述第一网关,判断所述第一消息发送器当前时间周期内已发送给所述第一网关的消息数量是否达到设定阈值,若达到所述设定阈值,则将所述第一消息重新存入所述消息队列,若没有达到所述设定阈值,则将所述第一消息发送给所述第一网关。

可选地,所述服务器中还包括收发模块403,用于:

接收所述第一消息,确定所述第一消息所要发送到的第一网关;

根据所述第一网关以及所述服务器中存储的各网关与消息发送器的对应关系,确定出所述第一网关对应的第一消息发送器;

将所述第一消息存入所述第一消息发送器的消息队列中。

可选地,所述收发模块403具体用于:

获取所述第一消息发送器的消息队列存储的待发送到所述第一网关的待发送消息的第一消息数量;

若确定所述第一消息数量小于所述第一网关对应的队列消息限额,则将所述第一消息存入所述消息队列中。

可选地,所述收发模块403还用于:

若确定所述第一消息数量大于等于所述第一网关对应的队列消息限额,则获取所述服务器的消息缓存中存储的待发送到所述第一网关的待发送消息的第二消息数量;

若确定所述第二消息数量小于等于所述第一网关对应的缓存消息限额,则将所述第一消息存入所述消息缓存中,否则发出延迟提交指示,以指示所述第一消息的发送方在设定时间后再次提交所述第一消息。

可选地,所述处理模块402还用于:

按照设定周期获取所述第一消息数量以及所述第二消息数量;

若确定所述第一消息数量小于所述第一网关对应的队列消息限额,且所述第二消息数量不为零,则根据所述第一消息数量、所述第二消息数量以及所述第一网关对应的队列消息限额,将所述消息缓存中存储的待发送到所述第一网关的待发送消息存入所述第一消息发送器的消息队列中。

可选地,所述消息队列包括发送队列和接收队列;

所述获取模块401具体用于:从所述第一消息发送器的发送队列中获取待发送的第一消息;

所述处理模块402具体用于:若达到所述设定阈值,则将所述第一消息存入所述接收队列;

所述收发模块403具体用于:将所述第一消息存入所述接收队列;

所述服务器还包括切换模块404,用于:

若确定所述第一消息发送器的所述发送队列中存储的消息发送完毕,则将所述发送队列设置为接收队列,同时将所述接收队列设置为发送队列。

可选地,所述处理模块402还用于:

周期性地获取每个消息发送器在设定时间段内发送的消息总数;

根据每个消息发送器发送的消息总数,调整所述各网关与消息发送器之间的对应关系。

基于同样的发明构思,本发明实施例还提供另一种服务器,该服务器可以包括中央处理器(centerprocessingunit,cpu)、存储器、输入/输出设备等,输入设备可以包括键盘、鼠标、触摸屏等,输出设备可以包括显示设备,如液晶显示器(liquidcrystaldisplay,lcd)、阴极射线管(cathoderaytube,crt)等。

存储器可以包括只读存储器(rom)和随机存取存储器(ram),并向处理器提供存储器中存储的程序指令和数据。在本发明实施例中,存储器可以用于存储上述消息发送方法的程序。

处理器通过调用存储器存储的程序指令,处理器用于按照获得的程序指令执行上述消息发送方法。

基于同样的发明构思,本发明实施例提供了一种计算机存储介质,用于储存为上述服务器所用的计算机程序指令,其包含用于执行上述消息发送方法的程序。

所述计算机存储介质可以是计算机能够存取的任何可用介质或数据存储设备,包括但不限于磁性存储器(例如软盘、硬盘、磁带、磁光盘(mo)等)、光学存储器(例如cd、dvd、bd、hvd等)、以及半导体存储器(例如rom、eprom、eeprom、非易失性存储器(nandflash)、固态硬盘(ssd))等。

由上述内容可以看出:

本发明实施例中,服务器中包括多个消息发送器,针对其中的任一消息发送器,服务器从该消息发送器的消息队列中获取待发送的第一消息,根据第一消息所要发送到的第一网关,判断该第一消息发送器当前时间周期内已发送给第一网关的消息数量是否达到设定阈值,若达到所述设定阈值,则将第一消息重新存入消息队列,否则将第一消息发送给第一网关。由于一个消息发送器对应至少一个网关,一个消息发送器的消息队列中可存储有待发送到多个网关的消息。因此,采用本发明实施例中的技术方案,可在确定出当前时间周期内已发送到第一网关的消息数量达到设置阈值时,将获取到的待发送到第一网关的第一消息重新存入消息队列,以使服务器可继续从消息队列中获取并处理下一条消息,因而可有效避免服务器当前处理的消息无法发送时,后续发送到其他网关的消息也无法发送的问题,从而有效避免了不同网关的消息发送的互相影响,提高了系统的消息发送的效率、吞吐量和及时性。

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

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或两个以上流程和/或方框图一个方框或两个以上方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或两个以上流程和/或方框图一个方框或两个以上方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或两个以上流程和/或方框图一个方框或两个以上方框中指定的功能的步骤。

尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

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