Spring Cloud Alibababa之sentinel nacos规则持久化案例

本文介绍如何使用Spring Boot结合Nacos和Sentinel实现服务流控,包括项目搭建、配置文件设置、规则定义及持久化等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


通过在nacos配置中心定义规则并发布成功之后,推送到sentinel控制台就可以生效了。

1、创建SpringBoot项目

2、pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.xxj</groupId>
    <artifactId>sentinel05</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>sentinel05</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>11</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-transport-simple-http</artifactId>
            <version>1.7.1</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>nacos-config-spring-boot-starter</artifactId>
            <version>0.2.1</version>
        </dependency>
        <!--nacos-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>
        <!-- sentinel做持久化配置-->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-nacos</artifactId>
            <version>1.7.1</version>
        </dependency>
        <!--引入sentinel-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
            <version>2.2.1.RELEASE</version>
            <exclusions>
                <exclusion>
                    <groupId>com.alibaba.csp</groupId>
                    <artifactId>sentinel-transport-simple-http</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!--监控系统的健康指标-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

3、yml文件

server:
  port: 10005
spring:
  application:
    name: sentinel05
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #Nacos服务注册中心地址
    sentinel:
      transport:
        port: 8719
        dashboard: localhost:8080 #配置Sentinel dashboard地址
      datasource:
        #flow、degrade、system、authority、param-flow名字是随意起得
        flow:
          nacos:
            server-addr: localhost:8848
            dataId: cloudalibaba-sentinel-service
            groupId: DEFAULT_GROUP
            data-type: json
            rule-type: flow
        degrade:
          nacos:
            server-addr: localhost:8848
            dataId: ${spring.application.name}-degrade
            groupId: DEFAULT_GROUP
            data-type: json
            rule-type: degrade
        system:
          nacos:
            server-addr: localhost:8848
            dataId: ${spring.application.name}-system
            groupId: DEFAULT_GROUP
            data-type: json
            rule-type: system
        authority:
          nacos:
            server-addr: localhost:8848
            dataId: ${spring.application.name}-authority
            groupId: DEFAULT_GROUP
            data-type: json
            rule-type: authority
        param-flow:
          nacos:
            server-addr: localhost:8848
            dataId: ${spring.application.name}-param
            groupId: DEFAULT_GROUP
            data-type: json
            rule-type: param-flow



management:
  endpoints:
    web:
      exposure:
        include: '*'

4、测试代码

package com.xxj.sentinel05.controller;

import com.alibaba.csp.sentinel.annotation.SentinelResource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class FlowLimitController
{
    @GetMapping("/test")
    public String test() {
        return "测试完毕";
    }

    @GetMapping("/byUrl")
    @SentinelResource(value = "byUrl")
    public String byUrl() {
        return "访问成功";
    }
}

5、启动类

package com.xxj.sentinel05;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class Sentinel05Application {

    public static void main(String[] args) {
        SpringApplication.run(Sentinel05Application.class, args);
    }

}

6、nacos规则配置

在这里插入图片描述

流控规则

[
    {
         "resource": "/byUrl",
         "limitApp": "default",
         "grade":   1,
         "count":   1,
         "strategy": 0,
         "controlBehavior": 0,
         "clusterMode": false    
    },
    {
         "resource": "byUrl",
         "limitApp": "default",
         "grade":   1,
         "count":   1,
         "strategy": 0,
         "controlBehavior": 0,
         "clusterMode": false    
    },
    {
         "resource": "/test",
         "limitApp": "default",
         "grade":   1,
         "count":   2,
         "strategy": 0,
         "controlBehavior": 0,
         "clusterMode": false    
    }
]
  • resource:资源名称
  • limitApp:来源应用
  • grade:阈值类型,0代表线程数,1代表QPS
  • count:单击阈值
  • strategy:流控模式,0代表直接,1代表关联,2代表链路
  • controlBehavior:流控效果,0代表快速失败,1代表Warm Up,2代表排队等待
  • clusterMode:是否集群
  • 其它规则的字段属性请查看官网:https://github.com/alibaba/Sentinel/wiki/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8

降级规则

[
    {
        "resource":"degrade",
        "grade": 0,
        "count": 2,
        "timeWindow": 2
    }
]

系统规则

[
    {
        "highestSystemLoad":10,
        "highestCpuUsage":1.0
    }
]

黑白名单规则

[
    {
        "resource":"authority",
        "limitApp":"appA",
        "strategy":1
    }
]

热点参数规则

[
    {
         "resource":"param",
        "grade": 0,
        "count": 2,
        "paramIdx":0
    }
]

7、访问接口并查看sentinel控制台

注意:一定要先访问接口,成功之后,才能在控制台看到流控规则持久化后的结果。

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值