小白测试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的规则持久化已经实现。

源码

相关推荐
荔枝爱编程2 分钟前
如何在 Docker 容器中使用 Arthas 监控 Java 应用
java·后端·docker
高松燈6 分钟前
kafka入门和核心概念介绍
后端
喵手9 分钟前
Java中Stream与集合框架的差异:如何通过Stream提升效率!
java·后端·java ee
喵手20 分钟前
你知道,如何使用Java的多线程机制优化高并发应用吗?
java·后端·java ee
青梅主码31 分钟前
坐标差 1 公分,返工一整天?试试这个转换窍门
后端
cxyxiaokui00131 分钟前
别让你的Java对象在内存里躺平!序列化带它看世界
后端·面试
白露与泡影41 分钟前
SpringBoot前后端token自动续期方案
spring boot·后端·状态模式
青梅主码1 小时前
重磅!《人工智能和大型语言模型的研究前景:应用、挑战和未来方向》:代理型 AI 和大语言模型是否可以整合?
后端
hui函数1 小时前
Flask-WTF表单验证全攻略
后端·python·flask·web·表单验证
喵手1 小时前
Java异常处理最佳实践:如何避免捕获到不必要的异常?
java·后端·java ee