springBoot整合sentinel限流nacos动态规则配置版本说明:(被版本坑惨了)
有⼀个图可以参考
springboot:2.1.3.RELEASE 后来改成2.1.2.RELEASE 了但应该都可以
nacos:本地安装的1.4.0
sentinel:1.7.1
对应的包也引⼊⽀持sentinel1.7.1的
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
⾸先讲⼀些遇到的坑点吧。
刚开始引⼊的这个包就本地连接sentinel还是可以成功的但后⾯连接nacos就会报错
仔细观察可以看到引⼊该包下⾯的sentinel相关的版本是1.5.2 所以出现的问题可能和版本有关
<!--sentinel提供的⼀个微服务开发的起步依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
<version>0.9.0.RELEASE</version>
</dependency>
⾔归正传开始整合
1.⾸先创建springBoot项⽬
配置⽂件l
#端⼝号
server:
port: 8089
#项⽬名称
spring:
application:
name: sentinel-demo
cloud:
#配置sentinel客户端,注册该项⽬进控制台⾥
sentinel:
eager: true
transport:
#配置Sentin dashboard地址
dashboard: localhost:8080
# 默认8719端⼝,假如被占⽤了会⾃动从8719端⼝+1进⾏扫描,直到到未被占⽤的端⼝
port: 8719
#nacos 从nacos拉取数据需要配置
datasource:
#名称随意
flow:
nacos:
server-addr: localhost:8848
dataId: ${spring.application.name}-flow-rules
groupId: SENTINEL_GROUP
rule-type: flow
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance" xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath/><!-- lookup parent from repository -->
</parent>
<groupId&le</groupId>
<artifactId>springboot-sentinel-start</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-sentinel-start</name>
<description>Sentinel for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!-- springBoot包-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--sentinel的包-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
<!--使⽤ Nacos 配置规则-->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
<version>1.7.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<!--<scope>test</scope>-->
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
<exclusion>
<artifactId>spring-core</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
springframework和springboot</plugin>
</plugins>
</build>
</project>
然后启动nacos
配置完这些之后就可以从nacos拉去规则配置了
启动sentinel-dashboard
进⼊sentinel可以看到 nacos中的规则已经展现在页⾯上
但是呢
限制在nacos修改规则 sentinel 控制台可以更新,⽽在控制台修改了之后 nacos并不会同步,如果我们重启springBoot项⽬后规则还是会变成nacos上⾯的值。所以我们要对sentinel-dashboard的源码进⾏修改。
⾸先下载sentinel源码 github/alibaba/Sentinel/tree/1.7.1
然后打开sentinel-dashboard项⽬
1.⾸先将1处的nacos⽂件夹复制到2处的rule⽂件夹下⾯
2.修改FlowControllerV2中的 flowRuleDefaultProvider 改为flowRuleNacosProvider 、flowRuleDefaultPublisher改为 flowRuleNacosPublisher
3.修改 FlowServiceV1 为FlowServiceV2
4.修改sidebar.html
5.修改flow_v2.html
以上就⼤功告成了。
改完之后可以将sentinel-dashboard 打⼀个jar包
使⽤ mvn clean package 进⾏源码编译
码编译通过后在Sentinel-release/sentinel-dashboard/target 下产⽣ sentinel-dashboard.jar 的jar包
需要时启动就可以 java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -jar sentinel-dashboard.jar java -Dserver.port=8080 \ 指定端⼝号
-Dcsp.sentinel.dashboard.server=localhost:8080 \ 外部服务连接sentinel控制台地址
-jar -sentinel-dashboard.jar 启动控制台
然后访问就可以了
坑点:
当控制台重启后,在已有的规则上在添加规则会出现覆盖之前规则的情况。
原因:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论