小白测试sentinel-dashboard持久化到nacos

前言

上一篇小白学习sentinel dashboard持久化到nacos已经部署了持久化到nacos的sentinel-dashboard

本篇任务:

  • 测试sentinel-dashboard是否能将内容存放到nacos
  • 测试接口是否可以按规则限流

springboot集成sentinel

  1. 新建gateway-sentinel模块,添加如下依赖
pom 复制代码
<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-sentinel</artifactId>
    </dependency>

    <dependency>
        <groupId>com.alibaba.csp</groupId>
        <artifactId>sentinel-datasource-nacos</artifactId>
        <version>1.8.7</version>
    </dependency>

    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
</dependencies>
  1. 修改application.yml,添加nacossentinel配置,内容如下:
yml 复制代码
spring:
  application:
    name: gateway-sentinel
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.0.102:8848
        username: nacos
        password: nacos
        namespace:
#        namespace: db224ee6-a96e-4bc9-ad5c-a673b0630386
    sentinel:
      # 开启对sentinel看板的饥饿式加载。sentinel默认是懒加载机制,只有访问过一次的资源才会被监控,通过关闭懒加载,在项目启动时就连接sentinel控制台
      eager: true
      log:
        dir: logs/sentinel #日志输出地址
      transport:
        #跟控制台交流的端口,docker部署的话,需要将容器的8719端口映射出来
        # docker run --name sentinel-server -p 8080:8080 -p 8719:8719 --restart=always --privileged=true -d sentinel-server
        #如果client-ip和port不配置,则会使用docker内网ip和默认的8719端口进行注册,如果客户端与dashboard不在同一网段则无法访问
        client-ip: 192.168.0.104 # 指定机器ip,否则存在虚拟机的时候,sentinel访问的可能是虚拟机的ip
        port: 8719
        # sentinel看板的地址
        dashboard: 192.168.0.102:6005
      enabled: true
      web-context-unify: false
      datasource:
        flow:
          nacos:
            server-addr: ${spring.cloud.nacos.discovery.server-addr}
            username: ${spring.cloud.nacos.discovery.username}
            password: ${spring.cloud.nacos.discovery.password}
            namespace: ${spring.cloud.nacos.discovery.namespace}
            group-id: SENTINEL_GROUP
            data-id: ${spring.application.name}-flow-rules
            # 规则类型:flow、degrade、param-flow、system、authority
            rule-type: flow
        # 熔断降级
        degrade:
          nacos:
            server-addr: ${spring.cloud.nacos.discovery.server-addr}
            username: ${spring.cloud.nacos.discovery.username}
            password: ${spring.cloud.nacos.discovery.password}
            namespace: ${spring.cloud.nacos.discovery.namespace}
            group-id: SENTINEL_GROUP
            data-id: ${spring.application.name}-degrade-rules
            rule-type: degrade
        # 热点规则
        param-flow:
          nacos:
            server-addr: ${spring.cloud.nacos.discovery.server-addr}
            username: ${spring.cloud.nacos.discovery.username}
            password: ${spring.cloud.nacos.discovery.password}
            namespace: ${spring.cloud.nacos.discovery.namespace}
            group-id: SENTINEL_GROUP
            data-id: ${spring.application.name}-param-flow-rules
            rule-type: param-flow
        # 系统规则
        system:
          nacos:
            server-addr: ${spring.cloud.nacos.discovery.server-addr}
            username: ${spring.cloud.nacos.discovery.username}
            password: ${spring.cloud.nacos.discovery.password}
            namespace: ${spring.cloud.nacos.discovery.namespace}
            group-id: SENTINEL_GROUP
            data-id: ${spring.application.name}-system-rules
            rule-type: system
        # 授权规则
        authority:
          nacos:
            server-addr: ${spring.cloud.nacos.discovery.server-addr}
            username: ${spring.cloud.nacos.discovery.username}
            password: ${spring.cloud.nacos.discovery.password}
            namespace: ${spring.cloud.nacos.discovery.namespace}
            group-id: SENTINEL_GROUP
            data-id: ${spring.application.name}-authority-rules
            rule-type: authority
management:
  endpoints:
    web:
      exposure:
        ## yml文件中存在特殊字符,必须用单引号包含,否则启动报错
        include: '*'

注意:sentinelnacos的配置,要和持久化sentinel-dashboard相关配置保持一致。

  • 例一:
    • sentinelnacosgroup-id配置,要和持久化sentinel-dashboardSentinelNacosPropertiesgroupId保持一致,如下图: 所以上面的group-id也为SENTINEL_GROUP
  1. 创建SentinelController,并添加测试接口/sentinel/message1
java 复制代码
package com.example.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping(value = "/sentinel")
public class SentinelController {

    @GetMapping("/message1")
    public String message1() {
        return "message1";
    }
}
  1. 浏览器访问http://localhost:8080/sentinel/message1,打开sentinel-dashboard,进入簇点链路,可看到接口已被添加。

  2. 新建流控规则 对接口/sentinel/message1添加流控规则,设置单机阈值为2,即每秒至多发两次请求

  3. 测试流控规则 浏览器不断访问接口,当超过阈值时,会限流,如下图:

  4. 访问nacos,如果持久化成功,可在配置列表看到如下内容

count就是单机阈值

修改count值为3,然后发布,打开sentinel-dashboard,可看到单机阈值变成了3

至此,sentinel-dashboard的规则持久化已经实现。

源码

相关推荐
程序员爱钓鱼5 小时前
Go语言实战案例 — 工具开发篇:实现一个图片批量压缩工具
后端·google·go
ChinaRainbowSea7 小时前
7. LangChain4j + 记忆缓存详细说明
java·数据库·redis·后端·缓存·langchain·ai编程
舒一笑7 小时前
同步框架与底层消费机制解决方案梳理
后端·程序员
minh_coo7 小时前
Spring框架事件驱动架构核心注解之@EventListener
java·后端·spring·架构·intellij-idea
白初&9 小时前
SpringBoot后端基础案例
java·spring boot·后端
计算机学姐11 小时前
基于Python的旅游数据分析可视化系统【2026最新】
vue.js·后端·python·数据分析·django·flask·旅游
该用户已不存在11 小时前
你没有听说过的7个Windows开发必备工具
前端·windows·后端
David爱编程12 小时前
深入 Java synchronized 底层:字节码解析与 MonitorEnter 原理全揭秘
java·后端
KimLiu12 小时前
LCODER之Python:使用Django搭建服务端
后端·python·django
再学一点就睡12 小时前
双 Token 认证机制:从原理到实践的完整实现
前端·javascript·后端