我的微服务springcloud组件

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环境搭建

上一篇 下一篇

猜你喜欢

热点阅读