Agregar dependencia de Maven
La integración de Sentinel en versiones anteriores requería una configuración manual. En la nueva versión, basta con agregar la dependencia spring-cloud-alibaba-sentinel-gateway , que se configura internamente para nosotros. Puede consultar: SentinelSCGAutoConfiguration
<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>
Configurar centinela
spring:
cloud:
sentinel:
# 配置Sentinel控制台
transport:
dashboard: localhost:8888 # Sentinel 控制台地址
# 如果需要配置Sentinel全局异常处理,可以添加以下配置
scg:
fallback:
mode: response # 重定向(redirect) 或者 响应(response)
# redirect: # mode 为 redirect 时,设置重定向URL
response-status: 200 # 响应状态码
response-body: "{code: 500, msg: '服务器压力山大,请稍后再试!'}" # 响应内容体
Configurar reglas
Hay varias formas de configurar las reglas.
- El código se configura mediante la inicialización del Bean.
- Configuración a través de consola
- Centro de configuración integrado para la configuración
configuración en código
@Configuration
public class GatewayFlowRuleConfig {
/**
* 初始化网关流控规则
*/
@PostConstruct
public void init() {
Set<GatewayFlowRule> rules = new HashSet<>();
rules.add(new GatewayFlowRule()
.setResourceMode(SentinelGatewayConstants.RESOURCE_MODE_ROUTE_ID) // 模式
.setResource("user_route") // 资源名,gateway网关路由
.setGrade(RuleConstant.FLOW_GRADE_QPS) // 流控类型 QPS、线程数
.setCount(3) // 间隔时间内最大请求次数
.setIntervalSec(1L) // 间隔时间
.setControlBehavior(RuleConstant.CONTROL_BEHAVIOR_DEFAULT) // 流控方式 默认快速失败
.setBurst(0) // 超过最大请求次数,还能容忍多少个请求通过
);
GatewayRuleManager.loadRules(rules);
}
}
Configuración en la consola
La configuración de la consola es más intuitiva y conveniente. La desventaja es que no puede ser persistente, siempre que las reglas de reinicio del servicio desaparezcan. Las reglas de la consola son persistentes, puede verificar si son persistentes .
Reglas de configuración del Centro de configuración
Tome Nacos como ejemplo aquí
Agregar dependencia de Maven
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-sentinel-datasource</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
Configurar origen de datos de Sentinel
spring:
cloud:
sentinel:
datasource:
# 名称自定义
gateway-flow-rule:
nacos:
server-addr: ${spring.cloud.nacos.discovery.server-addr}
namespace: ${spring.cloud.nacos.discovery.namespace}
group-id: SENTINEL_GATEWAY_FLOW_GROUP
data-id: ${spring.application.name}-gateway-flow-rules.json
# 配置网关的流控规则一定要设置成 gw-flow,flow 是普通流控规则。
rule-type: gw-flow # 设置 gateway flow 流控规则类型
Nacos agrega configuración de reglas
- Cree un archivo de configuración de Nacos con el mismo espacio de nombres, ID de grupo e ID de datos que el anterior.
- Configure la clase de regla GatewayFlowRule en el código de referencia del parámetro de configuración
[
{
"app": "gateway-server",
"burst": 0,
"controlBehavior": 0,
"count": 5.0,
"grade": 1,
"interval": 1,
"intervalUnit": 0,
"maxQueueingTimeoutMs": 500,
"resource": "user_route",
"resourceMode": 0
}
]
- Reinicie el proyecto, y la configuración de reglas en Nacos se puede ver en la consola.