网站换了服务器,工地建筑劳务公司招工平台,移动wordpress 到根目录,wordpress 色目录
引言
概述
集成Sentinel
限流维度
网关集成
Route维度
API分组
精准匹配
前缀匹配
正则匹配
自定义限流返回格式
转视频版 引言
书接上篇#xff1a;微服务门神-Gateway过滤器Filter#xff0c;讲完了解Gateway过滤器之后#xff0c;接下来看下Gateway与…目录
引言
概述
集成Sentinel
限流维度
网关集成
Route维度
API分组
精准匹配
前缀匹配
正则匹配
自定义限流返回格式
转视频版 引言
书接上篇微服务门神-Gateway过滤器Filter讲完了解Gateway过滤器之后接下来看下Gateway与Sentinel的集成
概述
微服务中整合了网关那网关就成了项目的守门神了所有请求必须途径网关之后再借助网关路由转发到其他微服务。 所以当服务有限流需求时网关就是绕不开关注点。提起限流方案很多比如过滤器拦截器网关过滤器这些都可以不过今天要讲的是阿里的Sentinel。来看下Gateway是怎么整合Sentinel实现限流的。
集成Sentinel
Sentinel支持集成SpringCloud Gateway、Zuul等主流网关从1.6.0版本开始Sentinel提供了SpringCloud Gateway的适配模块可以提供两种资源维度的限流
限流维度 Route维度 即在Spring配置文件中配置的路由条目资源名为对应的routeId简单理解就是针对具体的某个微服务实施的限流。 自定义API维度 用户可以利用Sentinel提供的API来自定义一些API分组。可以理解针对具体的接口url实现限流。
网关集成
1添加依赖
dependencygroupIdcom.alibaba.csp/groupIdartifactIdsentinel-spring-cloud-gateway-adapter/artifactId
/dependency
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-sentinel/artifactId
/dependency
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-alibaba-sentinel-gateway/artifactId
/dependency
2添加配置
spring:cloud:sentinel:transport:port: 8719dashboard: localhost:8080
Route维度
针对的是接入网关的微服务做统一流通控制比如下面的网关接入的商品服务 sentinel对商品服务配置 限流逻辑跟之前流控配置一样如果不理解可以看SpringCloud Alibaba极简入门
API分组
Sentinel中支持按照API分组进行限流,就是我们可以按照特定规则进行限流.
在管控台页面中提供了三种方式的API分组管理 精准匹配 前缀匹配 正则匹配
以商品服务做测试案例在shop-product-server服务中定义了如下的接口地址
RestController
RequestMapping(/v1)
public class TestController {RequestMapping(/test1)public String test1(){return test1;}RequestMapping(/test2)public String test2(){return test2;}RequestMapping(/test3/test)public String test3(){return test3;}
}
精准匹配
1.在API管理中新建API分组匹配模式选择精准匹配匹配串写请求URL地址
限制api可以product-service 也可以使product-serv 测试时需要跟反问一样另外注意通过网关访问 2.在流控规则中API类型中选择API分组然后在API名称中选择我们刚刚定义的V1限流 3.此时上面三个请求中只有/product-service/v1/test1会被限流
前缀匹配
1.在API管理中新建API分组匹配模式选择前缀匹配匹配串写请求URL地址 此时/product-service/v1/test1和/product-service/v1/test2会被限流
注意: 如果路径为/*表示匹配一级路径如果路径为/**表示多级路径
正则匹配
1.在API管理中新建API分组匹配模式选择正则匹配匹配串写请求URL地址 此时所有路径都会被限流
自定义限流返回格式 默认情况下Gateway触发限流规则之后返回限流字符串提示这很明显不符合接口统一响应的规则这是我们对这个响应值进行定制。
1在配置类GatewayConfiguration.java中添加如下配置
PostConstruct
public void initBlockHandlers() {BlockRequestHandler blockRequestHandler new BlockRequestHandler() {public MonoServerResponse handleRequest(ServerWebExchange serverWebExchange, Throwable throwable) {Map map new HashMap();map.put(code, 0);map.put(message, 接口被限流了);return ServerResponse.status(HttpStatus.OK).contentType(MediaType.APPLICATION_JSON).body(BodyInserters.fromValue(map));}
};GatewayCallbackManager.setBlockHandler(blockRequestHandler);
} 2重启并测试 到这本篇就结束了欲知后事如何请听下回分解~
转视频版
看文字不过瘾可以切换视频版SpringCloud Alibaba极简入门