springcloud alibaba sentinel搭建及规则实例化到nacos

本文介绍如何利用Sentinel和Nacos实现服务限流配置的持久化存储,并通过实例演示从环境搭建到规则测试的全过程。

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

sentinel启动后可以添加自定义规则,但是是保存在内存中的,重启后会清除,需要持久化保存到nacos中。

springcloud 所有实战只写内容不加版本信息都是耍流氓!
集成环境在本机搭建
sentinel:sentinel-dashboard-1.8.1.jar
nacos:2.0.0
boot:2.3.2.RELEASE
cloud-alibaba:2.2.5.RELEASE

想了解cloud、boot、alibaba、对应关系的可以去官网参考
https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
这是源文件图,只要版本对,获取的渠道千万条
在这里插入图片描述
1、建立一个sentinel-module并配置yml和pom文件

server:
  port: 8007
spring:
  application:
      name: sentinel-config
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
    sentinel:
      transport:
        dashboard: 127.0.0.1:8080
      enabled: true
      datasource:
        ds1:
          nacos:
            server-addr: localhost:8848
            dataId: sentinel-config
            groupId: DEFAULT_GROUP
            data-type: json
            rule-type: flow
<?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.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>cloud-sentinel</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>cloud-sentinel</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

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

        <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>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-test</artifactId>
            <version>RELEASE</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>RELEASE</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.5.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>


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

</project>

2、创建一个测试类,就一个测试类

@RestController
public class TestController {

    @GetMapping("/hello")
    public String hello() {
        return "hello sentinel";
    }
}

在这里插入图片描述
3、启动nacos和sentinel

nacos直接点击 “startup.cmd”即可
在这里插入图片描述
sentinel是jar包,在所在文件夹下执行java -jar sentinel-dashboard-1.8.1.jar
在这里插入图片描述
4、测试nacos连接性
nacos默认端口是8848,浏览器访问 http://localhost:8848/nacos/index.html,然后用默认的nacos/nacos登录即可
在这里插入图片描述
登录成功后点击服务列表就能看见刚才新建的服务注册进来了
在这里插入图片描述
5、增加sentinel配置规则
在这里插入图片描述

[
    {
        "resource": "/hello",
        "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:warmUp,2:排队等待
clusterMode:是否集群

注意了,这个dataId得和yml里面配置的一样
6、测试Sentinel规则
打开http://127.0.0.1:8080/#/login 登录,账密还是默认的sentinel/sentinel
在这里插入图片描述
登录进来后点击流控规则,就能看见我们在nacos里配置的规则了
在这里插入图片描述
然后验证一下,在浏览器疯狂刷新 http://localhost:8007/hello,因为我们配置的每秒通过量是2,所以刷新太频繁页面就会限流导致如下显示。当然,在nacos里改完会立即同步到sentinel生效。在这里插入图片描述

使用post进行并发测试,可以看到,同时发送10个请求只有前两个成功了,其他的状态码都是429.证明配置生效了。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值