【全网最全】sentinel接入gateway网关,使用nacos做sentinel规则的持久化

news2024/9/22 0:58:23

文章目录

  • 目标
  • 官网
  • 接入准备
  • 环境配置
    • 测试环境
      • 启动
  • 规则nacos持久化
  • api分组初始化
    • 初始化api分组方式
  • 遗留问题 ?初始化api分组,会导致服务无法注册到sentinel dashboard

目标

sentinel接入gateway网关,使用nacos做sentinel规则的持久化

官网

https://sentinelguard.io/zh-cn/docs/open-source-framework-integrations.html

接入准备

  1. 下载sentinel可视化jar包.版本为1.8.6
    地址:https://github.com/alibaba/Sentinel/releases
  2. 配置yml
spring:
  cloud:
    sentinel:
      transport:
        # 当前服务与控制台交互的端口号,默认为8719,同一个机器上若有多个应用于控制台交互时需要设置成不同的端口
        port: 8719
        dashboard: 你的控制台所在的ip:8080   #如果是在本地 则是localhost    
      # 服务启动时直接建立心跳连接
      eager: true
      scg:
        # 流控触发返回
        fallback:
          response-body: '{"code":-10000, "data":null, "msg":"前方拥堵,请稍后重试"}'
          mode: response
          response-status: 500
      #       Sentinel 储存规则的数据源配置(我这里使用的是Nacos来存储Sentinel的限流规则)
      datasource:
        flow-control:
          nacos:
            server-addr: 你的nacos ip:8848
            data-id: seek-gateway-sentinel-test
            data-type: json
            group-id: DEFAULT_GROUP
            namespace: 你配置的nacos namespace
            rule-type: gw_flow
  1. 新增config配置
@Configuration
public class SentinelConfiguration {
    private final List<ViewResolver> viewResolvers;
    private final ServerCodecConfigurer serverCodecConfigurer;

    public SentinelConfiguration(ObjectProvider<List<ViewResolver>> viewResolversProvider,
                                 ServerCodecConfigurer serverCodecConfigurer) {

        this.viewResolvers = viewResolversProvider.getIfAvailable(Collections::emptyList);
        this.serverCodecConfigurer = serverCodecConfigurer;
    }

    @Bean
    @Order(Ordered.HIGHEST_PRECEDENCE)
    public SentinelGatewayBlockExceptionHandler sentinelGatewayBlockExceptionHandler() {

        // Register the block exception handler for Spring Cloud Gateway.
        return new SentinelGatewayBlockExceptionHandler(viewResolvers, serverCodecConfigurer);
    }

    @Bean
    @Order(Ordered.HIGHEST_PRECEDENCE)
    public GlobalFilter sentinelGatewayFilter() {

        return new SentinelGatewayFilter();
    }
}
  1. 当触发限流
    在这里插入图片描述

环境配置

测试环境

启动

后台启动 (窗口可以随时关闭,不影响应用)

nohup java -Dserver.port=8739 -Dcsp.sentinel.dashboard.server=你的ip:8739 -Dsentinel.dashboard.auth.username=sentinel -Dsentinel.dashboard.auth.password=sentinel -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.8.jar >sentinel.log 2>&1 &

直接启动(窗口不可关闭,关闭即服务停止)

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

登陆控制台:
你的ip:8739 sentinel/sentinel

规则nacos持久化

由于sentinel的规则存在内存中,如果不将sentinel配置的规则持久化,每次重启项目规则都会消失
测试环境
登陆nacos:你的nacos ip:8848

  1. 新增一个配置
    [图片]

  2. 配置微服务规则
    [图片]

api分组初始化

初始化api分组方式

如果需要新增api分组,在下方新增对象,注入 apiDefinitions 即可

@Configuration
public class GatewayConfiguration {
    private final List<ViewResolver> viewResolvers;
    private final ServerCodecConfigurer serverCodecConfigurer;

    public GatewayConfiguration(ObjectProvider<List<ViewResolver>> viewResolversProvider,
                                ServerCodecConfigurer serverCodecConfigurer) {
        this.viewResolvers = viewResolversProvider.getIfAvailable(Collections::emptyList);
        this.serverCodecConfigurer = serverCodecConfigurer;
    }

    @Bean
    @Order(-1)
    public SentinelGatewayBlockExceptionHandler sentinelGatewayBlockExceptionHandler() {
        // Register the block exception handler for Spring Cloud Gateway.
        return new SentinelGatewayBlockExceptionHandler(viewResolvers, serverCodecConfigurer);
    }

    @Bean
    public GlobalFilter sentinelGatewayFilter() {
        return new SentinelGatewayFilter();
    }

    @PostConstruct
    void init() {
        // 初始化api分组信息 此处注入会有问题 即api分组持久化 后面在调研,先采用针对服务限流
//        initApiDefinitions();
    }

    // sentinel 初始化api分组信息
    private void initApiDefinitions() {
        Set<ApiDefinition> apiDefinitions = new HashSet<ApiDefinition>() {
            {
                //setApiName 设置API名称
                add(new ApiDefinition().setApiName("relation")
                        .setPredicateItems(new HashSet<ApiPredicateItem>() {
                            {
                                add(new ApiPathPredicateItem()
                                        //SentinelGatewayConstants.URL_MATCH_STRATEGY_EXACT 精确
                                        //SentinelGatewayConstants.URL_MATCH_STRATEGY_PREFIX 前缀
                                        //SentinelGatewayConstants.URL_MATCH_STRATEGY_REGEX 正则
                                        .setMatchStrategy(SentinelGatewayConstants.URL_MATCH_STRATEGY_PREFIX)
                                        //路由
                                        .setPattern("/app-api/user/relation/*"));
                            }
                        }));
            }
        };
        GatewayApiDefinitionManager.loadApiDefinitions(apiDefinitions);
    }

}

遗留问题 ?初始化api分组,会导致服务无法注册到sentinel dashboard

sentinel网关限流提供api分组(可以理解为自定义的一些接口集合),但在代码中初始化api分组,会导致服务无法注册到sentinel dashboard 。问题无法解决。见:https://github.com/alibaba/Sentinel/issues/3017

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

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

相关文章

经典算法题总结:数组常用技巧(双指针,二分查找和位运算)篇

双指针 在处理数组和链表相关问题时&#xff0c;双指针技巧是经常用到的&#xff0c;双指针技巧主要分为两类&#xff1a;左右指针和快慢指针。所谓左右指针&#xff0c;就是两个指针相向而行或者相背而行&#xff1b;而所谓快慢指针&#xff0c;就是两个指针同向而行&#xf…

夏季养宠难题,浮毛异味难消?别担心,一篇文章帮你解决烦恼

新手铲屎官们最近是不是饱受猫咪浮毛异味困扰&#xff1f;正值夏季&#xff0c;一些猫咪还处于换毛季&#xff0c;疯狂的掉毛加难耐的高温&#xff0c;稍不注意清理&#xff0c;家里就被浮毛异味双重攻击。别担心&#xff0c;那是因为你们少了宠物空气净化器这个好帮手。作为宠…

【机器学习】混淆矩阵(Confusion Matrix)

一、混淆矩阵 True Negative (TN)&#xff1a; 真负类&#xff0c;样本的真实类别是负类&#xff0c;并且模型将其识别为负类&#xff0c;cm[0][0]。False Positive (FP)&#xff1a; 假正类&#xff0c;样本的真实类别是负类&#xff0c;但是模型将其识别为正类&#xff0c;cm…

见合八方发布国产1060nm保偏SOA

天津见合八方光电科技有限公司(以下简称“见合八方”)日前发布新款1060nm保偏半导体光放大SOA蝶形器件。该半导体光放大器SOA具有高饱和输出功率、宽光谱、保偏等特性。主要用于星载空间光通信、空间激光探测、OCT医疗成像等领域。 产品介绍 我司1060nm蝶形器件&#xff0c;具有…

期货的种类之什么是股指期货的类型?

期货可以分为商品期权和股指期货&#xff0c;商品期货的标的物主要是现货&#xff0c;而股指期货的标的物主要是指数。简单来说&#xff0c;就是一种基于股票指数未来的价格变动来进行交易的金融衍生品。它的全称是“股票价格指数期货”&#xff0c;英文简称SPIF。 股指期货怎…

P3957 [NOIP2017 普及组] 跳房子(青春版代码)

[NOIP2017 普及组] 跳房子 - 洛谷 核心思路 单调队列优化dp 顺序 先让合法答案入队 再删去越界答案 判断非空 后 求 答案 一个答案合法 当且仅当 l < dis < r 记 调了n久&#xff0c;找题解调。 竟发现几乎没有用 STL deque 的。 故写了个青春版题解。 AC 代码…

思科RIP动态路由配置3

#路由协议实现# #任务三RIP动态路由配置3# 路由信息协议&#xff08;Routing Information Protocol&#xff0c;RIP&#xff09;是应用较早、使用较普遍的动态路由协议&#xff0c;也是内部网关协议&#xff0c;由于RIP以跳数作为衡量路径的开销&#xff0c;且规定最大跳数为…

zip压缩包的格式不标准导致C++开源unzip.cpp解压失败问题的排查

目录 1、问题描述 2、初步排查 3、查看错误码512对应的含义 4、直接将解压zip包的函数拷贝过来,并将无法解压的zip取来,直接编写测试代码去调试解压过程,最终定位问题 4.1、调试开源unzip.cpp源码的准备工作 4.2、刚解压zip包中最顶层的文件夹就失败了 4.3、是不是zi…

Java如何实现拼音排序?

在我们国家&#xff0c;按拼音进行排序是很常见的需求&#xff0c;比如姓名&#xff0c;那如何按拼音进行排序呢&#xff1f; 假如我们有以下List&#xff1a; List<String> list new ArrayList<>(); list.add("周瑜"); list.add("大都督")…

Redis中缓存穿透、缓存击穿、缓存雪崩的详解

如何理解Redis缓存的穿透、击穿、雪崩问题&#xff1a; 缓存穿透 是指缓存中和数据库中都没有数据&#xff0c;而用户不断访问&#xff0c;导致这个不存在的数据每次请求都要到存储层去查询&#xff0c;这样失去了意义。 缓存穿透的解决方案有哪些? 缓存null值布隆过滤增强…

3D靓图!CEEMDAN-Kmeans-VMD-CNN-BiLSTM-Attention双重分解卷积双向长短期注意力多元时序预测

3D靓图&#xff01;CEEMDAN-Kmeans-VMD-CNN-BiLSTM-Attention双重分解卷积双向长短期注意力多元时序预测 目录 3D靓图&#xff01;CEEMDAN-Kmeans-VMD-CNN-BiLSTM-Attention双重分解卷积双向长短期注意力多元时序预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Ma…

【问题解决】git status中文文件名乱码

问题复现 解决办法 在git bash中直接执行如下命令 git config --global core.quotepath false原因 通过 git config --help 可以查看到以下内容&#xff1a; core.quotePath Commands that output paths (e.g. ls-files, diff), will quote “unusual” characters in the p…

vue3 更改 element-plus el-collapse 折叠面板样式

官网提供 展示效果 样式 更改箭头指向 :deep(.el-collapse-item__arrow){ transform: rotate(-270deg); } :deep(.el-collapse-item__header.is-active .el-collapse-item__arrow) { transform: rotate(270deg); } 二 &#xff1a; 或者隐藏右侧箭头 :deep(.el-collapse-i…

javase入门

最近在学习大数据,学到flume拦截器的时候发现自定义拦截器需要使用java编写,现在开始学一些java入门的东西. 一. java相关组成 path环境变量: 环境变量用于记住程序路径,方便在命令行窗口任意目录启动程序. 二 java中的变量 变量要先定义在使用. int age 15 定义变量要定义其…

8.6.数据库基础技术-数据库的控制

并非控制 事务&#xff1a;由一系列DML操作组成&#xff0c;这些操作&#xff0c;要么全做&#xff0c;要么全不做&#xff0c;它从第一个DML操作开始&#xff0c;rollback、commit或者DDL结束&#xff0c;拥有以下四种特性&#xff0c;详解如下&#xff1a; &#xff08;操作)…

OrangePi AIpro学习5 —— 模型推理程序开发

目录 一、准备工作 1.1 代码裁剪 1.2 测试运行 二、程序讲解 2.1 初始化 2.2 处理模型图片输入 2.3 推理函数 2.4 对输出结果进行处理 前言 本节主要讲解昇腾芯片&#xff0c;例程中使用resnet50推理图像类别的程序。本节讲解的程序&#xff0c;它的环境搭建与使用方法…

考PMP需要多久?一篇文章告诉你如何省心备考PMP

PMP备考需要半年时间吗&#xff1f;....是要满分拿下PMP吗&#xff1f; PMP备考不用半年时间&#xff0c;如果你想的话&#xff0c;可以一个多月就成功上岸哦。如果你不想的话&#xff0c;也可以半年。 其实大家认真去学习的&#xff0c;时间根本不需要那么长的时间&#xff0…

全新Bty分销系统源码v1.0/宝塔分销系统开源版源码/独立后台(附安装教程)

源码简介&#xff1a; 全新Bty分销系统源码v1.0&#xff0c;它作为宝塔分销系统开源版源码&#xff0c;功能强大&#xff0c;它内置了易支付功能&#xff0c;方便多了&#xff01; 这个Bty分销系统开源版&#xff0c;宝塔分销系统开源版。它基于宝塔开放的API底层控制器&…

LoadRunner12添加mysql数据连接驱动

参考链接 lr进行mysql参数化 https://jingyan.baidu.com/article/6d704a13407c4128db51ca2d.html 下载mysql数据库驱动教程 Loadrunner12使用MYSQL5.0参数化数据遇到的问题_loadrunner12 参数化没有效果-CSDN博客 mysql数据驱动下载链接 MySQL :: Download MySQL Connect…

centos 下如何安装openjdk21

文章目录 前言一、下载OpenJDK二、上传OpenJdk三、解压四、编辑环境变量五、重新加载一下配置六、验证是否安装成功 前言 本文章是自己将openjdk下载好&#xff01;手动上传解压的方式进行安装&#xff01; 一、下载OpenJDK OpenJdk官网&#xff1a;点击访问 二、上传OpenJ…