SpringCloudAlibaba
文章目录
- SpringCloudAlibaba
- 1.版本依赖关系
- 2022.x 分支
- 2021.x 分支
- 2.2.x 分支
- 组件版本关系
- 2.基础项目构建
- 1.引入全局pom文件
- 2.创建对应的模块
- 3.SpringBootAdmin监控服务整合
- 1.cloud-admin服务搭建
- 1.导入服务端依赖
- 2.主启动类添加`@EnableAdminServer`注解启用监控
- 2.客户端配置
- 1.引入客户端和端点监控依赖
- 2.配置yml
- 3.启动测试
- 4.Nacos注册中心、配置中心整合
- 1.下载、安装
- 修改启动模式
- 创建命名空间
- 2.注册中心整合
- 1.引入pom服务注册发现依赖
- 2.yml配置
- 3.主启动类添加`@EnableDiscoveryClient`注解
- 4.启动测试
- 3.配置中心整合
- 1.引入pom依赖
- 2.yml配置
- 3.配置nacos数据库连接
- 4.配置中心创建yml文件
- 5.Gateway网关整合
- 1.添加pom依赖
- 2.配置跨域
- 3.yml路由配置
- 6.Sentinel流控整合
- 1.下载、安装
- 2.整合
- 1.引入pom依赖
- 2.yml配置
- 3.启动测试
- 7.Sleuth、Zipkin 链路追踪整合
- 1.下载、安装
- 2.整合
- 1.引入pom依赖
- 2.配置yml
- 3.启动测试
1.版本依赖关系
官方地址:https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
由于 Spring Boot 3.0,Spring Boot 2.7~2.4 和 2.4 以下版本之间变化较大,目前企业级客户老项目相关 Spring Boot 版本仍停留在 Spring Boot 2.4 以下,为了同时满足存量用户和新用户不同需求,社区以 Spring Boot 3.0 和 2.4 分别为分界线,同时维护 2022.x、2021.x、2.2.x 三个分支迭代。如果不想跨分支升级,如需使用新特性,请升级为对应分支的新版本。
2022.x 分支
适配 Spring Boot 3.0,Spring Cloud 2022.x 版本及以上的 Spring Cloud Alibaba 版本按从新到旧排列如下表(最新版本用*标记): (注意,该分支 Spring Cloud Alibaba 版本命名方式进行了调整,未来将对应 Spring Cloud 版本,前三位为 Spring Cloud 版本,最后一位为扩展版本,比如适配 Spring Cloud 2022.0.0 版本对应的 Spring Cloud Alibaba 第一个版本为:2022.0.0.0,第个二版本为:2022.0.0.1,依此类推)
Spring Cloud Alibaba Version | Spring Cloud Version | Spring Boot Version |
---|---|---|
2022.0.0.0* | Spring Cloud 2022.0.0 | 3.0.2 |
2022.0.0.0-RC2 | Spring Cloud 2022.0.0 | 3.0.2 |
2022.0.0.0-RC1 | Spring Cloud 2022.0.0 | 3.0.0 |
2021.x 分支
适配 Spring Boot 2.4,Spring Cloud 2021.x 版本及以上的 Spring Cloud Alibaba 版本按从新到旧排列如下表(最新版本用*标记):
Spring Cloud Alibaba Version | Spring Cloud Version | Spring Boot Version |
---|---|---|
2021.0.5.0* | Spring Cloud 2021.0.5 | 2.6.13 |
2021.0.4.0 | Spring Cloud 2021.0.4 | 2.6.11 |
2021.0.1.0 | Spring Cloud 2021.0.1 | 2.6.3 |
2021.1 | Spring Cloud 2020.0.1 | 2.4.2 |
2.2.x 分支
适配 Spring Boot 为 2.4,Spring Cloud Hoxton 版本及以下的 Spring Cloud Alibaba 版本按从新到旧排列如下表(最新版本用*标记):
Spring Cloud Alibaba Version | Spring Cloud Version | Spring Boot Version |
---|---|---|
2.2.10-RC1* | Spring Cloud Hoxton.SR12 | 2.3.12.RELEASE |
2.2.9.RELEASE | Spring Cloud Hoxton.SR12 | 2.3.12.RELEASE |
2.2.8.RELEASE | Spring Cloud Hoxton.SR12 | 2.3.12.RELEASE |
2.2.7.RELEASE | Spring Cloud Hoxton.SR12 | 2.3.12.RELEASE |
2.2.6.RELEASE | Spring Cloud Hoxton.SR9 | 2.3.2.RELEASE |
2.2.1.RELEASE | Spring Cloud Hoxton.SR3 | 2.2.5.RELEASE |
2.2.0.RELEASE | Spring Cloud Hoxton.RELEASE | 2.2.X.RELEASE |
2.1.4.RELEASE | Spring Cloud Greenwich.SR6 | 2.1.13.RELEASE |
2.1.2.RELEASE | Spring Cloud Greenwich | 2.1.X.RELEASE |
2.0.4.RELEASE(停止维护,建议升级) | Spring Cloud Finchley | 2.0.X.RELEASE |
1.5.1.RELEASE(停止维护,建议升级) | Spring Cloud Edgware | 1.5.X.RELEASE |
组件版本关系
每个 Spring Cloud Alibaba 版本及其自身所适配的各组件对应版本如下表所示(注意,Spring Cloud Dubbo 从 2021.0.1.0 起已被移除出主干,不再随主干演进):
Spring Cloud Alibaba Version | Sentinel Version | Nacos Version | RocketMQ Version | Dubbo Version | Seata Version |
---|---|---|---|---|---|
2022.0.0.0 | 1.8.6 | 2.2.1 | 4.9.4 | ~ | 1.7.0 |
2022.0.0.0-RC2 | 1.8.6 | 2.2.1 | 4.9.4 | ~ | 1.7.0-native-rc2 |
2021.0.5.0 | 1.8.6 | 2.2.0 | 4.9.4 | ~ | 1.6.1 |
2.2.10-RC1 | 1.8.6 | 2.2.0 | 4.9.4 | ~ | 1.6.1 |
2022.0.0.0-RC1 | 1.8.6 | 2.2.1-RC | 4.9.4 | ~ | 1.6.1 |
2.2.9.RELEASE | 1.8.5 | 2.1.0 | 4.9.4 | ~ | 1.5.2 |
2021.0.4.0 | 1.8.5 | 2.0.4 | 4.9.4 | ~ | 1.5.2 |
2.2.8.RELEASE | 1.8.4 | 2.1.0 | 4.9.3 | ~ | 1.5.1 |
2021.0.1.0 | 1.8.3 | 1.4.2 | 4.9.2 | ~ | 1.4.2 |
2.2.7.RELEASE | 1.8.1 | 2.0.3 | 4.6.1 | 2.7.13 | 1.3.0 |
2.2.6.RELEASE | 1.8.1 | 1.4.2 | 4.4.0 | 2.7.8 | 1.3.0 |
2021.1 or 2.2.5.RELEASE or 2.1.4.RELEASE or 2.0.4.RELEASE | 1.8.0 | 1.4.1 | 4.4.0 | 2.7.8 | 1.3.0 |
2.2.3.RELEASE or 2.1.3.RELEASE or 2.0.3.RELEASE | 1.8.0 | 1.3.3 | 4.4.0 | 2.7.8 | 1.3.0 |
2.2.1.RELEASE or 2.1.2.RELEASE or 2.0.2.RELEASE | 1.7.1 | 1.2.1 | 4.4.0 | 2.7.6 | 1.2.0 |
2.2.0.RELEASE | 1.7.1 | 1.1.4 | 4.4.0 | 2.7.4.1 | 1.0.0 |
2.1.1.RELEASE or 2.0.1.RELEASE or 1.5.1.RELEASE | 1.7.0 | 1.1.4 | 4.4.0 | 2.7.3 | 0.9.0 |
2.1.0.RELEASE or 2.0.0.RELEASE or 1.5.0.RELEASE | 1.6.3 | 1.1.1 | 4.4.0 | 2.7.3 | 0.7.1 |
2.基础项目构建
1.引入全局pom文件
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.11</version><relativePath/></parent><groupId>com.li</groupId><artifactId>spring-cloud-alibaba-parent</artifactId><packaging>pom</packaging><version>1.0-SNAPSHOT</version><modules><module>cloud-common</module><module>cloud-picture</module><module>cloud-login</module><module>cloud-gateway</module><module>cloud-data-clean</module><module>cloud-data-production</module><module>cloud-admin</module><module>cloud-auth</module></modules><dependencies><!--由于2021版本去除了-bootstrap.yml支持、所以我们要加上去--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.6.11</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>2021.0.4</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2021.0.4.0</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><!--maven插件--><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><!-- 取消查找本项目下的Main方法:为了解决Unable to find main class的问题 --><mainClass>none</mainClass><!-- 为了解决依赖模块找不到此模块中的类或属性 --><classifier>execute</classifier> </configuration><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build>
2.创建对应的模块
目前创建了这些,测试用
<module>cloud-common</module> <!--公共模块--><module>cloud-picture</module><!--图片模块--><module>cloud-login</module><!--登录模块--><module>cloud-gateway</module><!--网关模块--><module>cloud-data-clean</module><module>cloud-data-production</module><module>cloud-admin</module> <!--监控模块--><module>cloud-auth</module><!--认证模块-->
创建启动类和yml配置文件,微服务项目yml文件名建议使用bootstrap.yml
,加载优先级大于application
配置各个模块yml
server:port: 10000
spring:profiles:active: devapplication:name: cloud-admin#信息断点
info:tags:environment: cloud-admin
#日志收集
logging:file:name: ./log/admin-application.logpattern:file: '%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr(${PID}){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n%wEx'
引入各模块基础公共依赖
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${org.projectlombok.version}</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>${fastjson.version}</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency><!--开启自定义 配置 需要提示功能--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
3.SpringBootAdmin监控服务整合
1.cloud-admin服务搭建
1.导入服务端依赖
<dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-server</artifactId></dependency>
2.主启动类添加@EnableAdminServer
注解启用监控
2.客户端配置
1.引入客户端和端点监控依赖
<dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-client</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>
2.配置yml
spring:boot:admin:client:# Admin Server的URL,若是要注册到多个admin服务端上,用逗号分隔就可以# url: http://localhost:8080,http://localhost:8081url: http://127.0.0.1:10000instance:# 使用IP的方式prefer-ip: true#按实例显示标签metadata:tags:environment: cloud-authmanagement:endpoint:health:show-details: always # 显示health指标的详细信息,否则只会显示 status#暴露所有端点,生产环境不建议endpoints:web:exposure:include: ["*"]
3.启动测试
访问服务端:http://localhost:10000/applications/cloud-admin
4.Nacos注册中心、配置中心整合
1.下载、安装
官方文档及下载地址:https://nacos.io/download/nacos-server/?spm=5238cd80.2ef5001f.0.0.3f613b7ctaHA8j
下载完后解压
修改启动模式
如果直接启动则默认是集群方式启动会报错,需进入bin
下startup.cmd
配置文件修改mode
为standalone
,单结点启动
保存后双击启动即可
访问 http://localhost:8848/nacos/ ,用户名密码默认nacos,默认端口号8848
创建命名空间
点击创建即可
2.注册中心整合
1.引入pom服务注册发现依赖
对需要注册的服务模块引入
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>
2.yml配置
spring:cloud:nacos:discovery:# 服务注册地址server-addr: 127.0.0.1:8848#命名空间id,不配置默认为public# namespace: 5bd397d3-505f-44f5-95fa-a62e631b9b41
3.主启动类添加@EnableDiscoveryClient
注解
4.启动测试
如果配置了命名空间则需要切换对应的空间
3.配置中心整合
1.引入pom依赖
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency>
2.yml配置
spring:cloud:nacos:config:# 配置中心地址server-addr: 127.0.0.1:8848# 配置文件格式file-extension: yml# 共享配置shared-configs:- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}#命名空间配置namespace: 5bd397d3-505f-44f5-95fa-a62e631b9b41#组配置#group: dev
3.配置nacos数据库连接
进入nacos目录下conf
下的application.properties
文件进行编辑
#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
spring.datasource.platform=mysql### Count of DB:
db.num=1### Connect URL of DB:db.url.0=jdbc:mysql://xxx:3306/xxx?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTCdb.user.0=rootdb.password.0=xxx### Connection pool configuration: hikariCP
db.pool.config.connectionTimeout=30000
db.pool.config.validationTimeout=10000
db.pool.config.maximumPoolSize=20
db.pool.config.minimumIdle=2
数据库执行该sql文件,重启
4.配置中心创建yml文件
注意:
1.文件名必须带.yml
2.组配置可以不给,默认default_group,如果给了则需要配置group
3.后缀名根据spring的profiles的active切换
例如:有配置中心有四个文件配置,本地dev和prod配置相同
cloud-admin-dev.yml 组配置dev 配置 test:1
cloud-admin-prod.yml 组配置dev 配置 test:2
cloud-admin-prod.yml 组配置prod 配置 test:3
cloud-admin-dev.yml 组配置prod 配置 test:4
测试结果:
本地yml组配置 | 本地spring.profiles.active配置 | 获取test结果 |
---|---|---|
dev | dev | 1 |
dev | prod | 2 |
prod | prod | 3 |
prod | dev | 4 |
5.Gateway网关整合
1.添加pom依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency>
注意:由于网关已经包含了spring-boot-starter-web依赖,如果重复引入需排除掉
2.配置跨域
@Configuration
public class ApiCorsConfiguration {@Beanpublic CorsWebFilter corsWebFilter() {UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();CorsConfiguration corsConfiguration = new CorsConfiguration();//1、配置跨域corsConfiguration.addAllowedHeader("*");corsConfiguration.addAllowedMethod("*");corsConfiguration.addAllowedOrigin("*");corsConfiguration.setAllowCredentials(true);source.registerCorsConfiguration("/**", corsConfiguration);return new CorsWebFilter(source);}
}
3.yml路由配置
spring:cloud:gateway:#路由配置:转发规则routes:# id:唯一标识。默认是一个UUID# uri:转发路径# predicates:条件,用于请求网关路径的匹配规则- id: test_routeuri: https://www.baidu.compredicates:- Query=url,baidu- id: picture_routeuri: lb://cloud-picturepredicates:- Path=/api/picture/**,/hellofilters:- RewritePath=/api/(?<segment>.*),/$\{segment}- id: login_routeuri: lb://cloud-loginpredicates:- Path=/api/login/**filters:- RewritePath=/api/(?<segment>.*),/$\{segment}- id: gateway-routeuri: lb://cloud-gatewaypredicates:- Path=/api/gateway/**filters:- RewritePath=/api/(?<segment>.*),/$\{segment}- id: admin-routeuri: lb://cloud-adminpredicates:- Path=/api/admin/**filters:- RewritePath=/api/(?<segment>.*),/$\{segment}- id: production-routeuri: lb://cloud-productionpredicates:- Path=/api/production/**filters:- RewritePath=/api/(?<segment>.*),/$\{segment}
详细配置可参考另一篇文章: SpringCloudNetflix - Feign 调用、Hystix 熔断和 Gateway 网关
https://blog.csdn.net/weixin_54158370/article/details/125165136
6.Sentinel流控整合
1.下载、安装
下载地址:https://github.com/alibaba/Sentinel/tags
本地使用版本1.8.5
下载后通过java -jar启动,输入http://localhost:8080/访问,默认账号密码sentinel
2.整合
1.引入pom依赖
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency>
2.yml配置
spring: cloud:#监控限流sentinel:# 是否初始化时就全部加载 默认关闭,如果关闭启动时候可能会看不到服务eager: truetransport:#通信端口 假如被占用了会自动从8719开始依次+1扫描。直至找到未被占用的端口,默认8719port: 8719 #客户端地址,默认8080dashboard: 127.0.0.1:8080
3.启动测试
7.Sleuth、Zipkin 链路追踪整合
1.下载、安装
下载地址:https://repo1.maven.org/maven2/io/zipkin/zipkin-server/
1.安装启动zipkin java -jar zipkin.jar
2.访问zipkin web界面。http://localhost:9411/
2.整合
1.引入pom依赖
<!--sleuth-zipkin--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zipkin</artifactId></dependency>
(zipkin中已经依赖了sleuth,所以可以不导)
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-sleuth</artifactId></dependency>
2.配置yml
spring:sleuth:web:client:# 开启采集链路enabled: truesampler:# 默认采集是 0.1(百分之十),生产环境采用默认,测试环境可以修改为1.0probability: 1.0# zipkin服务所在地址zipkin:base-url: http://127.0.0.1:9411/discovery-client-enabled: false #让nacos把它当成一个URL,而不要当做服务名