一种消息流量控制方法及装置与流程

文档序号:13534231阅读:147来源:国知局
一种消息流量控制方法及装置与流程

本发明涉及消息处理技术领域,特别是涉及一种消息流量控制方法及装置。



背景技术:

对于消息中间件来说,流量控制是消息通信中的重要技术。流量控制主要用来降低当数据消息的生产速度大于消费速度时,大量的数据消息将消息中间件撑爆的概率。

目前,消息中间件的流量控制机制:当消息中间件的内存使用率达到限定值,慢速消费者的数据消息被保存在消息中间件的一个临时文件中。在应对超量数据消息时,通常会丢弃慢速消费者的数据消息,当消息中间件中存储的数据消息达到临界值时,首先将最早的数据消息丢弃。但是,这些丢弃的数据消息可能会包含重要的业务消息,可能会对该消息消费者产生影响。



技术实现要素:

本发明的目的是提供一种消息流量控制方法及装置,以在进行消息流量控制时,避免因丢弃数据消息导致重要的业务消息的丢失,提高消息中间件的服务能力。

为解决上述技术问题,本发明提供如下技术方案:

一种消息流量控制方法,应用于消息中间件,包括:

对自身的内存使用率进行监测;

在监测过程中,如果达到设定的消息反馈触发条件,则将携带所述内存使用率的第一反馈消息发送给消息生产者,以使所述消息生产者根据所述第一反馈消息调整消息发送窗口的大小,并基于调整大小后的所述消息发送窗口通过所述消息中间件向消息消费者发送数据消息。

优选地,还包括:

如果接收到所述消息消费者回退的数据消息,则暂停向所述消息消费者发送数据消息的操作。

优选地,还包括:

如果所述消息消费者为慢速消费者,则将携带所述消息消费者的地址的第二反馈消息发送给所述消息生产者,以使所述消息生产者根据所述第二反馈消息,暂停通过所述消息中间件向所述消息消费者发送数据消息的操作。

优选地,通过以下步骤确定所述消息消费者是否为慢速消费者:

监测所述消息消费者对数据消息的消费速度;

在存在未消费的数据消息时,如果所述消费速度小于预设第一阈值,则确定所述消息消费者为慢速消费者。

优选地,在所述消费速度大于预设第二阈值时,还包括:

将携带所述消息消费者的第三反馈消息发送给所述消息生产者,以使所述消息生产者根据所述第三反馈消息,恢复通过所述消息中间件向所述消息消费者发送数据消息的操作。

一种消息流量控制装置,应用于消息中间件,包括:

内存使用率监测模块,用于对自身的内存使用率进行监测;

第一反馈消息发送模块,用于在监测过程中,如果达到设定的消息反馈触发条件,则将携带所述内存使用率的第一反馈消息发送给消息生产者,以使所述消息生产者根据所述第一反馈消息调整消息发送窗口的大小,并基于调整大小后的所述消息发送窗口通过所述消息中间件向消息消费者发送数据消息。

优选地,还包括数据消息暂停发送模块,用于:

如果接收到所述消息消费者回退的数据消息,则暂停向所述消息消费者发送数据消息的操作。

优选地,还包括第二反馈消息发送模块,用于:

如果所述消息消费者为慢速消费者,则将携带所述消息消费者的地址的第二反馈消息发送给所述消息生产者,以使所述消息生产者根据所述第二反馈消息,暂停通过所述消息中间件向所述消息消费者发送数据消息的操作。

优选地,还包括慢速消费者确定模块,用于通过以下步骤确定所述消息消费者是否为慢速消费者:

监测所述消息消费者对数据消息的消费速度;

在存在未消费的数据消息时,如果所述消费速度小于预设第一阈值,则确定所述消息消费者为慢速消费者。

优选地,还包括第三反馈消息发送模块,用于:

在所述消费速度大于预设第二阈值时,将携带所述消息消费者的第三反馈消息发送给所述消息生产者,以使所述消息生产者根据所述第三反馈消息,恢复通过所述消息中间件向所述消息消费者发送数据消息的操作。

应用本发明实施例所提供的技术方案,消息中间件对自身的内存使用率进行监测,在监测过程中,如果达到设定的消息反馈触发条件,则将携带内存使用率的第一反馈消息发送给消息生产者,以使消息生产者根据第一反馈消息调整消息发送窗口的大小,并基于调整大小后的消息发送窗口通过消息中间件向消息消费者发送数据消息。通过控制消息生产者的消息发送窗口大小,实现对数据消息的流量控制,在进行消息流量控制时,避免因丢弃数据消息导致重要的业务消息的丢失,提高消息中间件的服务能力。

附图说明

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

图1为本发明实施例中一种消息流量控制方法的实施流程图;

图2为本发明实施例中一种消息流量控制装置的结构示意图。

具体实施方式

本发明的核心是提供一种消息流量控制方法,该方法可以应用于消息中间件。

在实际应用中,消息生产者通过消息中间件(broker)向消息消费者发送数据消息。其中,消息生产者有一个依赖消息中间件内存的消息发送窗口(window),该消息发送窗口的大小(windowsize)可调整。消息生产者基于消息发送窗口将数据消息先发送给消息中间件,消息中间件向相应的消息消费者分发数据消息。每个消息消费者可以对应一个预读取文件夹(prefetch),接收消息中间件分发的数据消息,并存储到预读取文件夹的预读取数据消息队列中。消息消费者在数据消息队列中获取数据消息,并对获取的数据消息进行消费处理。如果数据消息队列为空,则等待,如果数据消息队列不为空,且此时的预读取文件夹没有剩余存储空间时,即达到prefetchlimit,则将不断到达的数据消息回退给消息中间件。消息中间件存储待分发给消息消费者的数据消息。

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

请参考图1,图1为本发明实施例中一种消息流量控制方法的实施流程图,包括以下步骤:

s101、对自身的内存使用率进行监测。

消息中间件不断接收消息生产者发送的数据消息,或者接收消息消费者回退的数据消息,这样会导致内存使用率不断发生变化。消息中间件的内存资源是消息中间件为分发数据消息给消息消费者所必须的,也就是说,消息中间件的内存使用率不能过高,如果内存使用率过高,可能会导致消息中间件无法正常工作。所以,为了避免消息中间件的内存使用率过高,而影响消息中间件正常工作,可以对自身的内存使用率进行监测。

s102、在监测过程中,如果达到设定的消息反馈触发条件,则将携带内存使用率的第一反馈消息发送给消息生产者,以使消息生产者根据第一反馈消息调整消息发送窗口的大小,并基于调整大小后的消息发送窗口通过消息中间件向消息消费者发送数据消息。

在本实施例中,可以预先设置一个或者多个消息反馈触发条件,该消息反馈触发条件可以是针对消息中间件的内存使用率的,也可以是针对消息消费者的消费速度的,还可以是一个预设的时间周期,本发明实施例对此并不限定。

需要说明的是,消息生产者有一个依赖消息中间件内存的消息发送窗口,该消息发送窗口的大小可以实时的进行调整,以便控制数据消息的生产速度。

在监测过程中,如果达到设定的消息反馈触发条件,则将携带内存使用率的第一反馈消息发送给消息生产者。消息生产者接收到第一反馈消息后,根据第一反馈消息携带的内存使用率调整消息发送窗口的大小,并基于调整大小后的消息发送窗口通过消息中间件向消息消费者发送数据消息。

其中,消息生产者基于内存使用率调整消息发送窗口的大小,可以根据预先设置的算法对消息发送窗口的大小进行调整。具体的,当内存使用率大于预设的一个门限值时,则减小消息发送窗口的大小,如将消息发送窗口的大小调整为原来的一半,当内存使用率小于预设的另外一个门限值时,则增加消息发送窗口的大小,如将消息发送窗口的大小调整为原来的二倍,具体的门限值的大小可以预先设置,也可以根据实际情况进行确定和调整,本发明实施例对此并不限定,或者,令消息发送窗口的大小与内存使用率呈反比例关系,具体的比值可以预先设置也可以根据实际情况进行确定和调整,本发明实施例并不限定。

在本发明的一个实施例中,如果接收到消息消费者回退的数据消息,则暂停向消息消费者发送数据消息的操作。

需要说明的是,消息消费者对应一个预读取文件夹,当预读取文件夹没有剩余存储空间时,消息消费者可以回退数据消息给消息中间件。

消息中间件如果接收到消息消费者回退的数据消息,则表明消息消费者的预读取文件夹已经没有剩余存储空间,无法继续接收消息中间件发送的数据消息。在这种情况下,消息消费者就开始回退数据消息给消息中间件,消息中间件接收到该数据消息后,可以暂停向消息消费者发送数据消息的操作。

在本发明的一个实施例中,如果消息消费者为慢速消费者,则将携带消息消费者的地址的第二反馈消息发送给消息生产者,以使消息生产者根据第二反馈消息,暂停通过消息中间件向消息消费者发送数据消息的操作。

在本实施例中,慢速消费者可以有一个,也可以有多个。例如,当消息生产者要将数据消息发送给一个消息消费者时,此时的慢速消费者至多为一个,而当消息生产者要进行数据消息的群发时,此时慢速消费者可能有多个。

如果消息中间件确定一个或多个消息消费者为慢速消费者,则将携带慢速消费者的地址的第二反馈消息发送给消息生产者。此时,消息生产者根据第二反馈消息中携带的地址,可知哪些消息消费者为慢速消费者,可以暂停通过消息中间件向慢速消费者发送数据消息的操作。这样,可以避免消息中间件中存储的慢速消费者回退的数据消息不断增加,导致因消息中间件内存使用率过高而无法正常工作的问题。

在本实施例中,可以在消息中间件的配置文件中设置目的地址策略(destinationpolicy),以暂停消息生产者通过消息中间件向消息消费者发送数据消息的操作。例如,可以在消息中间件使用通配符,以使消息生产者暂停通过消息中间件向单个消息消费者或者多个消息消费者发送数据消息的操作。具体的,当需要暂停消息生产者通过消息中间件向消息消费者发送数据消息的操作时,可以在destinationpolicy的policyentry元素中设置producerflowcontrol属性值为false。

需要说明的是,在消息生产者向多个消息消费者发送数据消息时,若出现慢速消费者,则可以单独暂停向该慢速消费者通过消息中间件发送数据消息,继续向其他正常消息消费者通过消息中间件发送数据消息,从而达到不影响向其他正常消息消费者发送该数据消息的目的,避免影响其他正常消息消费者获取消息生产者发送的数据消息。

在本发明的一个具体实施方式中,通过以下步骤确定消息消费者是否为慢速消费者:

步骤一、监测消息消费者对数据消息的消费速度;

步骤二、在存在未消费的数据消息时,如果消费速度小于预设第一阈值,则确定消息消费者为慢速消费者。

为便于描述,将上述两个步骤结合起来进行说明。

在本实施例中,可以预先设置一个第一阈值,具体的第一阈值大小可以预先设置,也可以根据实际情况进行确定和调整,本发明实施例对此并不限定。

消息中间件监测消息消费者对数据消息的消费速度,在消息消费者存在未消费的数据消息时,如果消息消费者的消费速度小于预设第一阈值,则确定消息消费者为慢速消费者。消费速度具体可以是单位时间内数据消息消费大小或数量。

在本发明的一个实施例中,在消费速度大于预设第二阈值时,还可以将携带消息消费者的第三反馈消息发送给消息生产者,以使消息生产者根据第三反馈消息,恢复通过消息中间件向消息消费者发送数据消息的操作。

在本实施例中,可以预先设置一个第二阈值,具体的第二阈值大小可以预先设置,也可以根据实际情况进行确定和调整,本发明实施例对此并不限定。

在消息生产者暂停通过消息中间件向消息消费者发送数据消息的操作之后,如果该消息消费者的消费速度大于预设第二阈值,则表明该消息消费者此时已经不再是慢速消费者,而是正常的消息消费者。在这种情况下,消息中间件可以将携带消息消费者地址的第三反馈消息发送给消息生产者。消息生产者根据接收到的第三反馈消息,恢复通过消息中间件向消息消费者发送数据消息的操作。

在本实施例中,可以在destinationpolicy的policyentry元素中设置producerflowcontrol属性值为true,以恢复消息生产者通过消息中间件向消息消费者发送数据消息的操作。

应用本发明实施例所提供的方法,消息中间件对自身的内存使用率进行监测,在监测过程中,如果达到设定的消息反馈触发条件,则将携带内存使用率的第一反馈消息发送给消息生产者,以使消息生产者根据第一反馈消息调整消息发送窗口的大小,并基于调整大小后的消息发送窗口通过消息中间件向消息消费者发送数据消息。通过控制消息生产者的消息发送窗口大小,实现对数据消息的流量控制,在进行消息流量控制时,避免因丢弃数据消息导致重要的业务消息的丢失,提高消息中间件的服务能力。

相应于上面的方法实施例,本发明实施例还提供了一种消息流量控制装置,下文描述的一种消息流量控制装置与上文描述的一种消息流量控制方法可相互对应参照。

参见图2所示,该装置应用于消息中间件,包括以下模块:

内存使用率监测模201,用于对自身的内存使用率进行监测;

第一反馈消息发送模块202,用于在监测过程中,如果达到设定的消息反馈触发条件,则将携带内存使用率的第一反馈消息发送给消息生产者,以使消息生产者根据第一反馈消息调整消息发送窗口的大小,并基于调整大小后的消息发送窗口通过消息中间件向消息消费者发送数据消息。

应用本发明实施例所提供的装置,消息中间件对自身的内存使用率进行监测,在监测过程中,如果达到设定的消息反馈触发条件,则将携带内存使用率的第一反馈消息发送给消息生产者,以使消息生产者根据第一反馈消息调整消息发送窗口的大小,并基于调整大小后的消息发送窗口通过消息中间件向消息消费者发送数据消息。通过控制消息生产者的消息发送窗口大小,实现对数据消息的流量控制,在进行消息流量控制时,避免因丢弃数据消息导致重要的业务消息的丢失,提高消息中间件的服务能力。

在本发明的一种具体实施方式中,还包括数据消息暂停发送模块,用于:

如果接收到消息消费者回退的数据消息,则暂停向消息消费者发送数据消息的操作。

在本发明的一种具体实施方式中,还包括第二反馈消息发送模块,用于:

如果消息消费者为慢速消费者,则将携带消息消费者的地址的第二反馈消息发送给消息生产者,以使消息生产者根据第二反馈消息,暂停通过消息中间件向消息消费者发送数据消息的操作。

在本发明的一种具体实施方式中,还包括慢速消费者确定模块,用于通过以下步骤确定消息消费者是否为慢速消费者:

监测消息消费者对数据消息的消费速度;

在存在未消费的数据消息时,如果消费速度小于预设第一阈值,则确定消息消费者为慢速消费者。

在本发明的一种具体实施方式中,还包括第三反馈消息发送模块,用于:

在消费速度大于预设第二阈值时,将携带消息消费者的第三反馈消息发送给消息生产者,以使消息生产者根据第三反馈消息,恢复通过消息中间件向消息消费者发送数据消息的操作。

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

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。

本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的技术方案及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

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