限流
限流规则借鉴了Resilience4j的思想,作用在服务端,其原理为:每隔limitRefreshPeriod的时间会加入rate个新许可,就可以最多接受rate个请求,超过的将被限流,返回响应码429。
- Java Chassis的限流作用于微服务提供者,需要微服务应用集成流量控制模块,启用qps-flowcontrol-provider处理链。
servicecomb: handler: chain: Provider: default: qps-flowcontrol-provider
在POM中添加如下依赖:
<dependency> <groupId>org.apache.servicecomb</groupId> <artifactId>handler-flowcontrol-qps</artifactId> <version>${project.version}</version> </dependency>
详细说明请参考servicecomb限流开发指南。
- Spring Cloud通过Aspect拦截RequestMappingHandlerAdapter实现了限流,集成Spring Cloud Huawei以后,默认集成了限流模块spring-cloud-starter-huawei-governance, 只需要通过配置开启具体的限流策略。
servicecomb: matchGroup: AllOperation: | matches: - apiPath: prefix: "/" rateLimiting: AllOperation: | rate: 10 #在一段时间内只允许10次请求
- Spring Cloud应用通过挂载Sermant的flowcontrol流控插件使用限流能力, 只需要通过配置开启具体的限流策略。
配置项:servicecomb.rateLimiting.${scene名称}
作用范围:自定义标签group:service=flowcontrol
配置内容:
# 1秒内超过2个请求,则触发限流能力 limitRefreshPeriod: 1000 rate: 2
限流规则的配置项由前缀servicecomb.rateLimiting和自定义场景名称${scene名称}组成,流量标记规则和限流规则的配置项的自定义场景名称需保持一致,才能对匹配的流量执行限流策略。