springboot 整合sentinel 和nacos实现流量控制

发布时间 2023-08-15 17:29:56作者: 蜗牛无敌

方案一使用sentinel 控制面板

1、启动sentinel

java -jar sentinel.jar

2、在自己应用user中添加依赖

    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.sleep</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
        <nacos-client>2.0.1</nacos-client>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
            <version>2.2.0.RELEASE</version>
            <exclusions>
                <exclusion>
                    <artifactId>nacos-client</artifactId>
                    <groupId>com.alibaba.nacos</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>servo-core</artifactId>
                    <groupId>com.netflix.servo</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <!--sentinel指定nacos为数据源 -->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-nacos</artifactId>
            <version>1.7.1</version>
            <exclusions>
                <exclusion>
                    <artifactId>nacos-client</artifactId>
                    <groupId>com.alibaba.nacos</groupId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- 引用sentinel配置 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
            <version>2.2.1.RELEASE</version>
            <exclusions>
                <exclusion>
                    <artifactId>spring-cloud-commons</artifactId>
                    <groupId>org.springframework.cloud</groupId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-core</artifactId>
            <version>1.7.1</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
            <version>${nacos-client}</version>
        </dependency>

    </dependencies>

3、新增bootstrap.yml

spring:
  application:
    name: user   # 服务名称 应用名称
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848   # 配置注册中心的地址
    #sentinel:
    #  transport:
    #    dashboard: localhost:8080 # 配置sentinel dashboard地址
    #    port: 8719

  # 暴露的健康检查服务断点
management:
  endpoint:
    web:
      exposure:
        include: '*'

4、在流量控制面板中就可以进行流量控制了

 

方案二 使用nacos 实现流量控制

1、依赖不变

2、配置

spring:
  application:
    name: user   # 服务名称 应用名称
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848   # 配置注册中心的地址
    #sentinel:
    #  transport:
    #    dashboard: localhost:8080 # 配置sentinel dashboard地址
    #    port: 8719
    sentinel:
      datasource:
        ds1:
          nacos:
            server-addr: localhost:8848
            dataId: ${spring.application.name}-sentinel.json
            groupId: DEFAULT_GROUP
            data-type: json
            rule-type: flow
  # 暴露的健康检查服务断点
management:
  endpoint:
    web:
      exposure:
        include: '*'
server:
  port: 9991
debug: true

3、在nacos配置中新咋 user-sentinel.json 配置即可

如:

[
    {
        "resource": "/getUser",
        "limitApp": "default",
        "grade": 1,
        "count": 1,
        "strategy": 0,
        "controlBehavior": 0,
        "clusterMode": false
    }
,
     {
        "resource": "/getUser1",
        "limitApp": "default",
        "grade": 1,
        "count": 2,
        "strategy": 0,
        "controlBehavior": 0,
        "clusterMode": false
    }
]