当前位置: 首页 > news >正文

Spring boot集成sentinel限流服务

Sentinel集成文档

Sentinel控制台

Sentinel本身不支持持久化,项目通过下载源码改造后,将规则配置持久化进nacos中,sentinel重启后,配置不会丢失。

架构图:

改造步骤:

接着我们就要改造Sentinel的源码。因为官网提供的Sentinel的jar是原始模式的,所以需要改造,所以我们需要拉取源码下来改造一下,然后自己编译jar包。

源码地址:https://github.com/alibaba/Sentinel

拉取下来之后,导入到IDEA中,然后我们可以看到以下目录结构。

首先修改sentinel-dashboard的pom.xml文件:

https://pic4.zhimg.com/v2-221db1fba4b3ba417c190e53b6c918f3_r.jpg

第二步,把test目录下的四个关于Nacos关联的类,移到rule目录下。

接着NacosConfig添加Nacos的地址配置。

最关键的是FlowControllerV1的改造,这是规则配置的增删改查的一些接口。

把移动到rule目录下的两个服务,添加到FlowControllerV1类中。

@Autowired

@Qualifier("flowRuleNacosProvider")

private DynamicRuleProvider<List<FlowRuleEntity>> ruleProvider;

@Autowired

@Qualifier("flowRuleNacosPublisher")

private DynamicRulePublisher<List<FlowRuleEntity>> rulePublisher;

添加私有方法publishRules(),用于推送配置:

private void publishRules(/*@NonNull*/ String app) throws Exception {

    List<FlowRuleEntity> rules = repository.findAllByApp(app);

    rulePublisher.publish(app, rules);

}

修改apiQueryMachineRules()方法。

修改apiAddFlowRule()方法。

修改apiUpdateFlowRule()方法。

修改apiDeleteFlowRule()方法。

Sentinel控制台的项目就改造完成了,用于生产环境就编译成jar包运行,如果是学习可以直接在IDEA运行。

附件包含已经改造好的包,直接修改配置文件中nacos的配置即可使用。

客户端工程(fssc或者console)

引入pom

<!--sentinel nacos-->

        <dependency>

            <groupId>com.alibaba.csp</groupId>

            <artifactId>sentinel-datasource-nacos</artifactId>

            <version>1.8.5</version>

        </dependency>

        <!--sentinel-->

        <dependency>

            <groupId>com.alibaba.cloud</groupId>

            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>

            <version>2021.1</version>

        </dependency>

添加配置

spring:

  cloud:

    sentinel:

      enabled: true # 是否开启。默认为 true 开启

      eager: true # 是否饥饿加载。默认为 false 关闭

      transport:

        #配置sentinel地址,端口

        dashboard: 127.0.0.1:8080   #这里是sentinel控制台地址

        #客户端IP(sentinel dashboard进行实时监控的主机ip地址)

        # 默认端口8719端口假如被占用会自动从8719开始依次+1扫描,直到找到未被占用的端口

        port: 8725

#        client-ip: 192.168.30.200   #这里是我windows地址

      datasource:

        flow:

          nacos:

            server-addr: ${spring.cloud.nacos.discovery.server-addr}

            namespace: sentinel_rule

            dataId: cai-demo-flow-rules

            groupId: SENTINEL_GROUP

            # 规则类型,取值见:

            # org.springframework.cloud.alibaba.sentinel.datasource.RuleType

            rule-type: flow

            data-type: json

添加注解配置类

添加统一异常处理

至此,单机模式集成完成

集群改造

集群只需要修改客户端即可:                   

添加集群pom:

<dependency>

            <groupId>com.alibaba.csp</groupId>

            <artifactId>sentinel-cluster-client-default</artifactId>

            <version>1.8.5</version>

        </dependency>

        <dependency>

            <groupId>com.alibaba.csp</groupId>

            <artifactId>sentinel-cluster-server-default</artifactId>

            <version>1.8.5</version>

        </dependency>

添加InitFunc实现类(在sentinel源码demo可以找到)

继续添加实体类和常量类:

在resource中添加sentinel.properties配置文件(主要解决DemoClusterInitFunc类中无法读取配置文件的问题)

继续添加SPI文件

至此集群改造完成

相关文章:

  • react typescript @别名的使用
  • 【面经】讲一下线程池的参数和运行原理
  • Flutter IOS 前后台切换主题自动变化的问题
  • 鸿蒙列表,类似于安卓的RecyclerView
  • 虚拟机Linux-Centos系统网络配置常用命令+Docker 的常用命令
  • 2023年11月编程语言流行度排名
  • 写论文中的心得记录
  • AVL树 c语言版本 插入部分
  • 01-基于IDEA,Spring官网,阿里云官网,手动四种方式创建SpringBoot工程
  • 5分钟Python安装实战(MAC版本)
  • MapReduce:大数据处理的范式
  • Naocs配置中心配置映射List、Map、Map嵌套List等方式
  • Chatgpt人工智能对话源码系统分享 带完整搭建教程
  • lua脚本实现redis分布式锁(脚本解析)
  • vscode + cmake + opencv example
  • 收藏网友的 源程序下载网
  • 【Leetcode】104. 二叉树的最大深度
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • EventListener原理
  • Git同步原始仓库到Fork仓库中
  • golang中接口赋值与方法集
  • Java 最常见的 200+ 面试题:面试必备
  • JavaScript 奇技淫巧
  • Java多线程(4):使用线程池执行定时任务
  • java概述
  • java小心机(3)| 浅析finalize()
  • js
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 一个SAP顾问在美国的这些年
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 译米田引理
  • 【干货分享】dos命令大全
  • zabbix3.2监控linux磁盘IO
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • #Z0458. 树的中心2
  • (+4)2.2UML建模图
  • (13)Hive调优——动态分区导致的小文件问题
  • (52)只出现一次的数字III
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (Java数据结构)ArrayList
  • (Matlab)使用竞争神经网络实现数据聚类
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)C#调用WebService 基础
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器