springcloud sentinel持久化

1.POM

关键包   sentinel-datasource-nacos  持久化

它的将nacos的配置,加载到sentinel. 所以首先要在nacos上配置限流规则。

如果能够将sentinel 自动保存在nacos上。就更好了。毕竟Sentinel提供了一个UI配置界面。能够更直观的查看配置信息。

<dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-nacos</artifactId>
        </dependency>

        <!--openfeign-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

        <!--nacos-config-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!--nacos-discovery-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

 2. yml

server:
  port: 8887

spring:
  profiles:
    active: dev
  application:
    name: cloud-consumer-service
  cloud:
    sentinel:
      transport:
        dashboard: localhost:8858
        port: 8719
      datasource:
        ds1: #自定义规则的一个标识
          nacos:
            server-addr: localhost:8848
            data-id: cloud-consumer-service
            group-id: DEFAULT_GROUP
            data-type: json 
            rule-type: flow #流控

  

3. 主启动

@SpringBootApplication
@EnableDiscoveryClient
public class OrderMain {
    public static void main(String[] args) {
        SpringApplication.run(OrderMain.class,args);
    }
}

4. 业务类

@RestController
@Slf4j
@RequestMapping("consumer")
public class SentinelController {


    @GetMapping("/testHotKey")
    @SentinelResource(value = "testHotKey",blockHandlerClass = CustomerBlockHandler.class, blockHandler = "handlerException")
    public CommonResult testHotkey() {

        return new CommonResult(200,"success");

    }
}

4.全局降级处理方法

public class CustomerBlockHandler {

    public  static CommonResult handlerException(BlockException exception){

        return new CommonResult(445,exception.getClass().getCanonicalName(),null);
    }
}

5. nacos 配置

 

 

 

  •  resource:资源名称
  • limitApp:来源应用
  • grade:阀值类型,0表示线程数,1表示QPS
  • count:单机阈值
  • strategy:流控模式,0表示直接,1表示关联,2表示链路
  • controllerBehavior:流控效果,0表示快速失败,1表示Warm up,2表示排队等待
  • clusterMode:是否集群

6. sentinel 

启动后,等待一会,看到流控规则

 

com.alibaba.cloud.sentinel.datasource.RuleType:
FLOW("flow", FlowRule.class),
DEGRADE("degrade", DegradeRule.class),
PARAM_FLOW("param-flow", ParamFlowRule.class),
SYSTEM("system", SystemRule.class),
AUTHORITY("authority", AuthorityRule.class),
GW_FLOW("gw-flow", "com.alibaba.csp.sentinel.adapter.gateway.common.rule.GatewayFlowRule"),
GW_API_GROUP("gw-api-group", "com.alibaba.csp.sentinel.adapter.gateway.common.api.ApiDefinition");

  

 

posted @ 2022-04-24 15:58  王叫兽  阅读(107)  评论(0编辑  收藏  举报