【Sentinel系列】Sentinel Dashboard 整合Nacos 实现 流控规则 双向同步 (三)

303 阅读2分钟

这是我参与11月更文挑战的第26天,活动详情查看:2021最后一次更文挑战

修改FlowControllerV2类,把之前的配置两个类注入,表示规则的拉取和规则的发布统一用两个的自定义实例

@RestController
@RequestMapping("/v2/flow")
public class FlowControllerV2{
	@Autowired
    @Qualifier("flowRuleNacosProvider")
    private DynamicRuleProvider<FlowRuleEntity> ruleProvider;
    @Autowired
    @Qualifier("flowRuleNacosPublisher")
    privateDynamicRulePublisher<FlowRuleEntity> rulePublisher;
}

在application.propetties文件中添加Nacos服务端的配置信息

sentinel.nacos.serverAddr=127.0.0.1:8848
sentinel.nacos.namespace=
sentinel.nacos.group-id=DEFAULT_GROUP

使用命令将代码打包成jar包,

mvn clean package

Sentinel Dashboard 流控规则数据同步

在网关应用配置文件中data-id命名要以-sentinel-flow结尾,因为在Sentinel Dashboard写一个固定的后缀。

spring:
	application:
		name: spring-cloud-sentinel-dynamic-update
	cloud:
            sentinel:
              # 取消控制台懒加载
              eager: true
              transport:
                # 控制台地址
                dashboard: 127.0.0.1:8718
              # nacos配置持久化
              datasource:
                ds1:
                  nacos:
                    server-addr: 127.0.0.1:8848
                    dataId: sentinel-trs-gateway
                    groupId: DEFAULT_GROUP
                    data-type: json
                    rule-type: flow

  1. 访问http://127.0.0.1:8718登录Sentinel Dashboard管控台,进入【流控规则】,然后根据需要添加限流的资源创建流控规则。 image-20211122231443736.png
  2. 进入Nacos管控台,可查看到在Sentinel Dashboard配置的流控规则已同步到Nacos配置中心。
{
        "resource":"teaching-management",
        "count":1000,
        "grade":1,
        "limitApp":"default",
        "strategy":0,
        "controlBehavior":0
    }
Sentinel 热点数据限流

热点数据是经常被访问到的数据,针对这些高频访问的数据进行限流,例如在一段时间内异常频繁访问的用户IP地址进行限流,或者针对异常频繁访问的用户ID进行限流。

Sentinel 提供了热点参数限流的策略,是一种特殊的限流,在普通限流基础上对同一个受保护的资源根据请求的参数分别处理,该策略只对包含热点参数资源调用生效。

热点限流场景有如下:

  1. 服务网关层,用于防止网络爬虫和恶意攻击,一种常用方法就是限制爬虫的IP地址,客户端IP地址是一种热点参数。