(十五)SpringCloudAlibaba-Sentinel持久化到Nacos

前言

        在前面我们已经将Sentinel配置的规则持久化到系统的文件中。本章节我们将Sentinel持久化到Nacos中;

传送门(Sentinel数据持久化到文件)icon-default.png?t=N7T8https://blog.csdn.net/weixin_45876411/article/details/140742963

        默认情况下 Sentinel 只能接收到 Nacos 推送的消息,但不能将自己控制台修改的信息同步给 Nacos,如下图所示:

        生产环境下为了更方便的操作,需要将Sentinel控制台修改的规则也同步到Nacos,所以在这种情况下我们就需要修改Sentinel的源码,让其可以实现和 Nacos 的双向通讯,如下图所示:

版本信息

nacosnacos-server-2.4.0
sentinelSentinel-1.8

sentinel规则持久化到nacos分为两个流程

        流程一:下载sentinel源码包,改动源码使sentinel规则持久化支持使用nacos;

        流程二:项目配置sentinel规则持久化到nacos;

流程一(sentinel持久化到nacos)

1.下载并打开Sentinel源码

下载地址:https://github.com/alibaba/Sentinel

目录结构

2.修改sentinel-dashboard服务的pom.xml

        PS:因为官方提供的Nacos持久化实例,是在test目录下进行单元测试的,而我们是用于生产环境,所以需要将 scope 中的 test 去掉。

3.移动单元测试代码

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

nacos包中的4个类:
        FlowRuleNacosProvider: 动态获取Nacos配置中心流控规则,读取流控规则;
        FlowRuleNacosPublisher: publish上传流控规则到Nacos配置中心,写入流控规则;
        NacosConfig: Nacos配置;
        NacosConfigUtils: 流控规则在nacos中配置文件的一些细节(后缀、组别等);

4.注释FlowRuleNacosProvider、FlowRuleNacosPublisher类中导入的NacosConfigUtil类

5.新建NacosPropertiesConfiguration文件

        在src/main/java/com.alibaba.csp.sentinel.dashboard.rule中创建Nacos配置文件的读取类

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@ConfigurationProperties(prefix = "sentinel.nacos")
@Configuration
public class NacosPropertiesConfiguration {private String serverAddr;private String dataId;private String groupId;private String namespace;private String username;private String password;// Getter/Setterpublic String getServerAddr() {return serverAddr;}public void setServerAddr(String serverAddr) {this.serverAddr = serverAddr;}public String getDataId() {return dataId;}public void setDataId(String dataId) {this.dataId = dataId;}public String getGroupId() {return groupId;}public void setGroupId(String groupId) {this.groupId = groupId;}public String getNamespace() {return namespace;}public void setNamespace(String namespace) {this.namespace = namespace;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}
}

6.修改NacosConfig文件

修改内容:

    @Beanpublic ConfigService nacosConfigService(NacosPropertiesConfiguration nacosPropertiesConfiguration) throws Exception {Properties properties = new Properties();properties.put(PropertyKeyConst.SERVER_ADDR, nacosPropertiesConfiguration.getServerAddr());properties.put(PropertyKeyConst.NAMESPACE, nacosPropertiesConfiguration.getNamespace());properties.put(PropertyKeyConst.USERNAME,nacosPropertiesConfiguration.getUsername());properties.put(PropertyKeyConst.PASSWORD,nacosPropertiesConfiguration.getPassword());return ConfigFactory.createConfigService(properties);//  return ConfigFactory.createConfigService("localhost"); // 原代码}

7.修改FlowControllerV2文件

修改com.alibaba.csp.sentinel.dashboard.controller.v2目录下的FlowControllerV2 文件:

添加内容

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

PS:此操作的目的是开启 Controller 层操作 Nacos 的开关。

8.修改配置信息

        在application.properties中设置Nacos连接信息

# 新加Sentinel连接nacos配置
sentinel.nacos.serverAddr=localhost:8848
sentinel.nacos.username=nacos
sentinel.nacos.password=nacos
sentinel.nacos.namespace=
sentinel.nacos.groupId=DEFAULT_GROUP
sentinel.nacos.dataId=sentinel-dashboard-demo-sentinel

9.修改sidebar.html

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

搜索“dashboard.flowV1”将其替换为“dashboard.flow”

10.修改identity.js

dentity.js文件有两处修改,它位于webapp/resources/app/scripts/controllers/identity.js 目录。

10.1 第一处修改

将“FlowServiceV1”替换为“FlowServiceV2”

10.2 第二处修改

搜索“/dashboard/flow/”替换为“/dashboard/v2/flow/”

PS:修改 identity.js 文件主要是用于在 Sentinel 点击资源的“流控”按钮添加规则后将信息同步给 Nacos。

11.打包sentinel-dashboard工程

12.启动工程

sentinel启动命令

java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar

访问sentinel

流程二(项目集成sentinel持久化到nacos)

1.修改shop-order服务添加依赖

        <!--sentinel--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency><!--sentinel集成nacos额外需要的依赖--><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-datasource-nacos</artifactId><version>1.8.0</version></dependency>

2.修改shop-order服务application.yml配置

        添加sentinel持久化到nacos配置并重启shop-order服务;

完整配置文件供参考

server:port: 8091
# 项目名称(服务名称)
spring:application:name: service-order# 配置nocos服务端地址cloud:nacos:discovery:server-addr: localhost:8848# sentinel配置sentinel:transport:port: 9999 # 当前微服务和sentinel控制台数据交互端口dashboard: localhost:8080 # 指定sentinel控制台服务的地址(与启动sentinel控制台命令配置的地址相同)eager: true # 关闭懒加载datasource:ds1:nacos:server-addr: localhost:8848 # nacos地址dataId: service-order-flow-rules # sentinel规则持久化到nacos中的dataId(即文件名),启动项目后会在相应组下创建此文件groupId: SENTINEL_GROUP # 上面dataId(文件)存放在nacos中的组名data-type: json # 存放在dataId文件中的内容格式rule-type: flow # 规则类型
# 数据库配置datasource:type: com.alibaba.druid.pool.DruidDataSourcedriverClassName: com.mysql.cj.jdbc.Driverdruid:url: jdbc:mysql://127.0.0.1:3306/shop?useSSL=true&useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&rewriteBatchedStatements=TRUE&allowMultiQueries=true&serverTimezone=Asia/Shanghaiusername: rootpassword: 123456# 初始连接数initialSize: 5# 最小连接池数量minIdle: 10# 最大连接池数量maxActive: 50# 配置获取连接等待超时的时间maxWait: 60000# 配置连接超时时间connectTimeout: 30000# 配置网络超时时间socketTimeout: 60000# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒timeBetweenEvictionRunsMillis: 60000# 配置一个连接在池中最小生存的时间,单位是毫秒minEvictableIdleTimeMillis: 300000# 配置一个连接在池中最大生存的时间,单位是毫秒maxEvictableIdleTimeMillis: 900000# 配置检测连接是否有效validationQuery: SELECT 1 FROM DUALtestWhileIdle: truetestOnBorrow: falsetestOnReturn: false# ribbon负载均衡配置
service-product: # 服务提供方名称(即通过指定“服务名称”请求该服务时使用指定的负载均衡策略)ribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡策略(随机)

补充说明上面配置文件中"rule-type"对应sentinel所有的流控规则类型其取值如下

3.观察Naocs中是否在SENTINEL_GROUP组下新建service-order-flow-rules文件

4.进入sentinel控制台中添加限流规则

        为/order/message1接口添加流控规则(每秒访问频率1次)

5.查看Nacos中service-order-flow-rules文件中是否有刚添加的流控规则

6.访问/order/message1接口测试流控规则是否生效

7.重启shop-order服务再次访问/order/message1接口查看流控规则是否仍然生效(测试持久化)

文章结尾附:

        1.Sentinel-1.8.zip(源码未改动);

        2.nacos-server-2.4.0.zip;

        3.测试工程源码;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1523320.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

火情监测识别摄像机

火情监测识别摄像机 是一种用于监测和识别火灾风险的设备&#xff0c;通常用于森林、草原以及其他火灾易发区域。这种摄像机能够实时监测周围的环境&#xff0c;并使用图像识别技术来识别火灾的迹象。 这些摄像机通常配备红外热成像技术和视频分析算法&#xff0c;可以在白天和…

程序二义性举例

// 程序二义性.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 //#include <iostream> using namespace std; void f(int x) {cout << "---" << x << endl;} void f(int x,int y10) {cout << "" &l…

客流预测 | 基于Transformer下车站点客流推断研究(Matlab)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 基于Transformer的车站客流推断研究是指利用Transformer模型来预测车站的客流情况。Transformer是一种强大的深度学习模型&#xff0c;特别擅长处理序列数据。研究可以为城市交通管理提供重要决策支持&#xff0c;帮…

【系统分析师】-面向对象方法

目录 1、基本概念 2、UML 2.1、基本结构 2.1.1.构造块 2.1.1.1、事物 2.1.1.2、关系 2.1.1.3、图形 2.1.2.规则 2.1.3.公共机制 2.2、41视图 3、面向对象分析OOA 3.1、用例模型 3.2、分析模型 4、面向对象设计OOD 4.1、细分 4.2、设计原则 5、面向对象的程序设…

传统CV算法——基于harris检测算法实现角点检测

角点 角点是图像中的一个特征点&#xff0c;指的是两条边缘交叉的点&#xff0c;这样的点在图像中通常表示一个显著的几角。在计算机视觉和图像处理中&#xff0c;角点是重要的特征&#xff0c;因为它们通常是图像中信息丰富的区域&#xff0c;可以用于图像分析、对象识别、3D…

大模型(LLM)和知识库的基础介绍

文章目录 概要整体架构流程结合LLM与RAP的优势小结 概要 随着自然语言处理技术的发展&#xff0c;大型语言模型&#xff08;LLM&#xff09;已经成为了人工智能领域中的一个重要组成部分。这些模型通常具有数亿到数千亿个参数&#xff0c;能够理解和生成自然语言&#xff0c;从…

LabVIEW程序员错误排查思路

当LabVIEW程序员在开发过程中遇到难以解决的错误且网上搜不到答案时&#xff0c;需要采取系统性的方法进行排查和解决。这包括回顾代码逻辑、深入理解LabVIEW的底层机制、参考专业文献和求助社区等方式。下面将从多角度详细解读专业程序员在面对这种困境时的应对策略&#xff0…

网络安全等级保护:等级保护工作、分级保护工作、密码管理工作三者之间的关系

上次我整理了一篇文字叫《等级保护、等级保护测评、分级保护测评、密码保护测评之间的区别与联系》&#xff0c;后来发现这种措辞还是存在问题&#xff0c;今天在此重新做个探讨&#xff0c;同时进行更正。我们很多从事信息安全行业的人&#xff0c;交流时常常会提及“等保”“…

【淘宝采集项目经验分享】商品评论采集 |商品详情采集 |关键词搜索商品信息采集

商品评论采集 1、输入商品ID 2、筛选要抓取评论类型 3、填写要抓取的页数 4、立刻提交-启动测试 5、等爬虫结束后就可以到“爬取结果”里面下载数据 商品详情采集 1、输入商品ID 2、立刻提交-启动爬虫 3、等爬虫结束后就可以到“爬取结果”里面下载数据 taobao.item_…

数据结构排序方法总结

给定两个数组A,B&#xff0c;将A,B排序合并成一个数组&#xff0c;输出升序排列后的新数组。数组A,B中为整数&#xff0c;字母。 下面是代码&#xff1a; import java.util.Arrays;public class Solution15 {//冒泡排序public static void bubbleSort(String[] array) {int n…

俄罗斯Ozon选品三要素,简单实用的选品方法

在 Ozon 上选品可以参考以下三个要素&#xff1a; 要素一&#xff1a;市场需求 关注热门品类&#xff1a;从 Ozon 的销售数据和市场趋势来看&#xff0c;像电子产品&#xff08;如手机、耳机、智能穿戴设备等&#xff09;、时尚服饰&#xff08;包括流行服装、鞋类、配饰&…

电商数据驱动决策:京东商品详情API返回值的力量

在电商数据驱动决策的过程中&#xff0c;京东商品详情API返回值的力量不容忽视。这些返回值包含了丰富的商品信息&#xff0c;如商品标题、价格、图片、规格参数、用户评价等&#xff0c;为电商企业提供了强大的数据支持&#xff0c;帮助企业更加精准地把握市场动态&#xff0c…

开源项目|聚合支付工具,封装了某宝、某东、某银、PayPal等常用的支付方式

前言 IJPay是一款开源的支付SDK&#xff0c;它集成了微支付、某宝支付、银联支付等多种支付方式&#xff0c;为开发者提供了一种简单、高效的方式来处理支付问题。以下是IJPay的一些主要特点&#xff1a; 支持多种支付方式&#xff1a;IJPay支持微信支付、支付宝支付、银联支付…

用Python实现时间序列模型实战——Day 10: ARIMA 与 SARIMA 模型的综合练习

一、学习内容 1. ARIMA 与 SARIMA 模型的对比分析 ARIMA 模型&#xff1a; ARIMA 模型适用于没有明显季节性趋势的时间序列数据。它通过自回归 (AR)、差分 (I) 和移动平均 (MA) 成分来建模时间序列数据的趋势和噪声。 SARIMA 模型&#xff1a; SARIMA 模型是 ARIMA 模型的…

基于TensorFlow框架的手写数字识别系统(代码+论文+开题报告等)

手写数字识别 需安装Python3.X 64bit相关版本、Tensorflow 1.x相关版本 IDE建议使用Pycharm 打开main.py&#xff0c;运行即可 1.4 研究方法 实验研究表明&#xff0c;若手写体数字没有限制&#xff0c;几乎可以肯定没有一劳永逸的方法能同时达到90%以上的识别率和较快的识别…

网银U盾:财务眼中钉,会计肉中刺!

随着网银U盾的广泛应用&#xff0c;虽然使得财务安全有了大幅提升&#xff0c;但企业财务管理效率却越来越低了。 近期&#xff0c;我们发现&#xff0c;高达85%的企业在采购我们的USB Server时&#xff0c;都是出于网银U盾反复插拔的繁琐、效率低下、管理困难等原因。 想象一…

使用COAP和MQTT协议的多协议方法开发的用于机器人手术的自动医疗物联网系统

这篇论文的标题是《Development of automatic medical internet of things system (MIoT) for robotic surgery with multi-protocol approach using COAP and MQTT protocols》&#xff0c;作者是 Sujit N. Deshpande 和 Rashmi M. Jogdand&#xff0c;发表在《International …

浏览器百科:网页存储篇-Local storage介绍(四)

1.引言 在前面的章节中&#xff0c;我们详细介绍了 Cookie 的概念和应用实例。随着网页应用的不断发展&#xff0c;数据存储需求越来越多样化&#xff0c;浏览器提供了多种存储机制来满足这些需求。其中&#xff0c;localStorage 作为一种重要的网页存储方式&#xff0c;可以在…

前端bug:v-show嵌套组件外层,页面扩大后,组件被遮挡

在外层套上v-show 页面扩大到125%后&#xff0c;页码栏被压缩到窗口底部&#xff0c;被遮挡了 把v-show放到每个内部组件上 解决了被遮挡的问题 虽然问题解决了&#xff0c;但是不清楚原理是什么&#xff0c;麻烦路过的大佬指点一下&#xff0c;感谢&#xff01;&#x…

Mac+Pycharm配置PyQt6教程

安装包 pip install PyQt6 PyQt6-tools #查看Qt版本 pip show PyQt6 pip show pyqt6-tools 配置扩展工具 QTD(界面设计) Program&#xff1a;/Users/wan/PycharmProjects/NewDemo/venv/lib/python3.11/site-packages/qt6_applications/Qt/bin/Designer.app Working directo…