Sentinel整合nacos实现策略持久化
2021-12-02 本文已影响0人
迦叶_金色的人生_荣耀而又辉煌
上一篇 <<<Sentinel策略的持久化方式
下一篇 >>>Sentinel整合网关服务核心代码
1.nacos配置
resource:资源名,即限流规则的作用对象
limitApp:流控针对的调用来源,若为 default 则不区分调用来源
grade:限流阈值类型(QPS 或并发线程数);0代表根据并发数量来限流,1代表根据QPS来进行流量控制
count:限流阈值
strategy:调用关系限流策略
controlBehavior:流量控制效果(直接拒绝、Warm Up、匀速排队)
clusterMode:是否为集群模式
2.Springboot整合代码
<!--sentinel 整合nacos -->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
<version>1.5.2</version>
</dependency>
spring:
application:
name: sentinel-test
cloud:
nacos:
discovery:
server-addr: 10.211.55.16:8848
###增加sentinel控制台的链接
sentinel:
transport:
dashboard: localhost:8718
eager: true
datasource:
ds:
nacos:
### nacos连接地址
server-addr: 10.211.55.16:8848
## nacos连接的分组
group-id: DEFAULT_GROUP
###路由存储规则
rule-type: flow
### 读取配置文件的 data-id
data-id: sentinel-test
### 读取培训文件类型为json
data-type: json
@RestController
public class NacosController {
@SentinelResource(value = "getOrderSentinel", blockHandler = "getOrderQpsException")
@RequestMapping("/getOrderSentinel")
public String getOrderSentinel() {
return "getOrderSentinel";
}
public String getOrderQpsException(BlockException e) {
e.printStackTrace();
return "服务限流异常了!";
}
}
3.注意事项
--如果sentinel控制台修改了配置的值,不会同步到nacos,但nacos里如果修改了值会立马同步到sentinel里。
--如果有自定义的加载,则不会从nacos里自动加载策略信息
@Component
@Slf4j
public class SentinelApplicationRunner implements ApplicationRunner {
private static final String GETORDER_KEY = "getOrder";
@Override
public void run(ApplicationArguments args) throws Exception {
List<FlowRule> rules = new ArrayList<FlowRule>();
FlowRule rule1 = new FlowRule();
rule1.setResource(GETORDER_KEY);
// QPS控制在2以内
rule1.setCount(1);
// QPS限流
rule1.setGrade(RuleConstant.FLOW_GRADE_QPS);
rule1.setLimitApp("default");
rules.add(rule1);
FlowRuleManager.loadRules(rules);
log.info(">>>限流服务接口配置加载成功>>>");
}
}
推荐阅读:
<<<Hystrix功能介绍
<<<Sentinel功能介绍
<<<Sentinel与Hytrix区别
<<<Sentinel的熔断降级策略
<<<Sentinel的热点词限流
<<<Sentinel的限流方式实例
<<<Sentinel策略的持久化方式
<<<Sentinel整合网关服务核心代码
<<<Sentinel环境搭建