springcloud-gateway-sentinel整合避坑
2021-01-23 本文已影响0人
nicohuhu
第一步:导入依赖
工程搭建参考上一节gateway入门,sentinel也是在此基础上搭建的。
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
第二步:配置yml
server:
port: 9999
spring:
application:
name: sentinel-gateway
cloud:
nacos:
discovery:
server-addr: localhost:8848
sentinel:
transport:
dashboard: localhost:8080 #sentinel的图形化界面访问路径
scg:
fallback: #服务降级返回的响应结果
mode: reponse
response-status: 426
response-body: error request
gateway:
discovery:
locator:
enabled: false #开启表示根据微服务名称映射,就是微服务名称拼接到url中可以直接访问,但是不推荐这么使用 容易暴露微服务
# enabled: false #默认开启网关true,关闭网关false
第三步:启动网关
此时启动网关后我们就完成整合了,但是如何使用呢。
第四步:如何使用sentinel限流
首先下载sentinel dashboard监控管理页面的jar包,官网下载https://github.com/alibaba/Sentinel/releases/tag/v1.8.0,我这里使用v1.7版本

在cmd中运行java -jar D:\software\sentinel-dashboard-1.7.0后面跟上你的文件路径,可能会出错

我运行1.6jar包直接报错,更换1.7jar包后运行正常,一旦运行成功后,关闭后再次运行也会出错,所以我右击打开方式,选择Java(TM) Platform SE binary运行,任务管理器就会有这个服务,总之就是要运行编译这个jar包服务

然后访问是可以的账号密码都是sentinel,登录

一片空白

此时网关已经启动,我们随便掉一个接口返回成功即可,因为sentinel是懒加载的,需要请求来触发它。

此时就有了网关服务

用route id方式配置限流规则


其中order-center为yml中 routes的id,表示对这个微服务进行限流
spring:
cloud:
gateway:
routes:
- id: order-center #id必须要唯一
uri: lb://order-center
predicates:
- Path=/order/**
- id: product-center #id必须要唯一
uri: lb://product-center
#谓词工厂
predicates:
- Path=/product/** #先匹配断言 然后追加或省略前缀
我们网页发起请求,点击请求一次,请求成功

我们一秒快速点击发起多次请求

请求太多会失败,每秒只允许一个请求,返回我们定义的降级状态码426

用api分组方式配置限流
先创建分组

然后这里就有了分组选择项


快速发起多次请求效果是一样的

总结:一旦项目重启sentinel中我们的这些配置都将消失,因为没有持久化,以上就是sentinel整合网关的简单应用。