用最新的spriing cloud alibaba集成sentinel 出现了各种各样的问题,归结起来就是版本不对,但是网上找的博客没有看到最新版的,怎么都对不上。所以做一个记录,或许看到的时候已经又更新了,不重要,只要找对了方法。哪个版本都能对应上了
创建步骤:
idea + maven 3.6.3 + jdk 1.8
1. 首先创建一个maven项目,也可以创建Spring Initializr. 因为不光是搭建一个测试环境,方便后期使用,我直接按照我做正式项目的搭建方式来弄了
下图是创建完成的结构,因为spring cloud alibaba,各个项目最好统一管理,所以我把src目录删除,只作为父项目统一管理
2. 创建sentinel 的项目,作为子项目,也是maven项目,当然也可以选择Spring Initializr
3.接下来就需要给项目添加依赖了
父pom文件:spring-cloud-project的pom,首先是加入我们需要的版本,这个就是最坑的事情了,如果没有对上版本,后面都没法运行。如何指定呢?
并不是所有的版本都有对应,cloud , boot,alibaba都是单独的组件,想要合并,是需要找官网给出来的确定版本
https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
因为我这儿是spring cloud alibaba的环境,所以直接再alibaba官网找毕业版本
直接使用最新的版本 2.2.7RELEASE cloud 及 boot也对应一下
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>spring-cloud-project</artifactId>
<!-- pom方式,只让子继承 -->
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>sentinel-project</module>
</modules>
<!-- 自定义版本-->
<properties>
<!--这个名称最好不要改,后面的子pom会用这种格式去找,改了就找不到了,非要改子pom引用对应依赖就必须要指定版本-->
<spring-cloud.version>Hoxton.SR12</spring-cloud.version>
<spring-boot.version>2.3.12.RELEASE</spring-boot.version>
<spring-cloud-alibaba.version>2.2.7.RELEASE</spring-cloud-alibaba.version>
</properties>
<!--不添加依赖,让子pom继承使用-->
<dependencyManagement>
<dependencies>
<!-- spring-boot 相关依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- spring-cloud 相关依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- spring-cloud-alibaba 相关依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- spring-boot-starter-web 相关依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${spring-boot.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<target>1.8</target>
<source>1.8</source>
<encoding>UTF-8</encoding>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
</project>
以上是完整的父pom内容
4. 子项目pom及yml配置
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>spring-cloud-project</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>sentinel-project</artifactId>
<dependencies>
<!--spring boot web-->
<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>
</dependency>
</dependencies>
</project>
server:
port: 8877 #自定义端口
spring:
cloud:
sentinel:
transport:
dashboard: localhost:8858 #sentinel地址
5. 创建启动类及测试用controller
至此配置完成
补充一个:最开始我是选择spring boot 2.6.2,启动会报错
(所以不要单纯的去追求最新版本,只能去找官网给出的毕业版本)
原因是因为spring boot 2.6以后不允许循环依赖。只需要在yml里面加一个配置就好
完整yml:
server:
port: 8877 #自定义端口
spring:
cloud:
sentinel:
transport:
dashboard: localhost:8858 #sentinel地址
main:
allow-circular-references: true #2.6.0后默认不允许 允许循环依赖
再运行,访问都没啥问题了
版本问题也是比较恶心,官网和博客各个地方说明的东西也不一定能应用上,一方面做一个记录,另一方面也是各位如果遇到这个问题,希望这篇文章能够有所帮助