springBoot整合 sentinel限流 nacos動態規則配置
阿新 • • 發佈:2020-12-09
版本說明:(被版本坑慘了)
springboot:2.1.3.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專案
配置檔案application.yml
#埠號 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
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/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>com.example</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> <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> <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> </plugin> </plugins> </build> </project>
配置完這些之後就可以從nacos拉去規則配置了
進入sentinel可以看到 nacos中德規則已經展現在頁面上
但是呢 限制在nacos修改規則 sentinel 控制檯可以更新,而在控制檯修改了之後 nacos並不會同步,如果我們重啟springBoot專案後規則還是會變成nacos上面的值。
所以我們要對sentinel-dashboard的原始碼進行修改。
首先下載sentinel原始碼https://github.com/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
5.
以上就大功告成了。