sentinel笔记10- 限流规则持久化(下)

devtools/2024/12/28 17:31:34/

上一篇整理过单向的持久化sentinel笔记9- 限流规则持久化(上)-CSDN博客

本篇进行sentinel 改造,实现双向同步。

1 下载Sentinel源码

https://github.com/alibaba/Sentinel

2 dashboard 改造

2.1修改dashboard项目的pom.xml

        <!-- for Nacos rule publisher sample --><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-datasource-nacos</artifactId><!--<scope>test</scope>--></dependency>

2.2 复制nacos 测试类

 将 test/com.alibaba.csp.sentinel.dashboard.rule.nacos下所有文件复制到 src/main/java/com.alibaba.csp.sentinel.dashboard.rule 目录

其中  FlowRuleNacosProvider 是读取流控规则,FlowRuleNacosPublisher是上传流控规则到nacos 配置中心。

2.3  修改NacosConfig文件

修改方法nacosConfigService,目的是引入nacos配置参数

/** Copyright 1999-2018 Alibaba Group Holding Ltd.** Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance with the License.* You may obtain a copy of the License at**      http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/
package com.alibaba.csp.sentinel.dashboard.rule;import com.alibaba.csp.sentinel.dashboard.datasource.entity.rule.FlowRuleEntity;
import com.alibaba.csp.sentinel.datasource.Converter;
import com.alibaba.fastjson.JSON;
import com.alibaba.nacos.api.PropertyKeyConst;
import com.alibaba.nacos.api.config.ConfigFactory;
import com.alibaba.nacos.api.config.ConfigService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.util.List;
import java.util.Properties;/*** @author Eric Zhao* @since 1.4.0*/
@Configuration
public class NacosConfig {private final Logger LOGGER = LoggerFactory.getLogger(NacosConfig.class);@Value("${nacos.address}")private String address;@Value("${nacos.namespace}")private String namespace;@Value("${nacos.username}")private String username;@Value("${nacos.password}")private String password;@Beanpublic Converter<List<FlowRuleEntity>, String> flowRuleEntityEncoder() {return JSON::toJSONString;}@Beanpublic Converter<String, List<FlowRuleEntity>> flowRuleEntityDecoder() {return s -> JSON.parseArray(s, FlowRuleEntity.class);}@Beanpublic ConfigService nacosConfigService() throws Exception {Properties properties = new Properties();properties.put(PropertyKeyConst.SERVER_ADDR, address);properties.put(PropertyKeyConst.NAMESPACE, namespace);properties.put(PropertyKeyConst.USERNAME, username);properties.put(PropertyKeyConst.PASSWORD, password);LOGGER.info("nacosConfigService init,address:{}",address);return ConfigFactory.createConfigService(properties);//  return ConfigFactory.createConfigService("localhost");}
}

配置引入 

2.4 修改配置文件

nacos.address=localhost:8848
nacos.username=nacos
nacos.password=nacos
nacos.namespace=

config代码只用到这些,至此,配置改完了。下面是修改下控制台的规则controller. 

2.5.修改FlowControllerV2文件

使用新复制的flowRuleNacosProvider、flowRuleNacosPublisher 替代default.代码如下:

    @Autowired@Qualifier("flowRuleNacosProvider")private DynamicRuleProvider<List<FlowRuleEntity>> ruleProvider;@Autowired@Qualifier("flowRuleNacosPublisher")private DynamicRulePublisher<List<FlowRuleEntity>> rulePublisher;

2.6 修改左侧导航菜单页面

修改webapp/resources/app/scripts/directives/sidebar/sidebar.html 文件

搜索“流控规则”,把其中的“dashboard.flowV1”改为“dashboard.flow”

把原来的注释掉。

2.7 修改identity.js

第4行将“FlowServiceV1”替换为“FlowServiceV2”

  修改保存规则方法saveFlowRule(),98行,“/dashboard/flow/”替换为“/dashboard/v2/flow/”

就是为了调用新改的controller。把修改后规则后将信息同步给 Nacos。

原来默认的接口是在内存中。

至此,改造结束。打包测试。

3 打包

打包注意只是dashboard工程就行,不用外层整个原码工程打包。

4 启动sentinel

注意,拷贝命令时,之前默认是带版本的,我还沿用了,报错提示: 找不到或无法加载主类 .port=8888 以及Error: Unable to access jarfile .\xxxx.jar

对应下版本就好,有时候脑子不转了还很奇怪,为啥突然报错了。

至此,sentinel dashboard就准备好了。

5 验证项目准备

sentinel笔记9- 限流规则持久化(上)-CSDN博客

主要是验证项目引入依赖,修改配置文件。对照下看看,我在上一篇改过了,不用再改了,贴一下配置供参考:

  <!--nacos-discovery  注册中心依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!-- nacos-config 配置中心依赖 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><!-- sentinel 依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency><!--以nacos作为sentinel数据源的依赖--><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-datasource-nacos</artifactId></dependency>

yml主要是看看sentinel那部分就行。 

spring:application:name: tlmall-storagecloud:nacos:
#      discovery:
#        server-addr: tlmall-nacos-server:8848config:server-addr: tlmall-nacos-server:8848file-extension: yml   #指定配置文件扩展名为ymlsentinel:transport:port: 8719# 添加sentinel的控制台地址dashboard: tlmall-sentinel-dashboard:8888datasource:nacos:nacos:server-addr: localhost:8848data-id: tlmall-storage-flow-rulesrule-type: flowgroup-id: SENTINEL_GROUPdata-type: jsonusername: nacospassword: nacosconfig:import:- optional:nacos:${spring.application.name}.yml- optional:nacos:db-common.yml    #数据库公共配置- nacos:nacos-discovery.yml- optional:nacos:seata-client.yml

6 验证

  

在dashbaord 新增流控规则,我刚才没截图,用编辑替代下。

然后再naocs看看

发现nacos多了条对应配置。如果我们在nacos 修改下阈值,会发现控制台也会同步修改,刷新下页面会展示。

测试下限流

这样sentinel重启后也不丢失规则,实现了sentinel  控制台与nacos双向绑定

其他的规则也是类似的。

好了,总体来说改动不大,有点麻烦。


http://www.ppmy.cn/devtools/146167.html

相关文章

抖音生活服务商系统源码怎么搭建?

随着抖音在本地生活服务市场的势头日渐迅猛&#xff0c;抖音生活服务商所拥有的广阔市场前景和巨大收益潜力也开始不断显现&#xff0c;而这也让不少创业者都产生了入局的想法&#xff0c;并纷纷从各个渠道打听起了抖音生活服务商怎么申请的消息。 毕竟&#xff0c;综合抖音官方…

IPv4地址表示法详解

在TCP/IP协议中&#xff0c;IP地址是一个最基本的概念&#xff0c;本文就来参考《计算机网络》谢希仁 这本书&#xff0c;总结一下IPv4地址表示法的发展阶段&#xff0c;做个读书笔记。 IP地址的编址方法共经过了三个历史阶段&#xff1a; 分类的IP地址&#xff0c;这是最基本…

【uniapp】支付宝付款成功后怎么调回自定义页面

以H5为例&#xff08;其实兼容app&#xff09; 1、uniapp跳转第三方链接&#xff0c;新建一个a.vue // actionUrl为第三方链接&#xff08;例如后端返回的支付宝链接&#xff09; <template><view><web-view :src"actionUrl"></web-view>&l…

7-1求逆序对数目

目录 题目描述 输入样例: 输出样例: 逆序对的含义&#xff1a; 具体思路&#xff1a; 归并排序&#xff1a; 求逆序对&#xff1a; 代码实现&#xff1a; 对于mid-z1举个例子 题目描述 注意&#xff1a;本问题算法的时间复杂度要求为O(nlogn), 否则得分无效 题目来源&#xff…

【Java 代码审计入门-02】SQL 漏洞原理与实际案例介绍

SQL注入漏洞全解析 发布日期&#xff1a;2024年12月26日 引言 在互联网的快速发展的今天&#xff0c;Web应用的安全性变得越来越重要。SQL注入&#xff08;SQL Injection, 简称SQLi&#xff09;作为最常见的Web安全漏洞之一&#xff0c;给无数网站和应用程序带来了巨大的风险…

kotlin 函数作为参数

函数引用的类型 Kotlin 支持几种类型的函数引用&#xff1a; 引用顶层函数: ::topLevelFunction引用成员函数: ::memberFunction (需要一个对象实例来调用)引用扩展函数: ::extensionFunction (需要一个接收者对象)引用构造函数: ::ClassName 或 ClassName::class.constructo…

再谈ChatGPT降智:已蔓延到全端,附解决方案!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;专注于分享AI全维度知识&#xff0c;包括但不限于AI科普&#xff0c;AI工…

Dockerfile的用法

Dockerfile的用法 示例 `Dockerfile`使用 `Dockerfile` 创建 Docker 镜像`Dockerfile` 指令详解其他常用指令总结Dockerfile 是一个文本文件,包含了用于创建 Docker 镜像的一系列指令。这些指令描述了镜像的基础、所安装的软件、文件的复制、环境变量的设置以及其他配置。下面…