当前位置: 首页 > 后端技术 > Java

教程系列(三):SpringCloud腾讯访问限速中心

时间:2023-04-01 19:41:08 Java

导读限速能力是服务自保最重要的能力之一,市面上针对服务限速的组件很多。SpringCloud腾讯限流能力最大的特点就是完全无侵入,支持常见的限流场景。比如表达式标签自动从Request中提取参数等。Github地址:SpringCloud腾讯模块介绍服务限流是服务最常见的自我保护措施之一,防止流量泛滥导致服务崩溃。SpringCloud腾讯限速模块内置了针对SpringWeb和SpringWebFlux场景的限速过滤器,结合Polaris的限速功能,帮助业务快速接入限速能力。支持的限速场景包括:基于路径的服务级限速基于Request中的QueryParam、Header等参数限速细粒度限速对源码感兴趣的可以查看核心限速Filter实现classRateLimitFilter快速入门本章将介绍如何在SpringCloud项目中使用SpringCloud腾讯RateLimit功能。完整示例代码请参考:polaris-ratelimit-example第一步:引入Polaris服务器方法一:搭建本地Polaris服务搭建Polaris服务,请参考Polaris入门方法二:使用提供的体验环境byPolarisOpenSourceConsole地址:http://14.116.241.63:8080/用户名:polaris密码:polarisServer地址:grpc://183.47.111.80:8091方法三:使用腾讯云Polaris服务腾讯云提供PolarisCloud服务免费运行和维护,基于云服务可快速开通生产级高可用Polaris集群了解更多第二步:引入SpringCloudTencentRateLimit依赖参考SpringCloudTencent版本管理文档获取最新版本号,并引入SpringCloud腾讯Bom,例如:com.tencent.cloudspring-cloud-tencent-dependencies1.5.0-Hoxton.SR9pomimport引入SpringCloudTencentRateLimitStartercom.腾讯云spring-cloud-starter-tencent-polaris-ratelimit第三步:添加SpringCloudTencentRateLimitStarter的配置文件在你的bootstrap.yml配置文件中添加如下配置内容spring:application:name:${application.name}cloud:polaris:address:grpc://${修改为第一步部署的Polaris服务的地址}:8091namespace:default第四步:配置限流规则为您您可以在Polaris控制台中动态配置流量限制规则。4.1创建服务如果不使用SpringCloudTencentDiscovery能力,需要在控制台手动创建服务信息。如下图所示:4.2创建限流规则点击服务名称进入服务首页,切换到服务限流页签创建规则,并按要求填写规则内容。其中,单机限流可以设置限流效果为快速失效或者统一排队(统一排队限流,查看详情请点击这里),分布式限流目前只支持快速失效。Expression标签,自动解析Query、Header、Cookie中的参数,将Http请求中的某些字段作为流量标签,只对带有某些标签的请求进行流量限制。例如,QueryParam有一个uid字段,预计只会限制某些uid。为了支持这种场景,我们定义了一组标签正则表达式,比如${http.query.uid}代表请求QueryParam中的uid字段,如下图,代表uid=的用户1000。目前支持的标签规则表达式如下:${http.query.xxx}表示查询请求的参数${http.header.xxx}表示请求头中的参数${http.cookie.xxx}表示cookie中的参数${http.method}表示请求的方法,GET、POST、PUT等。${http.uri}表示请求的Path,注意/开头,例如:/用户根据Restful规范在Path中对带参数的请求进行流量限制,Path中往往会有请求参数。例如下面的GET请求/users/{userId}/orders表示获取特定用户的订单列表的意思。此类接口的限流/users/.*/orders可以通过正则表达式实现,如下图:4.2.1使用分布式限流页面创建限流规则时,选择分布式限流limitrule部署额外的限流服务器(分布式限流需要依赖额外的中心限流集群来协调多个节点)客户端默认不需要任何配置,使用默认值即可。如果需要使用分布式限流,需要部署限流Server,并在Polaris上注册限流服务器(部署限流服务器参考文档),限流客户端通过Polaris获取限流服务器的服务地址。LimitingServer的默认服务名称是polaris.limiter,注册在Polaris命名空间下。如果自定义限流Server服务名,需要在resources/polaris.yml中配置限流Server服务名,如下:provider:#限流配置rateLimit:#限流服务的命名空间limiterNamespace:Polaris#限流service将服务名称改为自定义的服务名称limiterService:polaris.limiter第五步:启动应用应用启动成功后,访问应用的http接口,测试限流是否生效。如果请求被限速,将返回如下内容:请求被限流拒绝,因为达到了限流阈值HttpCode默认为429,限速时,可以通过spring.cloud.polaris自定义响应内容。ratelimit.rejectRequest提示。有关详细信息,请参阅配置列表。至此,限流访问完成。配置列表配置项Key默认值必填配置项说明spring.cloud.polaris.ratelimit.enabledtrue是否开启服务限流spring.cloud.polaris.ratelimit.rejectRequestTips否自定义拒绝请求响应spring.cloud的文本内容。polaris.ratelimit.rejectRequestTipsFilePath否自定义拒绝请求响应内容的文件地址,常用于返回html文件内容等。目前只支持classpath下的文件,放在resources目录下。spring.cloud.polaris.ratelimit.rejectHttpCode429(TooManyRequest)否自定义拒绝请求响应的Http状态码