Sentinel规则持久化到Nacos教程

news2024/12/23 17:48:08

环境:

1、sentinel版本:1.8.6,下载地址:https://github.com/alibaba/Sentinel/releases/tag/1.8.6

2、nacos版本:2.1.2,下载地址:https://github.com/alibaba/nacos/releases

3、JDK版本:jdk1.8.0_351,下载地址 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

4、SpringBoot、SpringCloud、SpringCloudAlibaba版本

​ 参考https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E

SpringBoot版本spring.cloud.alibaba版本spring.cloud版本
2.4.22021.12020.0.1

生产环境规则管理及推送一般更常用的是 push 模式的数据源。对于 push 模式的数据源,如远程配置中心(ZooKeeper, Nacos, Apollo等等),推送的操作不应由 Sentinel 客户端进行,而应该经控制台统一进行管理,直接进行推送,数据源仅负责获取配置中心推送的配置并更新到本地。因此推送规则正确做法应该是 配置中心控制台/Sentinel 控制台 → 配置中心 → Sentinel 数据源 → Sentinel,而不是经 Sentinel 数据源推送至配置中心,本文采用Nacos作为数据源

1、下载地址sentinel-dashboard:

https://github.com/alibaba/Sentinel/releases/tag/1.8.6

2、修改文件pom文件

打开sentinel-dashboard模块下的pom文件,把nacos的test作用域注释掉

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

3、移动nacos推送和拉取规则实现示例文件

将test文件夹下 com.alibaba.csp.sentinel.dashboard.rule.nacos 包下的类移动到main文件com.alibaba.csp.sentinel.dashboard.rule
在这里插入图片描述


FlowRuleNacosProvider.java:从Nacos配置中心动态获取流控规则
FlowRuleNacosPublisher.java:上传动态获取流控规则到Nacos配置中心
NacosConfig.java:nacos配置
NacosConfigUtils.java:流控规则相关配置,比如GROUP_ID 流控规则的后缀FLOW_DATA_ID_POSTFIX

4、修改nacos配置文件

在NacosConfig中使用的是本地的nacos,我们需要修改此配置

在com.alibaba.csp.sentinel.dashboard.rule.nacos路径下创建NacosProperties.java文件,内容如下

package com.alibaba.csp.sentinel.dashboard.rule.nacos;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "sentinel.nacos")
public class NacosProperties {

   /**
    * nacos地址
    */
   private String serverAddr;
   /**
    * nacos命名空间
    */
   private String namespace;

   public String getServerAddr() {
       return serverAddr;
   }

   public void setServerAddr(String serverAddr) {
       this.serverAddr = serverAddr;
   }

   public String getNamespace() {
       return namespace;
   }

   public void setNamespace(String namespace) {
       this.namespace = namespace;
   }
}

修改NacosConfig.java文件

/*
* 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.nacos;

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.springframework.beans.factory.annotation.Autowired;
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 {

   //注入nacos配置文件
   @Autowired
   private NacosProperties nacosProperties;

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

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

   @Bean
   public ConfigService nacosConfigService() throws Exception {
//        修改前
//        return ConfigFactory.createConfigService("localhost");
//        修改后
       Properties properties = new Properties();
       properties.put(PropertyKeyConst.SERVER_ADDR, nacosProperties.getServerAddr());
       properties.put(PropertyKeyConst.NAMESPACE, nacosProperties.getNamespace());
       return ConfigFactory.createConfigService(properties);
   }
}

默认 Nacos 适配的 dataId 和 groupId 约定如下:

  • groupId: SENTINEL_GROUP
  • 流控规则 dataId: {appName}-flow-rules,比如应用名为 appA,则 dataId 为 appA-flow-rules

可以在 NacosConfigUtil 修改对应的 groupId 和 dataId postfix。然后在 NacosConfig 配置对应的 Converter,默认已提供 FlowRuleEntity 的 decoder 和 encoder。

最后在后端 com.alibaba.csp.sentinel.dashboard.controller.v2.FlowControllerV2 中指定对应的 bean 即可开启 Nacos 适配


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

至此、后端配置修改完成!!!

5、前端文件路由修改

官网原话:前端页面需要手动切换,或者修改前端路由配置(sidebar.html 流控规则路由从 dashboard.flowV1 改成 dashboard.flow 即可,注意簇点链路页面对话框需要自行改造)

a、修改流控规则

按照提示,找到resources/app/scripts/directives/sidebar/sidebar.html文件搜索dashboard.flowV1,进行修改

         <!--  修改前 -->
<!--          <li ui-sref-active="active" ng-if="!entry.isGateway">-->
<!--            <a ui-sref="dashboard.flowV1({app: entry.app})">-->
<!--              <i class="glyphicon glyphicon-filter"></i>&nbsp;&nbsp;流控规则</a>-->
<!--          </li>-->
         <!--  修改后 -->
         <li ui-sref-active="active" ng-if="!entry.isGateway">
           <a ui-sref="dashboard.flow({app: entry.app})">
             <i class="glyphicon glyphicon-filter"></i>&nbsp;&nbsp;流控规则</a>
         </li>

b、修改簇点链路

可以根据F12查看调用的接口然后确定页面修改方法即可

找到resources/app/scripts/controllers/identity.js文件,把FlowServiceV1 改成FlowServiceV2

image-20221128181749623

通页面找到saveFlowRule方法进行改动,把/dashboard/flow/换成/dashboard/v2/flow/

   function saveFlowRule() {
     if (!FlowService.checkRuleValid(flowRuleDialogScope.currentRule)) {
       return;
     }
     FlowService.newRule(flowRuleDialogScope.currentRule).success(function (data) {
       if (data.code === 0) {
         flowRuleDialog.close();
//          let url = '/dashboard/flow/' + $scope.app; //修改前
         let url = '/dashboard/v2/flow/' + $scope.app;//修改后
         $location.path(url);
       } else {
         alert('失败:' + data.msg);
       }
     }).error((data, header, config, status) => {
         alert('未知错误');
     });
   }

6、启动项目看看效果

按照上面的步骤已经改完了,启动项目看看效果

修改resource下面的application.properties文件,把一些常用的配置加上,我的加了下面这些

#项目参数
server.port=7080
csp.sentinel.dashboard.server=127.0.0.1:7080
project.name=sentinel-dashboard

#nacos配置
sentinel.nacos.serverAddr=127.0.0.1:8848
sentinel.nacos.namespace=7f1a800b-6fb5-444e-baf9-ca17a7e3ce76

如果需要加其他配置的可以参考官网控制台配置项

运行DashboardApplication的main方法启动,

浏览器打开http://127.0.0.1:7080/#/login登陆,用户名密码都是sentinel

image-20221128174132757

看到这个说明启动成功,接着搞个测试项目

7、创建演示项目

a、引入相关jar文件

<dependency>
   <groupId>com.alibaba.cloud</groupId>
   <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<!--   引入nacos数据源     -->
<dependency>
   <groupId>com.alibaba.csp</groupId>
   <artifactId>sentinel-datasource-nacos</artifactId>
</dependency>

b、配置文件

spring:
 application:
   name: sentinel-demo
 cloud:
   nacos:
     discovery:
       server-addr: 127.0.0.1:8848
       namespace: 7f1a800b-6fb5-444e-baf9-ca17a7e3ce76
   sentinel:
     transport:
       port: 8719
       dashboard: 127.0.0.1:7080
     datasource:
       flow:
         nacos:
           server-addr: 127.0.0.1:8848
           namespace: 7f1a800b-6fb5-444e-baf9-ca17a7e3ce76
           dataId: ${spring.application.name}-flow-rules
           groupId: SENTINEL_GROUP
           dataType: json
           rule-type: flow

namespace与控制台项目中sentinel.nacos.namespace配置项保持一样

dataId按照约定规则{appName}-flow-rules,比如应用名为 sentinel-demo,则 dataId 为 sentinel-demo-flow-rules

groupId与控制台项目中NacosConfigUtil的GROUP_ID一致

c、启动演示项目,随便调用一个接口

image-20221128182003922

新增一个流控规则

image-20221128182117271

image-20221128182336693

去nacos控制台查看。可以看到新增的规则

image-20221128182215627

ok,大功告成,这时候就算重启应用规则也不会消失
最后流控规则页面有个“回到单击页面 ”这个按钮,你要是点击了,那么又会回到默认的内存管理方式,所以我直接干掉他
找到resources/app/views/flow_v2.html ,找到回到单机页面按钮,直接注释掉这个按钮

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

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

相关文章

欧洲航天局(ESA)< ESA WorldCover 10m 2020 > 介绍

欧洲航天局&#xff08;ESA&#xff09;< ESA WorldCover 10m 2020 > 产品基于 Sentinel-1 和 Sentinel-2 数据提供了一种新的全球地表覆盖产品&#xff0c;分辨率为 10 米&#xff0c;时间为 2020 年。 该产品是在欧空局世界覆盖项目 < ESA WorldCover Project >的…

1. 认识复杂度和简单排序算法

1. 认识复杂度和简单排序算法 常数时间的操作&#xff0c;一个操作如果和样本的数据量没有关系&#xff0c;每次都是固定时间内完成的操作&#xff0c;叫做常数操作。 例子: int a arr[i];时间复杂度为一个算法流程中&#xff0c;常数操作数量的一个指标。常用O(读作big O)来…

基于随机森林、svm、CNN机器学习的风控欺诈识别模型

在信息爆炸时代&#xff0c;“信用”已成为越来越重要的无形财产。 ”数据风控“的实际意义是用DT&#xff08;Data Technology&#xff09;识别欺诈&#xff0c;将欺诈防患于未然&#xff0c;然后净化信用体系。 最近我们被客户要求撰写关于风控欺诈识别模型的研究报告&#x…

JavaScript基础语法(输出语句)

JavaScript基础语法&#xff08;输出语句&#xff09; 1.书写规范 区分大小写&#xff1a;与 Java 一样&#xff0c;变量名、函数名以及其他一切东西都是区分大小写的 每行结尾的分号可有可无 如果一行上写多个语句时&#xff0c;必须加分号用来区分多个语句。 注释 单行注释…

C++【IO流】

文章目录一、C语言的输入和输出二、C中的IO流自动类型识别scanf和cin等输入&#xff0c;都是通过空格或者换行分隔开来的多行测试用例如何写输入三、文件流ifstream读取文件读取文件中不同类型的数据一、C语言的输入和输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()…

【附源码】计算机毕业设计JAVA政府采购线上招投标平台

【附源码】计算机毕业设计JAVA政府采购线上招投标平台 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JA…

SBT20100VDC-ASEMI超低压降、低功耗肖特基SBT20100VDC

编辑-Z SBT20100VDC在TO-263封装里采用的2个芯片&#xff0c;其尺寸都是87MIL&#xff0c;是一款超低压降 低功耗肖特基二极管。SBT20100VDC的浪涌电流Ifsm为180A&#xff0c;漏电流(Ir)为6uA&#xff0c;其工作时耐温度范围为-65~150摄氏度。SBT20100VDC采用金属硅芯片材质&a…

电磁仿真设计RMxprt-6p72s电励磁凸极同步电机分析案例

作者 | 电机设计青年 仿真秀专栏作者 导读&#xff1a;大家好&#xff0c;我是仿真秀专栏作者——电机设计青年&#xff0c;曾担任ANSYS低频电磁工程师一职&#xff0c;后入职电机企业&#xff0c;一直从事电机产品研发工作。研究的电机类型涉及电励磁同步电机、永磁同步电机、…

力扣 889. 根据前序和后序遍历构造二叉树

题目 给定两个整数数组&#xff0c;preorder 和 postorder &#xff0c;其中 preorder 是一个具有 无重复 值的二叉树的前序遍历&#xff0c;postorder 是同一棵树的后序遍历&#xff0c;重构并返回二叉树。 如果存在多个答案&#xff0c;您可以返回其中 任何 一个。 示例 输…

MQ通道接收端绑定步骤

不同类型的绑定 IBM MQ 支持应用程序可以连接的两种方式&#xff1a; 1.本地绑定&#xff1a;这是当应用程序和队列管理器在同一个操作映像上时。 CHLAUTH 与此类应用程序连接无关。 2. 客户端绑定&#xff1a;这是应用程序和队列管理器使用网络进行通信的时候。 应用程序和队列…

DJ12-2-3 逻辑运算指令与移位指令

目录 1. 逻辑运算指令 &#xff08;1&#xff09;与 AND &#xff08;2&#xff09;或 OR &#xff08;3&#xff09;非 NOT &#xff08;4&#xff09;异或 XOR &#xff08;5&#xff09;测试 TEST 2. 移位指令 &#xff08;1&#xff09;非循环移位 &#xff08;2&…

2022安洵杯babyphp

这个题没打出来有点可惜&#xff0c;感觉做的都差不多了&#xff0c;不过有些地方确实没理解&#xff0c;还是理解不到位 先来看序列化&#xff0c;这个序列化是不难的&#xff0c;不过有一个小坑&#xff0c;我们先理一遍顺序 array(0) { } <?php //something in flag.p…

王道考研——操作系统(第三章 内存管理)

一、内存的基础知识 什么是内存&#xff1f;有何作用&#xff1f; 这么做的原因是&#xff0c;程序本来是放在外存中的&#xff0c;放在磁盘中的&#xff0c;但是磁盘的读写速度很慢&#xff0c;而cpu的处理速度又很快 存储单元就是存放数据的最小单元&#xff0c;每一个地址…

计算机组成原理习题课第一章-3(唐朔飞)

计算机组成原理习题课第一章-3&#xff08;唐朔飞&#xff09; ✨欢迎关注&#x1f5b1;点赞&#x1f380;收藏⭐留言✒ &#x1f52e;本文由京与旧铺原创&#xff0c;csdn首发&#xff01; &#x1f618;系列专栏&#xff1a;java学习 &#x1f4bb;首发时间&#xff1a;&…

Spark学习(6)-Spark SQL

1 快速入门 SparkSQL是Spark的一个模块, 用于处理海量结构化数据。 SparkSQL是非常成熟的 海量结构化数据处理框架. 学习SparkSQL主要在2个点: SparkSQL本身十分优秀, 支持SQL语言\性能强\可以自动优化\API简单\兼容HIVE等等。企业大面积在使用SparkSQL处理业务数据。 离线开…

想把iPad作为扩展屏,确发现macOS monterey随航功能不见了

居家办公最不爽的事情就是没有扩展屏&#xff0c;对于开发来说&#xff0c;效率是有影响的&#xff0c;于是便想着把iPad当作扩展屏来用 系统参数 mac&#xff1a; macOS monterey&#xff08;12.4&#xff09;&#xff1b;M1 iPad&#xff1a; iPad Pro 第2代&#xff0c;应该…

细粒度图像分类论文研读-2016

文章目录Compact Bilinear PoolingAbstractIntroductionCompact bilinear modelsA kernelized view of bilinear poolingCompact bilinear poolingSome properties of compact bilinear poolingCompact Bilinear Pooling Abstract 双线性模型很成功&#xff0c;但是双线性特征…

HNUCM-2022年秋季学期《算法分析与设计》练习14

目录 问题 A: 最小生成树&#xff08;Prim&#xff09; 问题 B: 牛妹的蛋糕 问题 C: 尼科彻斯定理 问题 D: 最小生成树&#xff08;Kruskal&#xff09; 问题 E: 单源最短路径问题 问题 F: 搭建电路 问题 G: 丛林小道 问题 H: 低碳出行 问题 A: 最小生成树&#xff08;P…

frontend webstorm plugin:插件推荐

目录CodeGlance &#xff08;左边地图&#xff09;GitToolBox &#xff08;Git提示&#xff09;Material Theme UI &#xff08;主题框架&#xff09;Nyan Progress Bar &#xff08;进度条&#xff09;Rainbow Brackets&#xff08;括号颜色&#xff0c;注意忽略变量&#xff…

【MySQL】事务和索引

文章目录事务&#xff08;Transaction&#xff09;1. 定义2. 如何操作事务2.1 SQL 语句操作事务的几个关键字2.2 使用 SQL 语句操作事务2.3 JDBC 操作事务3. 事务的四个特性&#xff1a;ACID3.1 Atomic&#xff08;原子性&#xff09;3.1.1 理解原子性3.2 Consistency&#xff…