使用Nacos存储Sentinel的限流规则


要通过 Sentinel 控制台配置集群流控规则,需要对控制台进行改造。主要改造规则可以参考:

https://github.com/alibaba/Sentinel/wiki/Sentinel-控制台(集群流控管理)#规则配置

其控制台推送规则:

将规则推送到Nacos或其他远程配置中心

Sentinel客户端链接Nacos,获取规则配置;并监听Nacos配置变化,如发生变化,就更新本地缓存。

控制台监听Nacos配置变化,如发生变化就更新本地缓存。从而让控制台本地缓存总是和Nacos一致。

0x01:改造Sentinel

下载Sentinel 源代码,然后对sentinel-dashboard模块进行改造

https://github.com/alibaba/Sentinel/archive/1.7.2.zip

对pom.xml进行修改

com.alibaba.csp

sentinel-datasource-nacos

test

test注释掉

com.alibaba.csp

sentinel-datasource-nacos

修改java代码

找到如下目录(位于test目录)

sentinel-dashboard/src/test/java/com/alibaba/csp/sentinel/dashboard/rule/nacos

将整个目录拷贝到

sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/rule/nacos

修改com.alibaba.csp.sentinel.dashboard.controller.v2.FlowControllerV2.java

修改成

修改HTML页面

找到sidebar.html页面

sentinel-dashboard/src/main/webapp/resources/app/scripts/directives/sidebar.html并找到如下代码段后,并把注释放开

修改后

经过以上步骤就已经把流控规则改造成推模式持久化了。

0x02:编译生成jar包

执行命令

mvn cleanpackage-DskipTests

编译成功后,在项目的 target 目录可以找到sentinel-dashboard.jar ,执行以下命令可以启动控制台:

java-jarsentinel-dashboard.jar

0x03:改造微服务

新建项目olive-nacos-sentinel-datasource

对应的pom.xml文件引入

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

com.sentinel

olive-nacos-sentinel-datasource

0.0.1-SNAPSHOT

jar

org.springframework.boot

spring-boot-starter-parent

2.1.3.RELEASE

olive-nacos-sentinel-datasource

http://maven.apache.org

UTF-8

1.8

org.springframework.boot

spring-boot-starter-web

com.alibaba.cloud

spring-cloud-starter-alibaba-sentinel

com.alibaba.csp

sentinel-datasource-nacos

org.springframework.cloud

spring-cloud-dependencies

Greenwich.SR3

pom

import

com.alibaba.cloud

spring-cloud-alibaba-dependencies

2.1.0.RELEASE

pom

import

新建SpringBoot启动类

packagecom.olive;

importorg.springframework.boot.SpringApplication;

importorg.springframework.boot.autoconfigure.SpringBootApplication;

/**

* Hello world!

*

*/

@SpringBootApplication

publicclassApplication{

publicstaticvoidmain(String[] args){

SpringApplication.run(Application.class, args);

}

}

创建控制器

package com.olive.controller;

importjava.util.HashMap;

importjava.util.Map;

importorg.springframework.web.bind.annotation.GetMapping;

importorg.springframework.web.bind.annotation.RestController;

@RestController

publicclassUserController{

@GetMapping("/getUser")

publicMap getUser() {

Map result =newHashMap<>();

result.put("code","000000");

result.put("message","ok");

returnresult;

}

}

修改配置文件application.yml

spring:

application:

name: olive-nacos-sentinel-datasource

cloud:

sentinel:

transport:

dashboard: localhost:8080

datasource:

# 名称随意

flow:

nacos:

server-addr: localhost:8848

dataId: ${spring.application.name}-flow-rules

groupId: SENTINEL_GROUP

# 规则类型,取值见:

# org.springframework.cloud.alibaba.sentinel.datasource.RuleType

rule-type: flow

server:

port: 8866

0x04:验证

主要验证场景

场景1:用Sentinel控制台【菜单栏的 流控规则 V1 】推送流控规则,规则会存储到Nacos;

场景2:直接在Nacos上修改流控规则,然后刷新Sentinel控制台,控制台上的显示也会被修改;

场景3:重启Sentinel控制台,并重启微服务;刷新控制台,可以发现规则依然存在。

启动服务

Sentinel控制台

Nacos

olive-nacos-sentinel-datasource

Nacos中创建限流规则的配置

   http://127.0.0.1:8848/nacos/#/login

[

{

"resource":"/getUser",

"limitApp":"default",

"grade":1,

"count":5,

"strategy":0,

"controlBehavior":0,

"clusterMode":false

}

]

如下图

访问接口(olive-nacos-sentinel-datasource服务提供的接口)

     http://localhost:8866/getUser

访问Sentinel控制台

     http://127.0.0.1:8080/#/login

以上这条记录就是在Nacos中配置的限流规则。可以测试在Sentinel控制台修改规则是否同步到Nacos,或者在Nacos上修改规则是否同步到Sentinel控制台

你可能感兴趣的:(使用Nacos存储Sentinel的限流规则)