JAVA全系列 教程
3762个小节阅读:7088.9k
目录
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
在开始二次开发之前,我们需要将Sentinel 的代码下载到本地。你可以从GitHub 的Releases页面中找到1.8.3版本,在该版本下的Assets面板中下载 Source code源文件。下载地址https://github.com/alibaba/Sentinel/releases
首先,你需要打开 sentinel-dashboard 项⽬的 pom.xml 文件,找到其中的依赖项 sentinel-datasource-nacos,它是连接 Nacos Config 所依赖的必要组件。
xxxxxxxxxx
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
<!-- 将scope注释掉 改为编译器打包-->
<!-- <scope>test</scope>-->
</dependency>
首先,你需要打开 sentinel-dashboard 项目下的 src/test/java目录。定位到 com.alibaba.csp.sentinel.dashboard.rule.nacos目录下。
解释:
- NacosConfig:初始化 Nacos Config 的连接;
- NacosConfigUtil:约定了 Nacos 配置⽂件所属的 Group 和⽂件命名后缀等常量字段;
- FlowRuleNacosProvider:从 Nacos Config 上获取限流规则;
- FlowRuleNacosPublisher:将限流规则发布到 Nacos Config。
为了让这些类在 Sentinel 运行期可以发挥作用,你需要在 src/main/java 下创建同样的包路径,然后将这四个文件从 test 路径拷贝到 main 路径下。
xxxxxxxxxx
@Bean
public ConfigService nacosConfigService() throws Exception {
Properties properties = new Properties();
// Nacos服务地址
properties.setProperty("serverAddr","192.168.66.101:8848");
// NameSpace id
properties.setProperty("namespace","a26e7bb2-04df-4574-8313-3d8728ae88ba");
return ConfigFactory.createConfigService(properties);
}
解释:
在代码中,我通过Qualifer标签将FlowRuleNacosProvider注入到了ruleProvier变量中,又采用同样的方式将FlowRuleNacosPublisher注入到了rulePublisher变量中。FlowRuleNacosProvider和 FlowRuleNacosPublisher就是上一步我们刚从 test目录 Copy到main目录下的两个类。
xxxxxxxxxx
@Override
public List<FlowRuleEntity> getRules(String appName) throws Exception {
// 发布到Nacos上的配置文件名
// app + NacosConfigUtil.FLOW_DATA_ID_POSTFIX +NacosConfigUtil.GROUP_ID
String rules = configService.getConfig(appName + NacosConfigUtil.FLOW_DATA_ID_POSTFIX,
NacosConfigUtil.GROUP_ID, 3000);
if (StringUtil.isEmpty(rules)) {
return new ArrayList<>();
}
return converter.convert(rules);
}
解析:
我们就完成了对后端程序的改造,将 Sentinel 限流规则同步到了 Nacos。接下来我 们需要对前端页面稍加修改,开放⼀个独立的页面,用来维护那些被同步到 Nacos 上的限流规则。
首先,我们打开 sentinel-dashboard 模块下的 webapp 目录,该目录存放了 Sentinel 控制 台的前端页面资源。我们需要改造的文件是 sidebar.html,这个 html文件定义了控制台的左侧导航栏。
新增内容
xxxxxxxxxx
<li ui-sref-active="active">
<a ui-sref="dashboard.flow({app: entry.app})">
<i class="glyphicon glyphicon-filter"></i> 流控规则百战</a>
</li>
微服务端的改造非常常简单,我们不需要对代码做任何改动,只需要添加⼀个新的依赖项,并在配置文件中添加 sentinel datasource 连接信息就可以了。
xxxxxxxxxx
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
我们在 application.yml 配置文件中找到 spring.cloud.sentinel 节点,在这个节点下添加⼀段Nacos 数据源的配置。
xxxxxxxxxx
datasource:
# 数据源key 可以自由命名
geekbang-flow:
# 指定当前数据源是Nacos
nacos:
# 设置Nacos的连接地址,命名空间和GroupID
server-addr: 192.168.66.101:8848
# Nacos 命名空间
namespace: a26e7bb2-04df-4574-8313-3d8728ae88ba
groupId: SENTINEL_GROUP
# 设置Nacos中配置⽂件的命名规则
dataId: ${spring.application.name}-flow-rules
# 必填的重要字段,指定当前规则类型是"限流"
rule-type: flow
启动Sentinel-dashboard子项目,找主启动类启动Sentinel控制台。
请求http://localhost:8080,你可以登录 Sentinel Dashboard 服务。这时你会看到左侧的导航栏多了⼀个“流控规则百战”的选项。你可以点击这个选项,并手动在当前页面右上方点击“新增流控 规则”,为 requestCoupon 添加⼀条“QPS=1 快速失败”的流控规则。
最后,打开 Nacos Config 的配置列表页,你就可以看到⼀个 cloud-sentinel-payment- flow-rules 的配置文件被创建了出来。