核心依赖
<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>
<!-- gateway-sentinel持久化到nacos-->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
<!-- 注册中心依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- 配置中心依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
网关,网关集成sentinel,配置中心注册中心依赖,持久化到nacos依赖
网关的yaml
spring:
application:
name: gateway
config:
import: optional:nacos:${spring.application.name}.yaml
cloud:
nacos:
server-addr: 127.0.0.1:8848
username: nacos
password: nacos
config:
namespace: 737f7348-61ed-4863-b349-0f125a7f7538
group: DEFAULT_GROUP
refresh-enabled: true
discovery:
group: DEFAULT_GROUP
namespace: 737f7348-61ed-4863-b349-0f125a7f7538
loadbalancer:
nacos:
enabled: true
server:
port: 8888
logging: # 添加日志配置
level:
org.springframework.cloud.gateway: DEBUG
对应nacos配置中心的yaml
spring:
cloud:
gateway:
routes:
- id: product-service
uri: lb://product
predicates:
- Path=/product-service/**
filters:
- StripPrefix=1
- id: stock-service
uri: lb://stock
predicates:
- Path=/stock-service/**
filters:
- StripPrefix=1
discovery:
locator:
enabled: true # 启用服务发现路由
# Sentinel配置
sentinel:
# 取消控制台懒加载(默认sentinel是懒加载)
eager: true
transport:
# Sentinel的控制台地址
dashboard: localhost:8718
scg:
fallback:
mode: response
response-status: 429
response-body: '{"code": 429, "message": "服务繁忙,请稍后重试"}'
# 配置流控规则
datasource:
gw-flow:
nacos:
server-addr: localhost:8848
data-id: ${spring.application.name}-flow-rules
group-id: DEFAULT_GROUP
namespace: 737f7348-61ed-4863-b349-0f125a7f7538
data-type: json
rule-type: gw-flow
持久化的流控json文件
datasource:
gw-flow:
nacos:
server-addr: localhost:8848
data-id: ${spring.application.name}-flow-rules
group-id: DEFAULT_GROUP
namespace: 737f7348-61ed-4863-b349-0f125a7f7538
data-type: json
rule-type: gw-flow
1、刚刚nacos中的配置文件中,这几个就是来指定持久化文件怎么配置的,放在哪里叫什么名字,就根据上面的这个配置指定的,自己配置不一定跟这里一样
2、这时候启动网关就可以去sentinel控制台了
3、这时候是没有信息的需要随便请求几下,这时候就可以看到sentinel中已经存在刚刚的请求了
4、现在就可以对当前请求进行流控,熔断降级这里是没做的,单说流控,这里为什么不做熔断,假设熔断了就是对某个服务整个服务进行熔断,可能出现问题的只是某个接口,不应该熔断整个应用,应该微服务搭配sentinel去做更细的熔断降级
5、如果配置都没有出错,这时候就可以看到流控信息是已经持久化的了,要注意这里的rule-type:gw-flow是网关流控
对应的微服务配置,也就是网关的路由转发对象
确保这个服务要在nacos中注册,也要开启网关的负载均衡