CN114584519A - 一种消息中间件的限流方法及消息中间件 - Google Patents
一种消息中间件的限流方法及消息中间件 Download PDFInfo
- Publication number
- CN114584519A CN114584519A CN202210477976.2A CN202210477976A CN114584519A CN 114584519 A CN114584519 A CN 114584519A CN 202210477976 A CN202210477976 A CN 202210477976A CN 114584519 A CN114584519 A CN 114584519A
- Authority
- CN
- China
- Prior art keywords
- message
- token
- sending request
- message sending
- request
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
- H04L47/215—Flow control; Congestion control using token-bucket
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本申请公开了一种消息中间件的限流方法及消息中间件,所述方法应用于所述消息中间件,所述消息中间件的限流方法,包括:当接收到生产者发送的消息发送请求时,拦截所述消息发送请求;解析出所述消息发送请求中的目标参数;其中,所述目标参数至少包括消息类别管理标识;获取所述消息中间件中的所述消息类别管理标识对应的目标限流器;通过目标限流器为所述消息发送请求获取令牌;其中,所述限流器按照配置的限速参数生成令牌;若获取到令牌,则将所述消息发送请求传递至下一个处理器进行处理;若未获取到令牌,则拒绝所述消息发送请求。
Description
技术领域
本申请涉及消息限流技术领域,特别涉及一种消息中间件的限流方法及消息中间件。
背景技术
消息中间件RocketMQ是一种开源的分布式消息中间件。在消息中间件RocketMQ中会设置有消息存模块Broker,其用于对对应的消息类别管理标识Topic的消息进行处理。
消息类别管理标识Topic为用于标识一类消息的逻辑名称,是消息的逻辑管理单元。所以在消息队列使用场景中,通常以消息类别管理标识Topic来区分不同的业务,而多个业务可以共用一个Broker集群。这就会导致,当某个业务在往自己的topic生产消息时,由于某些异常原因,致使消息生产请求暴增,继而这些请求将堆积在所对应的Broker端。Broker由于无法及时处理瞬间暴增的请求,将会导致部分请求失败,进而影响其他业务。
因此当前急需一种有效对消息中间件进行限流的方法,以能解决当前容易出现请暴增,导致业务无法正常提供的问题。
发明内容
基于上述现有技术的不足,本申请提供了一种消息中间件的限流方法及消息中间件,以解决当前技术容易出现请求暴增,导致业务无法正常提供的问题。
为了实现上述目的,本申请提供了以下技术方案:
本申请第一方面提供了一种消息中间件的限流方法,应用于消息中间件,所述消息中间件的限流方法,包括:
当接收到生产者发送的消息发送请求时,拦截所述消息发送请求;
解析出所述消息发送请求中的目标参数;其中,所述目标参数至少包括消息类别管理标识;
获取所述消息中间件中的所述消息类别管理标识对应的目标限流器;
通过目标限流器为所述消息发送请求获取令牌;其中,所述限流器按照配置的限速参数生成令牌;
若获取到令牌,则将所述消息发送请求传递至下一个处理器进行处理;
若未获取到令牌,则拒绝所述消息发送请求。
可选地,在上述的消息中间件的限流方法中,所述解析出所述消息发送请求中的目标参数之前,还包括:
将所述消息发送请求加入内置阻塞队列中;其中,若所述消息发送请求未成功加入所述内置阻塞队列中,则执行所述将所述消息发送请求传递至下一个处理器进行处理;
若所述消息发送请求成功加入所述内置阻塞队列中,则对所述消息发送请求的线程合法性以及请求类型合法性进行校验;其中,若所述消息发送请求通过线程合法性以及请求类型合法性校验,则执行所述解析出所述消息发送请求中的目标参数;若所述消息发送请求未通过线程合法性校验或未通过请求类型合法性校验,则执行所述将所述消息发送请求传递至下一个处理器进行处理。
可选地,在上述的消息中间件的限流方法中,所述通过目标限流器为所述消息发送请求获取令牌,包括:
计算从虚拟机启动至当前时刻的相对时间,得到当前相对时间;
检测所述目标限流器的熔断器是否处于开启状态;
若检测出所述目标限流器的熔断器处于开启状态,则获取所述熔断器的熔断时间;
判断所述当前相对时间是否已超出所述熔断器的熔断时间;
若判断出所述当前相对时间未超出所述熔断器的熔断时间,则反馈无法获取令牌;
若判断所述当前相对时间已超出所述熔断器的熔断时间,则将所述目标限流器的熔断器置为关闭状态;
当所述目标限流器的熔断器处于关闭状态时,基于记录的下次获取时间、所述当前相对时间以及所述限速参数,计算所述目标限流器从所述下次获取时间至所述当前相对时间产生的令牌数量,并将所述下次获取时间更新为所述当前相对时间;
基于计算得到所述令牌数量,为所述消息发送请求获取令牌;
若未获取到令牌,则将所述目标限流器的熔断器置为开启状态;
若获取到令牌,则反馈获取到的所述令牌。
可选地,在上述的消息中间件的限流方法中,还包括:
接收监控运维平台发送的用户通过前端页面发起的限速参数查询请求;
将各个待查询的消息类别管理标识对应的所述限速参数反馈给所述监控运维平台,以由所述监控运维平台通过前端页面向所述用户展示各个所述待查询的消息类别管理标识对应的所述限速参数。
可选地,在上述的消息中间件的限流方法中,还包括:
接收监控运维平台发送的所述用户通过前端页面发起的限速参数更新请求;
基于所述限速参数更新请求对各个待设置的消息类别管理标识对应的所述限速参数进行更新。
本申请第二方面提供了一种消息中间件,包括:
拦截单元,用于当接收到生产者发送的消息发送请求时,拦截所述消息发送请求;
解析单元,用于解析出所述消息发送请求中的目标参数;其中,所述目标参数至少包括消息类别管理标识;
限流器获取单元,用于获取所述消息中间件中的所述消息类别管理标识对应的目标限流器;
令牌获取单元,用于通过目标限流器为所述消息发送请求获取令牌;其中,所述限流器按照配置的限速参数生成令牌;
传递单元,用于若获取到令牌,则将所述消息发送请求传递至下一个处理器进行处理;
请求拒绝单元,用于若未获取到令牌,则拒绝所述消息发送请求。
可选地,在上述的消息中间件中,还包括:
队列加入单元,用于将所述消息发送请求加入内置阻塞队列中;其中,在所述消息发送请求未成功加入所述内置阻塞队列中时,所述传递单元执行所述将所述消息发送请求传递至下一个处理器进行处理;
校验单元,用于在所述消息发送请求成功加入所述内置阻塞队列中,则对所述消息发送请求的线程合法性以及请求类型合法性进行校验;其中,若所述消息发送请求通过线程合法性以及请求类型合法性校验,则所述解析单元执行所述解析出所述消息发送请求中的目标参数;若所述消息发送请求未通过线程合法性校验或未通过请求类型合法性校验,则所述传递单元执行所述将所述消息发送请求传递至下一个处理器进行处理。
可选地,在上述的消息中间件中,所述令牌获取单元,包括:
时间计算单元,用于计算从虚拟机启动至当前时刻的相对时间,得到当前相对时间;
检测单元,用于检测所述目标限流器的熔断器是否处于开启状态;
时间获取单元,用于若检测出所述目标限流器的熔断器处于开启状态,则获取所述熔断器的熔断时间;
第一判断单元,用于判断所述当前相对时间是否已超出所述熔断器的熔断时间;
第一反馈单元,用于在判断出所述当前相对时间未超出所述熔断器的熔断时间时,反馈无法获取令牌;
关闭单元,用于在判断所述当前相对时间已超出所述熔断器的熔断时间时,将所述目标限流器的熔断器置为关闭状态;
数量计算单元,用于在所述目标限流器的熔断器处于关闭状态时,基于记录的下次获取时间、所述当前相对时间以及所述限速参数,计算所述目标限流器从所述下次获取时间至所述当前相对时间产生的令牌数量,并将所述下次获取时间更新为所述当前相对时间;
令牌获取子单元,用于基于计算得到所述令牌数量,为所述消息发送请求获取令牌;
开启单元,用于在未获取到令牌时,将所述目标限流器的熔断器置为开启状态;
第二反馈单元,用于在获取到令牌时,反馈获取到的所述令牌。
可选地,在上述的消息中间件中,还包括:
第一接收单元,用于接收监控运维平台发送的用户通过前端页面发起的限速参数查询请求;
查询结果反馈单元,用于将各个待查询的消息类别管理标识对应的所述限速参数反馈给所述监控运维平台,以由所述监控运维平台通过前端页面向所述用户展示各个所述待查询的消息类别管理标识对应的所述限速参数。
可选地,在上述的消息中间件中,还包括:
第二接收单元,用于接收监控运维平台发送的所述用户通过前端页面发起的限速参数更新请求;
参数更新单元,用于基于所述限速参数更新请求对各个待设置的消息类别管理标识对应的所述限速参数进行更新。
本申请提供了一种消息中间件的限流方法,应用于消息中间件,该消息中间件的限流方法在接收到生产者发送的消息发送请求时,拦截消息发送请求。然后,解析出所述消息发送请求中的目标参数。其中,目标参数至少包括消息类别管理标识。获取消息中间件中的消息类别管理标识对应的目标限流器,然后通过目标限流器为消息发送请求获取令牌。若获取到令牌,则将消息发送请求传递至下一个处理器进行处理。若未获取到令牌,则拒绝消息发送请求。由于限流器按照配置的限速参数生成令牌,而获取了令牌才执行后续步骤,并且不同消息类别管理标识对应不同的限流器,所以通过对各个消息类别管理标识对应的限流器设置参数,就可以实现对令牌生成进行限制,从而可以实现对进入消息中间件各个消息类别管理标识的请求进行有效限流,避免请求暴增,影响业务的正常提供。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请实施例提供的一种消息处理系统的架构示意图;
图2为本申请实施例提供的一种协议扩展的类图;
图3为本申请实施例提供的一种消息中间件的限流方法;
图4为本申请实施例提供的一种限速参数的查询方法的流程图;
图5为本申请实施例提供的一种限速参数的设置方法的流程图;
图6为本申请实施例提供的一种通过目标限流器为消息发送请求获取令牌的方法的流程图;
图7为本申请实施例提供的一种限流器处理流程的时序图;
图8为本申请实施例提供的一种消息中间件的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
在本申请中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本申请实施例提供了一种消息中间件的限流方法,以解决当前技术容易出现请暴增,导致业务无法正常提供的问题。
为了实现了本申请提供了一种消息中间件的限流方法,本实施例提供了一种消息处理系统,如图1所示,包括:消息中间件、监控运维平台以及前端。
其中,消息中间件中包括消息储存模块Broker。消息储存模块中包括网络交互框架Netty、限流处理器、限流器以及核心流程处理器。
在消息中间件RocketMQ内部主要依赖Netty进行网络通讯。所以可以通过Netty监听生产者发送的消息发起请求,并传递给限流处理器进行处理。
限流处理器为本申请实施例中,在消息储存模块Broker中增加处理器。具体可以在消息储存模块Broke的Netty网络通道上增加。其主要用于根据消息类别管理标识Topic创建限流器,并通过限流器获取令牌。若获取到令牌,则将请求传递到核心流程处理器中进行处理。若无法获取到令牌在,则拒绝当前的请求。
限流器则主要用于根据配置的限速参数生成令牌,并为请求获取令牌,从而实现根据配置进行限流。
核心流程处理器中则可以包括有多个处理器,由于对请求进行后续核心的处理。
监控运维平台具体可以采用RocketMQ监控运维平台MQCloud,其主要负责和消息中间件进行通信。通过扩展Netty通信协议,使得可以通过监控运维平台MQCloud查询各个消息储存模块Broker中的各个限速配置,以及配置消息储存模块Broker中的各个限速配置。
具体的,扩展RocketMQ的私有通信部分,使得能够支持查询Broker限流参数查询及修改。具体实现是扩展RocketMQ的netty通信处理器,增加支持查询当前限流配置及更改限流配置的指令,以便能够在不修改RocketMQ核心源码的情况下实现通信支持,类图具体可以如图2所示。
前端主要为监控运维平台MQCloud,主要用于与用户进行交互。具体可以用于用户对限速配置进行查询和更新操作,并且相应的将查询到的数据进行展示。
基于上述提供的消息处理系统,本申请实施例提供了一种消息中间件的限流方法,应用于消息中间件中的消息存储模块。如图3所示,本申请实施例提供的一种消息中间件的限流方法,包括以下步骤:
S301、当接收到生产者发送的消息发送请求时,拦截消息发送请求。
其中,生产者指的是往消息中间件生产消息的客户端程序。
具体的,生产者生成相应的topic消息发送请求,让后将其发送给消息中间件。当Netty通信协议监听到消息发送请求时,由限流处理器拦截消息发送请求,不再是直接传递给核心流程处理器。
S302、解析出消息发送请求中的目标参数,目标参数至少包括消息类别管理标识。
由于在本申请实施例中,是基于消息类别管理标识Topic维度进行限流的,所以消息发起请求中需要包括有Topic,以在解析出消息发送请求中必要的目标参数中包括有Topic。当然,目标参数还可以包括有其他参数,例如请求类型等。
可选地,在另一实施例中,为了能有序地对各个请求进行处理,因此在执行步骤S302之前,还先进一步执行:
将消息发送请求加入内置阻塞队列中。
需要说明的是,加入到内置阻塞队列中的请求会被依次去进行处理,为其进行获取令牌。虽然内置阻塞队列的容量通常相对较大,但是考虑到可能存在请求量较大,或者存在其他的请求,从而导致当前的消息发起请求无法成功加入内置阻塞队列中,进而导致没有对该请求进行处理。因此在本申请实施例汇总,若消息发送请求未成功加入内置阻塞队列中,则将直接跳过限流处理器,直接传播到下一个处理器件处理,即直接执行步骤S306。虽然这对限流存在一定的影响,但是无法成功加入内置阻塞队列中的情况相对较少,当出现时无法加入的请求数量也相对较少,所以对限流的影响也相对较小,但是却能保证非限流请求得到处理。
在本申请实施例中,若消息发送请求成功加入内置阻塞队列中,当轮询到该消息发送请求时,还先进一步执行:对消息发送请求的线程合法性以及请求类型合法性进行校验。
其中,线程合法性校验是为了保障限流处理器满载时,也能跳过限流流程,进而被后续流程正常处理。而请求类型校验是为了编码非消息写入的请求进入到限流器流程中。因此,若消息发送请求通过线程合法性以及请求类型合法性校验,则才执行步骤S302。若消息发送请求未通过线程合法性校验或未通过请求类型合法性校验,则直接执行步骤S306。
S303、获取消息中间件中的消息类别管理标识对应的目标限流器。
需要说明的是,由于在本申请实施例中是基于消息类别管理标识Topic维度进行限流的,所以不同的Topic对应的不同的限流器,针对不同的限流器可以设置不同的线速参数,从而可以对不同的Topic进行相应的限速。
因此需要从消息存储模块的各个限流器中获取消息类别管理标识对应限流器,作为目标限流器。需要说明的是,若当前未存在消息类别管理标识对应限流器,则需要相应地创建消息类别管理标识对应限流器。
S304、通过目标限流器为消息发送请求获取令牌。
其中,限流器按照配置的限速参数生成令牌,而在获取到令牌后才会执行传递至下一个处理器进行处理,从而实现了基于限速参数对请求进行限流。限速参数可以包括有当前限流次数、获取令牌等待时间,最近一次触发限流的时间等。
具体的,用于可以通过MQCloud的前端页面选择需要设置的Broker所在的集群,然后针对所需要设置Broker进行设置。并且,可以是对一个Broker中的所有的Topic进行统一设置。也可以是针对单个Topic进行设置。
所以在本申请另一实施例中,还包括限速参数的查询方法,如图4所示,包括:
S401、接收监控运维平台发送的用户通过前端页面发起的限速参数查询请求。
可选地,限速参数查询请求可以包括有多个待查询的消息类别管理标识,从而对指定的消息类别管理标识对应的限速参数进行查询。
具体的,用户可以通过前端页面选择需要查询的消息类别管理标识,然后发起限速参数查询请求。
S402、将各个待查询的消息类别管理标识对应的限速参数反馈给监控运维平台,以由监控运维平台通过前端页面向用户展示各个待查询的消息类别管理标识对应的限速参数。
相应的,在本申请实施例中,还包括限速参数的设置方法,如图5所示,包括:
S501、接收监控运维平台发送的用户通过前端页面发起的限速参数更新请求。
需要说明的是,限速参数查询请求可以包括有多个待设置的消息类别管理标识,具体的若是用户选择的通用统一设置,则包括的就是选择Broker中的所有的Topic。
S502、基于限速参数更新请求对各个待设置的消息类别管理标识对应的限速参数进行更新。
可选地,在本申请另一实施例中,步骤S304的一种具体实施方式,即限流器的一种具体工作过程,如图6所示,包括:
S601、计算从虚拟机启动至当前时刻的相对时间,得到当前相对时间。
需要说明的是,由于令牌是从虚拟机启动后开始产生的,所以在本申请实中,对于后续步骤,采用的不是绝对时间,而是相对于虚拟机启动时刻的相对时间。所以每次请求获取令牌时,需要先计算从虚拟机启动至当前时刻的相对时间,得到当前相对时间,然后利用当前相对时间执行后续步骤。
S602、检测目标限流器的熔断器是否处于开启状态。
需要说明的是,目前限流算法一般有计数,漏桶算法,令牌桶算法。成熟的产品包括:基于滑动窗口计数的sentinel和hystrix;基于令牌桶算法的Guava RateLimiter。但是在RocketMQ场景中两种都不适用,主要原因有下面几点:滑动时间窗:基于固定一个时间窗口范围,设置这个窗口内限流阈值,整个时间窗将随着系统时间增长而滑动来保证限流的准确性,但是为保证流量处理的均衡,时间窗的粒度越小越好,这势必需要更大的内存,在Broker的场景中,随着broker上新建的topic越多,那么基于滑动时间窗限流器占据的内存将线性增加,挤压正常业务处理资源。Guava RateLimiter:基于令牌桶算法,存在无法获取令牌时阻塞请求线程,并且无法进行熔断等问题。
因此在本申请实施例中提供了一种可以满足非阻塞、高并发等要求的,具有熔断功能的令牌桶限流器。该限流器具有内存占用少:仅需要更新可用令牌,相对于滑动窗口减少大量内存、非阻塞:快速识别出是否需要限流,不会阻塞当前线程、支持熔断:熔断时间可以灵活配置,动态修改、高性能:单线程支撑千万级限流等特点。该限流器的具体工作过程如本申请实施例提供的图6所示。
由于本申请实施例中的限流器具有熔断器,并且其可以开启熔断,即置为开启状态,而在开启熔断时,则无法获取到令牌,因此需要先判断目标限流器的熔断器是否处于开启状态。
其中,若检测出目标限流器的熔断器处于开启状态,则执行步骤S603。若检测出目标限流器的熔断器未处于开启状态,即处于关闭状态时,执行步骤S607。
S603、获取熔断器的熔断时间。
其中,熔断时间指的是一个时间范围,为熔断开始至熔断结束的时间范围。在熔断开始时,可以记录熔断开始的时间,而熔断最少持续时间通常是固定的,所以就可以得到熔断时间。
S604、判断当前相对时间是否已超出熔断器的熔断时间。
其中,若判断出当前相对时间未超出熔断器的熔断时间,则说明当前还持续处于熔断状态,所以此时无法获取令牌,因此直接返回响应,即执行步骤S605。若判断出当前时间已超出熔断器的熔断时间,则说明需要结束熔断,所以此时执行步骤S606。
S605、反馈无法获取令牌。
S606、将目标限流器的熔断器置为关闭状态。
S607、基于记录的下次获取时间、当前相对时间以及限速参数,计算目标限流器从下次获取时间至当前相对时间产生的令牌数量,并将下次获取时间更新为当前相对时间。
其中,下次获取时间为一个参数,其在每次获取令牌,执行到步骤S607时,就会被置为当前时间,从而在下次获取令牌时,就可以知道从上一次的时间点到当前时间的范围内,产生的令牌数量。对于在虚拟机启动后的首个请求,下一次获取时间为虚拟机启动的时间,即下次获取时间初始化为虚拟机启动的时间。
需要说明的是,限速参数中包括了每段时间所产生的令牌数,两段可产生令牌的时间段之间还可以间隔一定的时间长度。并且,由于需要获取到令牌才会执行后续步骤,所以就限制了每段时间内处理的请求数量,从而实现了限流。但是通常在一个时间段内的令牌也不是一致性产生的,而是每间隔一段更小的时间间隔生成部分的令牌数,所以需要计算目标限流器从下次获取时间至当前相对时间产生的令牌数量,然后执行步骤S608。
S608、基于计算得到令牌数量,为消息发送请求获取令牌。
具体的,所产生的令牌会在令牌桶中,所以可以从令牌桶中获取令牌数。但是由于这一段时间内产生的令牌数量是有限的,所以在请求量较大时,产生的令牌就可能已被获取完,此时将无法为当前的消息发送请求获取到令牌。
S609、判断是否获取到令牌。
其中,若判断出获取到令牌则执行步骤S611;若判断未获取到令牌则执行步骤S610。
S610、将目标限流器的熔断器置为开启状态。
由于此时令牌已被获取完,说明当前的请求数量较大,才会导致令牌被获取完,所以此时需要将目标限流器的熔断器置为开启状态,避免消息中间件的请求还在不断增加。
S611、反馈获取到的令牌。
具体的,将获取到的令牌反馈给限流处理器。
所以本申请实施例提供的限流器的工作时序图可以如图7所示。具体可以分为五种情况,分别采用五个线程表示:对于第一个线程,其为第一个请求,所以是基于从虚拟机JVM开始到当前的时间长度进行计算的。对于第二个线程,其不处于熔断期间,并且令牌桶中存在令牌,所以其可以成功获取到令牌。对于第三个线程,即无法获取到令牌,从而触发熔断。对于第四个线程,其处于熔断期间内,所以立即返回响应,实现快速失败。对于第五个线程,当前以超过熔断时间,并且在熔断期间至当前令牌也不断在产生,所以令牌桶中存在产生的令牌,所以其可以成功获取到令牌。
S305、判断是否获取令牌。
其中,限流处理器若是获取限流器反馈的令牌,即判断出获取到令牌,则执行步骤S306。若是未获取到令牌则执行步骤S307。
S306、将消息发送请求传递至下一个处理器进行处理。
具体的,此时限流处理器已对该消息发送请求处理完,所以将消息发送请求传递至核心流程处理器中下一个需要对消息发送请求进行处理的处理器。
S307、拒绝消息发送请求。
当未为消息发送请求获取到令牌时,说明其被限流了,将不在对其进行后续的处理。
可选地,为了能让生产者及时了解到消息发送请求被拒绝了,所以此时可以向生产者反馈提示信息。
本申请实施例提供的一种消息中间件的限流方法,应用于消息中间件,该消息中间件的限流方法在接收到生产者发送的消息发送请求时,拦截消息发送请求。然后,解析出所述消息发送请求中的目标参数。其中,目标参数至少包括消息类别管理标识。获取消息中间件中的消息类别管理标识对应的目标限流器,然后通过目标限流器为消息发送请求获取令牌。若获取到令牌,则将消息发送请求传递至下一个处理器进行处理。若未获取到令牌,则拒绝消息发送请求。由于限流器按照配置的限速参数生成令牌,而获取了令牌才执行后续步骤,并且不同消息类别管理标识对应不同的限流器,所以通过对各个消息类别管理标识对应的限流器设置参数,就可以实现对令牌生成进行限制,从而可以实现对进入消息中间件各个消息类别管理标识的请求进行有效限流,避免请求暴增,影响业务的正常提供。
本申请另一实施例提供了一种消息中间件,如图8所示,包括:
拦截单元801,用于当接收到生产者发送的消息发送请求时,拦截消息发送请求。
解析单元802,用于解析出消息发送请求中的目标参数。
其中,目标参数至少包括消息类别管理标识。
限流器获取单元803,用于获取消息中间件中的消息类别管理标识对应的目标限流器。
令牌获取单元804,用于通过目标限流器为消息发送请求获取令牌。
其中,限流器按照配置的限速参数生成令牌。
传递单元805,用于若获取到令牌,则将消息发送请求传递至下一个处理器进行处理。
请求拒绝单元806,用于若未获取到令牌,则拒绝消息发送请求。
可选地,在本申请另一实施例提供的消息中间件中,还包括:
队列加入单元,用于将消息发送请求加入内置阻塞队列中。其中,在消息发送请求未成功加入内置阻塞队列中时,传递单元执行将消息发送请求传递至下一个处理器进行处理。
校验单元,用于在消息发送请求成功加入内置阻塞队列中,则对消息发送请求的线程合法性以及请求类型合法性进行校验。其中,若消息发送请求通过线程合法性以及请求类型合法性校验,则解析单元执行解析出消息发送请求中的目标参数。若消息发送请求未通过线程合法性校验或未通过请求类型合法性校验,则传递单元执行将消息发送请求传递至下一个处理器进行处理。
可选地,在本申请另一实施例提供的消息中间件中,令牌获取单元,包括:
时间计算单元,用于计算从虚拟机启动至当前时刻的相对时间,得到当前相对时间。
检测单元,用于检测目标限流器的熔断器是否处于开启状态。
时间获取单元,用于若检测出目标限流器的熔断器处于开启状态,则获取熔断器的熔断时间。
第一判断单元,用于判断当前相对时间是否已超出熔断器的熔断时间。
第一反馈单元,用于在判断出当前相对时间未超出熔断器的熔断时间时,反馈无法获取令牌。
关闭单元,用于在判断当前相对时间已超出熔断器的熔断时间时,将目标限流器的熔断器置为关闭状态。
数量计算单元,用于在目标限流器的熔断器处于关闭状态时,基于记录的下次获取时间、当前相对时间以及限速参数,计算目标限流器从下次获取时间至当前相对时间产生的令牌数量,并将下次获取时间更新为当前相对时间。
令牌获取子单元,用于基于计算得到令牌数量,为消息发送请求获取令牌。
开启单元,用于在未获取到令牌时,将目标限流器的熔断器置为开启状态。
第二反馈单元,用于在获取到令牌时,反馈获取到的令牌。
可选地,在本申请另一实施例提供的消息中间件中,还包括:
第一接收单元,用于接收监控运维平台发送的用户通过前端页面发起的限速参数查询请求。
查询结果反馈单元,用于将各个待查询的消息类别管理标识对应的限速参数反馈给监控运维平台,以由监控运维平台通过前端页面向用户展示各个待查询的消息类别管理标识对应的限速参数。
可选地,在本申请另一实施例提供的消息中间件中,还包括:
第二接收单元,用于接收监控运维平台发送的用户通过前端页面发起的限速参数更新请求。
参数更新单元,用于基于限速参数更新请求对各个待设置的消息类别管理标识对应的限速参数进行更新。
需要说明的是,本申请上述实施例提供的各个单元具体可以是图1示出的系统中的消息中间件中的各个模块的组成部件,所以各个单元的具体工作过程也可以相应地参考上述方法实施例中的相应的步骤,此处不再赘述。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种消息中间件的限流方法,其特征在于,应用于消息中间件,所述消息中间件的限流方法,包括:
当接收到生产者发送的消息发送请求时,拦截所述消息发送请求;
解析出所述消息发送请求中的目标参数;其中,所述目标参数至少包括消息类别管理标识;
获取所述消息中间件中的所述消息类别管理标识对应的目标限流器;
通过目标限流器为所述消息发送请求获取令牌;其中,所述限流器按照配置的限速参数生成令牌;
若获取到令牌,则将所述消息发送请求传递至下一个处理器进行处理;
若未获取到令牌,则拒绝所述消息发送请求。
2.根据权利要求1所述的方法,其特征在于,所述解析出所述消息发送请求中的目标参数之前,还包括:
将所述消息发送请求加入内置阻塞队列中;其中,若所述消息发送请求未成功加入所述内置阻塞队列中,则执行所述将所述消息发送请求传递至下一个处理器进行处理;
若所述消息发送请求成功加入所述内置阻塞队列中,则对所述消息发送请求的线程合法性以及请求类型合法性进行校验;其中,若所述消息发送请求通过线程合法性以及请求类型合法性校验,则执行所述解析出所述消息发送请求中的目标参数;若所述消息发送请求未通过线程合法性校验或未通过请求类型合法性校验,则执行所述将所述消息发送请求传递至下一个处理器进行处理。
3.根据权利要求1所述的方法,其特征在于,所述通过目标限流器为所述消息发送请求获取令牌,包括:
计算从虚拟机启动至当前时刻的相对时间,得到当前相对时间;
检测所述目标限流器的熔断器是否处于开启状态;
若检测出所述目标限流器的熔断器处于开启状态,则获取所述熔断器的熔断时间;
判断所述当前相对时间是否已超出所述熔断器的熔断时间;
若判断出所述当前相对时间未超出所述熔断器的熔断时间,则反馈无法获取令牌;
若判断所述当前相对时间已超出所述熔断器的熔断时间,则将所述目标限流器的熔断器置为关闭状态;
当所述目标限流器的熔断器处于关闭状态时,基于记录的下次获取时间、所述当前相对时间以及所述限速参数,计算所述目标限流器从所述下次获取时间至所述当前相对时间产生的令牌数量,并将所述下次获取时间更新为所述当前相对时间;
基于计算得到所述令牌数量,为所述消息发送请求获取令牌;
若未获取到令牌,则将所述目标限流器的熔断器置为开启状态;
若获取到令牌,则反馈获取到的所述令牌。
4.根据权利要求1所述的方法,其特征在于,还包括:
接收监控运维平台发送的用户通过前端页面发起的限速参数查询请求;
将各个待查询的消息类别管理标识对应的所述限速参数反馈给所述监控运维平台,以由所述监控运维平台通过前端页面向所述用户展示各个所述待查询的消息类别管理标识对应的所述限速参数。
5.根据权利要求4所述的方法,其特征在于,还包括:
接收监控运维平台发送的所述用户通过前端页面发起的限速参数更新请求;
基于所述限速参数更新请求对各个待设置的消息类别管理标识对应的所述限速参数进行更新。
6.一种消息中间件,其特征在于,包括:
拦截单元,用于当接收到生产者发送的消息发送请求时,拦截所述消息发送请求;
解析单元,用于解析出所述消息发送请求中的目标参数;其中,所述目标参数至少包括消息类别管理标识;
限流器获取单元,用于获取所述消息中间件中的所述消息类别管理标识对应的目标限流器;
令牌获取单元,用于通过目标限流器为所述消息发送请求获取令牌;其中,所述限流器按照配置的限速参数生成令牌;
传递单元,用于若获取到令牌,则将所述消息发送请求传递至下一个处理器进行处理;
请求拒绝单元,用于若未获取到令牌,则拒绝所述消息发送请求。
7.根据权利要求6所述的消息中间件,其特征在于,还包括:
队列加入单元,用于将所述消息发送请求加入内置阻塞队列中;其中,在所述消息发送请求未成功加入所述内置阻塞队列中时,所述传递单元执行所述将所述消息发送请求传递至下一个处理器进行处理;
校验单元,用于在所述消息发送请求成功加入所述内置阻塞队列中,则对所述消息发送请求的线程合法性以及请求类型合法性进行校验;其中,若所述消息发送请求通过线程合法性以及请求类型合法性校验,则所述解析单元执行所述解析出所述消息发送请求中的目标参数;若所述消息发送请求未通过线程合法性校验或未通过请求类型合法性校验,则所述传递单元执行所述将所述消息发送请求传递至下一个处理器进行处理。
8.根据权利要求6所述的消息中间件,其特征在于,所述令牌获取单元,包括:
时间计算单元,用于计算从虚拟机启动至当前时刻的相对时间,得到当前相对时间;
检测单元,用于检测所述目标限流器的熔断器是否处于开启状态;
时间获取单元,用于若检测出所述目标限流器的熔断器处于开启状态,则获取所述熔断器的熔断时间;
第一判断单元,用于判断所述当前相对时间是否已超出所述熔断器的熔断时间;
第一反馈单元,用于在判断出所述当前相对时间未超出所述熔断器的熔断时间时,反馈无法获取令牌;
关闭单元,用于在判断所述当前相对时间已超出所述熔断器的熔断时间时,将所述目标限流器的熔断器置为关闭状态;
数量计算单元,用于在所述目标限流器的熔断器处于关闭状态时,基于记录的下次获取时间、所述当前相对时间以及所述限速参数,计算所述目标限流器从所述下次获取时间至所述当前相对时间产生的令牌数量,并将所述下次获取时间更新为所述当前相对时间;
令牌获取子单元,用于基于计算得到所述令牌数量,为所述消息发送请求获取令牌;
开启单元,用于在未获取到令牌时,将所述目标限流器的熔断器置为开启状态;
第二反馈单元,用于在获取到令牌时,反馈获取到的所述令牌。
9.根据权利要求6所述的消息中间件,其特征在于,还包括:
第一接收单元,用于接收监控运维平台发送的用户通过前端页面发起的限速参数查询请求;
查询结果反馈单元,用于将各个待查询的消息类别管理标识对应的所述限速参数反馈给所述监控运维平台,以由所述监控运维平台通过前端页面向所述用户展示各个所述待查询的消息类别管理标识对应的所述限速参数。
10.根据权利要求9所述的消息中间件,其特征在于,还包括:
第二接收单元,用于接收监控运维平台发送的所述用户通过前端页面发起的限速参数更新请求;
参数更新单元,用于基于所述限速参数更新请求对各个待设置的消息类别管理标识对应的所述限速参数进行更新。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210477976.2A CN114584519B (zh) | 2022-05-05 | 2022-05-05 | 一种消息中间件的限流方法及消息中间件 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210477976.2A CN114584519B (zh) | 2022-05-05 | 2022-05-05 | 一种消息中间件的限流方法及消息中间件 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114584519A true CN114584519A (zh) | 2022-06-03 |
CN114584519B CN114584519B (zh) | 2022-09-16 |
Family
ID=81784557
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210477976.2A Active CN114584519B (zh) | 2022-05-05 | 2022-05-05 | 一种消息中间件的限流方法及消息中间件 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114584519B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115665074A (zh) * | 2022-10-08 | 2023-01-31 | 广州市玄武无线科技股份有限公司 | 消息限流发送方法、装置、设备及存储介质 |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2644015A1 (en) * | 2006-04-13 | 2007-10-25 | Certicom Corp. | Method and apparatus for providing an adaptable security level in an electronic communication |
WO2017097117A1 (zh) * | 2015-12-08 | 2017-06-15 | 中兴通讯股份有限公司 | 一种报文调度方法和装置 |
CN109597694A (zh) * | 2018-09-29 | 2019-04-09 | 阿里巴巴集团控股有限公司 | 消息投递限流方法和装置、电子设备 |
CN109714264A (zh) * | 2018-09-03 | 2019-05-03 | 天翼电子商务有限公司 | 基于缓存队列的滑动窗口限流的实现方法 |
WO2019120217A1 (zh) * | 2017-12-19 | 2019-06-27 | 北京金山云网络技术有限公司 | 一种令牌获取方法、装置、服务器、用户终端及介质 |
CN109995669A (zh) * | 2019-04-09 | 2019-07-09 | 深圳前海微众银行股份有限公司 | 分布式限流方法、装置、设备及可读存储介质 |
CN110351357A (zh) * | 2019-07-08 | 2019-10-18 | 中国平安人寿保险股份有限公司 | 服务器限流方法、装置、计算机设备以及存储介质 |
CN110545246A (zh) * | 2018-05-29 | 2019-12-06 | 北京京东尚科信息技术有限公司 | 一种基于令牌桶的限流方法和装置 |
CN110753131A (zh) * | 2019-11-04 | 2020-02-04 | 网易(杭州)网络有限公司 | 微服务分布式限流方法及装置、存储介质和电子设备 |
CN111488324A (zh) * | 2020-04-14 | 2020-08-04 | 浪潮商用机器有限公司 | 一种基于消息中间件的分布式网络文件系统及其工作方法 |
CN113422736A (zh) * | 2021-06-16 | 2021-09-21 | 中移(杭州)信息技术有限公司 | 基于令牌桶的请求管理方法、装置、设备及程序产品 |
CN113835854A (zh) * | 2021-09-06 | 2021-12-24 | 中国银联股份有限公司 | 一种任务处理方法及装置 |
-
2022
- 2022-05-05 CN CN202210477976.2A patent/CN114584519B/zh active Active
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2644015A1 (en) * | 2006-04-13 | 2007-10-25 | Certicom Corp. | Method and apparatus for providing an adaptable security level in an electronic communication |
WO2017097117A1 (zh) * | 2015-12-08 | 2017-06-15 | 中兴通讯股份有限公司 | 一种报文调度方法和装置 |
WO2019120217A1 (zh) * | 2017-12-19 | 2019-06-27 | 北京金山云网络技术有限公司 | 一种令牌获取方法、装置、服务器、用户终端及介质 |
CN110545246A (zh) * | 2018-05-29 | 2019-12-06 | 北京京东尚科信息技术有限公司 | 一种基于令牌桶的限流方法和装置 |
CN109714264A (zh) * | 2018-09-03 | 2019-05-03 | 天翼电子商务有限公司 | 基于缓存队列的滑动窗口限流的实现方法 |
CN109597694A (zh) * | 2018-09-29 | 2019-04-09 | 阿里巴巴集团控股有限公司 | 消息投递限流方法和装置、电子设备 |
CN109995669A (zh) * | 2019-04-09 | 2019-07-09 | 深圳前海微众银行股份有限公司 | 分布式限流方法、装置、设备及可读存储介质 |
CN110351357A (zh) * | 2019-07-08 | 2019-10-18 | 中国平安人寿保险股份有限公司 | 服务器限流方法、装置、计算机设备以及存储介质 |
CN110753131A (zh) * | 2019-11-04 | 2020-02-04 | 网易(杭州)网络有限公司 | 微服务分布式限流方法及装置、存储介质和电子设备 |
CN111488324A (zh) * | 2020-04-14 | 2020-08-04 | 浪潮商用机器有限公司 | 一种基于消息中间件的分布式网络文件系统及其工作方法 |
CN113422736A (zh) * | 2021-06-16 | 2021-09-21 | 中移(杭州)信息技术有限公司 | 基于令牌桶的请求管理方法、装置、设备及程序产品 |
CN113835854A (zh) * | 2021-09-06 | 2021-12-24 | 中国银联股份有限公司 | 一种任务处理方法及装置 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115665074A (zh) * | 2022-10-08 | 2023-01-31 | 广州市玄武无线科技股份有限公司 | 消息限流发送方法、装置、设备及存储介质 |
CN115665074B (zh) * | 2022-10-08 | 2023-09-15 | 广州市玄武无线科技股份有限公司 | 消息限流发送方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN114584519B (zh) | 2022-09-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10341496B2 (en) | Policy control method and system, and relevant apparatus | |
EP2563062B1 (en) | Long connection management apparatus and link resource management method for long connection communication | |
US7904549B2 (en) | Performance information collection method, apparatus and recording medium | |
CN112148505A (zh) | 数据跑批系统、方法、电子设备和存储介质 | |
CN102769549A (zh) | 网络安全监控的方法和装置 | |
CN108616429A (zh) | 一种推送服务的重连方法及设备 | |
CN112511580B (zh) | 消息推送的方法、装置、存储介质和设备 | |
CN104426742B (zh) | 群组访问方法、服务器、客户端及系统 | |
CN114143265A (zh) | 一种网络流量限流方法、装置、设备及存储介质 | |
CN114584519B (zh) | 一种消息中间件的限流方法及消息中间件 | |
CN108462598A (zh) | 一种日志生成方法、日志分析方法及装置 | |
CN101174994A (zh) | 网络卡测试系统及其方法 | |
WO2017074471A1 (en) | Tracking contention in a distributed business transaction | |
CN112448987A (zh) | 一种熔断降级的触发方法、系统和存储介质 | |
CN112671813B (zh) | 服务器确定方法、装置、设备及存储介质 | |
EP3641222A1 (en) | Method, apparatus and system for monitoring data traffic | |
CN114615073A (zh) | 访问流量控制方法及其装置、设备、介质 | |
CN113596040A (zh) | 安全策略部署方法、访问控制方法及装置、访问控制系统 | |
EP2979196A1 (en) | System and method for network provisioning | |
CN106534231A (zh) | 一种网络资源的使用限额的控制方法、装置及系统 | |
CN111314347A (zh) | 一种非法流量的处理方法、装置、系统和存储介质 | |
CN111865935A (zh) | 一种数据传输系统 | |
EP4432626A1 (en) | Client side backoff filter for rate limiting | |
CN117155864B (zh) | 一种基于互联网的流量管理系统及管理方法 | |
CN113504881B (zh) | 热点数据的处理方法、客户端、目标计算设备及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |