Sentinel 规则持久化

文章目录

Sentinel 规则持久化

需要大量修改源码,很麻烦,下面也只是修改了一小部分

阿里有一个收费的sentinel云服务,开源sentinel没有实现最佳版本可能就是为了给收费版让路吧

一、修改order-service服务

修改OrderService,让其监听Nacos中的sentinel规则配置。

具体步骤如下:

1.引入依赖

在order-service中引入sentinel监听nacos的依赖:

xml 复制代码
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-datasource-nacos</artifactId>
</dependency>

2.配置nacos地址

在order-service中的application.yml文件配置nacos地址及监听的配置信息:

yaml 复制代码
spring:
  cloud:
    sentinel:
      datasource:
        flow:
          nacos:
            server-addr: localhost:8848 # nacos地址
            dataId: orderservice-flow-rules
            groupId: SENTINEL_GROUP
            rule-type: flow # 还可以是:degrade、authority、param-flow

直接从datasource开始复制,粘贴过去


第二步修改非常麻烦,可以略过,直接使用已经打好包的来使用

链接:https://pan.baidu.com/s/1mffAD62BZt3IDp59NxO7OQ

提取码:hzan


二、修改sentinel-dashboard源码

SentinelDashboard默认不支持nacos的持久化,需要修改源码。

1. 解压

解压课前资料中的sentinel源码包:

然后并用IDEA打开这个项目,结构如下:

2. 修改nacos依赖

在sentinel-dashboard源码的pom文件中,nacos的依赖默认的scope是test,只能在测试时使用,这里要去除:

将sentinel-datasource-nacos依赖的scope去掉:

xml 复制代码
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-datasource-nacos</artifactId>
</dependency>

3. 添加nacos支持

在sentinel-dashboard的test包下,已经编写了对nacos的支持,我们需要将其拷贝到main下。

4. 修改nacos地址

然后,还需要修改测试代码中的NacosConfig类:

复制后的

修改其中的nacos地址,让其读取application.properties中的配置:

java 复制代码
/**
 * @author Eric Zhao
 * @since 1.4.0
 */
@Configuration
@ConfigurationProperties(prefix = "nacos")
public class NacosConfig {

    // nacos地址
    private String addr;

    @Bean
    public ConfigService nacosConfigService() throws Exception {
        return ConfigFactory.createConfigService(addr);
    }

    public String getAddr() {
        return addr;
    }

    public void setAddr(String addr) {
        this.addr = addr;
    }

    @Bean
    public Converter<List<FlowRuleEntity>, String> flowRuleEntityEncoder() {
        return JSON::toJSONString;
    }

    @Bean
    public Converter<String, List<FlowRuleEntity>> flowRuleEntityDecoder() {
        return s -> JSON.parseArray(s, FlowRuleEntity.class);
    }


}

在sentinel-dashboard的application.properties中添加nacos地址配置:

properties 复制代码
nacos.addr=localhost:8848

5. 配置nacos数据源

另外,还需要修改com.alibaba.csp.sentinel.dashboard.controller.v2包下的FlowControllerV2类:

让我们添加的Nacos数据源生效:

6. 修改前端页面

接下来,还要修改前端页面,添加一个支持nacos的菜单。

修改src/main/webapp/resources/app/scripts/directives/sidebar/目录下的sidebar.html文件:

将其中的这部分注释打开:

修改其中的文本:

java 复制代码
<li ui-sref-active="active" ng-if="entry.appType==0">
  <a ui-sref="dashboard.flow({app: entry.app})">
    <i class="glyphicon glyphicon-filter"></i>&nbsp;&nbsp;流控规则-NACOS</a>
</li>

7. 重新编译、打包项目

运行IDEA中的maven插件,编译和打包修改好的Sentinel-Dashboard:

报错就先clean,再package

打包好的文件如下,可以直接使用,就不要自己动手改了,确实很麻烦

链接:https://pan.baidu.com/s/1YpHITSBC3dUSAj8zQF_niQ

提取码:hzan

复制到一个目录下,并重命名,以示区分

8.启动

启动方式跟官方一样:

sh 复制代码
java -jar sentinel-dashboard.jar

如果要修改nacos地址,需要添加参数:(可以动态指定nacos的地址,外部依赖的地址,当然要动态指定啦)

sh 复制代码
java -jar -Dnacos.addr=localhost:8848 sentinel-dashboard.jar

9. 浏览器端测试

先正常登录nacos,然后访问一个资源,触发一个簇点链路

然后可能地址没换,之前的官方nacos前端有缓存,需要清空一下,清空指定网页缓存操作如下图

然后就会出现我们修改的基于nacos持久化的流控规则

那么目前在流控规则-nacos菜单下新建的规则可以持久化

其他菜单还是不行,得一个个修改,所以修改量会非常大,这也只是修改了一小部分

新增试试

到nacos下面看:多出了一个配置项: orderservice-flow-rules

访问:http://localhost:10010/order/101?authorization=admin

确实被限流了

重启OrderApplication微服务,以前会丢失,现在不会丢失了

(其他菜单下新建规则,然后重启OrderApplication微服务,查看确实丢失了)

10. 修改好后的sentinel规则可持久化文件

打包好的文件如下,可以直接使用,就不要自己动手改了,确实很麻烦

链接:https://pan.baidu.com/s/1YpHITSBC3dUSAj8zQF_niQ

提取码:hzan

相关推荐
麻瓜也要学魔法4 小时前
链路状态路由协议-OSPF
网络
Estar.Lee4 小时前
查手机号归属地免费API接口教程
android·网络·后端·网络协议·tcp/ip·oneapi
傻啦嘿哟5 小时前
代理IP在后端开发中的应用与后端工程师的角色
网络·网络协议·tcp/ip
Red Red5 小时前
网安基础知识|IDS入侵检测系统|IPS入侵防御系统|堡垒机|VPN|EDR|CC防御|云安全-VDC/VPC|安全服务
网络·笔记·学习·安全·web安全
亚远景aspice7 小时前
ISO 21434标准:汽车网络安全管理的利与弊
网络·web安全·汽车
Estar.Lee7 小时前
时间操作[计算时间差]免费API接口教程
android·网络·后端·网络协议·tcp/ip
友友马7 小时前
『 Linux 』网络层 - IP协议(一)
linux·网络·tcp/ip
码老白8 小时前
【老白学 Java】Warshipv2.0(二)
java·网络
HackKong9 小时前
小白怎样入门网络安全?
网络·学习·安全·web安全·网络安全·黑客