SpringCloud-Alibaba:
- 阿里云为分布式应用开发提供了一站式解决方案。它包含了开发分布式应用程序所需的所有组件,使您可以轻松地使用springcloud开发应用程序。
- 有了阿里云,你只需要添加一些注解和少量的配置,就可以将Spring云应用连接到阿里的分布式解决方案上,用阿里中间件搭建一个分布式应用系统。
是由阿里团队开源的微服务工具集帮助我们快速构建分布式系统(微服务系统)架构,所提供的阿里巴巴解决方案,包含了开发分布式应用的组件。
一、SpringCloud-AliBaBa 提供的组件:
a. Flow control and service deqradation 服务流量控制 和 服务降级(熔断) ====> Sentinel 替换springcloud原有Hystrix组件
b. service registration and discovery 服务注册和发现组件 =====>Nacos 替换springcloudconsul 和eureka组件
c. Distributed Configuration 统一配置中心组件 =====> Nacos 事件驱动替换Bus组件实现消息总线
d. Event-driven 事件驱动利用MO RocketMQ
e. Message Bus 消息总线(异步处理)
f. Distributed Transaction 分布式事务 ------>seata
g. Dubbo RPC 集成Dubbo实现服务间通信 ======> Dubbo RPC 替换原始项目中RestTemplate openfeign
二、微服务项目实战中开发 :
只使用阿里的组件是行不通的,而是3种微服务的组件混合使用。
# springcloud etFlixSpringCloud Spring + SpringCloud alibaba
1.服务往册中心 =======> Nacos
2.服务间通信负载均衡 =======> HttpResta.RestTemplale+Ribbon(Netfix) b.openfeign(spring)
3.服务流控和服务降级 =======> Sentinel
4.服务网关组件 =======> Gateway(sprinq)
5.统一配置中心组件 =======> Nacos
三、使用SpringCloud-Alibaba
# 环境搭建:
<!--定义springcloud版本-->
<properties>
<spring.cloud.alibaba.version>2.2.1.RELEASE</spring.cloud.alibaba.version>
</properties>
<!--全局引入springcloudalibaba下载依赖地址,并不会引入依赖-->
<dependencyManagement>
<dependencies>
<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>
</dependencies>
</dependencyManagement>
1、Nacos组件:
Nacos Name Service(服务注册与发现) & Configurations Services(统一配置中心)
Nacos就是微服务架构中服务注册中心以及统一配置中心,用来替换原来的(eureka,consul)以及config组件
1.安装Nacos软件:
他和consul(服务注册中心),是一个软件
# 1.解压缩安装包到指定位置
- bin 启动nacos服务的脚本目录
- conf nacos的配置文件目录
- target nacos的启动依赖存放目录
- data nacos启动成功后保存数据的目录
# 2.启动安装服务
- linux/unix/mac启动
打开终端进入nacos的bin目录执行如下命令
./startup.sh -m standalone
- windows启动
在 cmd中
执行 startup.cmd -m standalone 或者双击startup.cmd运行文件。
2.NacosServer服务端:
# 3.访问nacos的web服务管理界面
- http://localhost:8848/nacos/
- 用户名 和 密码都是nacos
3.Nacos Client 客户端:
# 1.创建微服务项目并引入依赖:
<!--引入nacos client的依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
# 2.编写配置文件配置注册地址:
server.port=8789 #指定当前服务端口
spring.application.name=nacosclient #指定服务名称
spring.cloud.nacos.server-addr=localhost:8848 #指定nacos服务地址
spring.cloud.nacos.discovery.server-addr=${spring.cloud.nacos.server-addr} #指定注册中心地址
management.endpoints.web.exposure.include=* #暴露所有web端点
# 3.加入启动服务注册注解 [注意:][新版本之后这步可以省略不写]
@EanbleDiscoveryClient
# 4.查看nacos的服务列表
4.使用nacos作为配置中心:
1.他管理配置文件的方式是在自己所在的服务器上。形成一个版本库,因此不需要创建远程仓库进行存放配置文件。
2.nacos作为统一配置中心,在管理配置文件时同样也会存在版本控制。
1.从nacos获取配置
# 1.创建项目并引入nacons配置中心依赖
<!--引入nacos client 依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--引入配置中心依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
# 2.配置配置中心地址
#1.告诉configure server的地址。
spring.cloud.nacos.server-addr=localhost:8848 # 远程配置中心的地址
spring.cloud.nacos.config.server-addr=${spring.cloud.nacos.server-addr} # 去指定nacos地址读取配置
#2.告诉从哪个组里面进行配置的获取
spring.cloud.nacos.config.group=DEFAULT_GROUP # 读取配置的分组
#3.从这个组中获取哪个配置文件
spring.application.name=config # 指定读取文件的前缀
#4.用于告诉获取哪个环境的配置文件?
spring.profiles.active=prod # 指定读取文件的具体环境
#5.拉取这个配置哪个后缀的配置文件?
spring.cloud.nacos.config.file-extension=properties # 指定读取文件后缀
# 3.启动项目方式测试配置读取
# 5.启动客户端服务进行远程配置拉取测试
- 直接启动过程中发现无法启动直接报错
# 报错原因
- 项目中目前使用的是application.properties启动项目,使用这个配置文件在springboot项目启动过程中不会等待远程配置拉取,直接根据配置文件中内容启动,因此当需要注册中心,服务端口等信息时,远程配置还没有拉取到,所以直接报错
# 解决方案
- 应该在项目启动时先等待拉取远程配置,拉取远程配置成功之后再根据远程配置信息启动即可,为了完成上述要求springboot官方提供了一种解决方案,就是在使用统一配置中心时应该将微服务的配置文件名修改为bootstrap.(properties|yml),bootstrap.properties作为配置启动项目时,会优先拉取远程配置,远程配置拉取成功之后根据远程配置启动当前应用。
# 6.自动刷新
- 默认情况下nacos已经实现了自动配置刷新功能,如果需要刷新配置直接在控制器中加入@RefreshScope注解即可
1. Nacos 拉取配置文件细节:
1. 可以在Nacos统一配置中心服务端 Web界面中可以看到:
DataId 代表的是配置文件的名称--->spring.cloud.nacos.config.name
完整的配置文件名称=prefix(前缀) + env(环境) + file-extension (后缀)
# 刚开始搭建的项目的时候并没有创建命名空间,在真实的开发环境当中会有不同的命名空间。
第一种拉取配置文件: DataId=name+file-extension (后缀)
#1.告诉ConfigServer的地址。
spring.cloud.nacos.config.server-addr='Nacos地址'
#2.告诉从哪个命名空间获取?
spring.cloud.nacos.config.namespace='命名空间ID'
#3.告诉从哪个组进行配置获取?
spring.cloud.nacos.config.group='组名'
#4.告诉从这个组中拉取哪个配置文件?
spring.cloud.nacos.config.name='文件名不能写有后缀名:就是web界面中 DataId 的值'
#5.拉取这个配置哪个后缀的配置文件?
spring.cloud.nacos.config.file-extension=properties # 指定读取文件后缀
第二种拉取配置文件: DataId = prefix(前缀) + env(环境) + file-extension (后缀)
#1.告诉ConfigServer的地址。
spring.cloud.nacos.config.server-addr='Nacos地址'
#2.告诉从哪个命名空间获取?
spring.cloud.nacos.config.namespace='命名空间ID'
#3.告诉从哪个组进行配置获取?
spring.cloud.nacos.config.group='组名'
______________________________
比方说Nacos web界面中Data ID为:
configClient-prod.yml
__________________________________
#4.文件工作模式前的文件名
spring.cloud.nacos.config.prefix='prefix(前缀)'----> configClient
#5.获取哪种模式?
spring.cloud.nacos.config.active='env(环境)'------>prod
#6.获取哪种后缀名的配置文件?
spring.cloud.nacos.config.file-extension='file-extension (后缀)'------>yml
5、Nacos持久化:
# 1.说明
- 在0.7版本之前,在单机模式时nacos使用嵌入式数据库(derby)实现数据的存储,不方便观察数据存储的基本情况。
0.7版本增加了支持mysql数据源能力,具体的操作步骤:
1.安装数据库,版本要求:5.6.5+
2.初始化mysql数据库,数据库初始化文件:nacos-mysql.sql
3.修改conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码。
# 2.修改Nacos配置文件
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?
characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=root
db.password=root
6、nacos高可用(集群搭建)
# 集群 cluster : 统一种软件服务的多个节点对一个系统提供服务称之为这个软件服务集群 tomcat集群 mysql集群 redis集群 es集群...
集群解决问题:
1.并发访问压力
2.单节点故障问题
# 1.nacos集群架构图
- https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html
# 2.集群搭建注意事项
- 注意:
a.3个或3个以上Nacos节点才能构成集群。
b.要求虚拟机内存分配必须大于2G以上
# 3.集群规划
- node cluster:
10.15.0.3 8845 nacos01
10.15.0.3 8846 nacos02
10.15.0.3 8847 nacos03
10.15.0.3 9090 nginx
10.15.0.3 3306 mysql
# 4.搭建nacos集群
1).将nacos安装包从新解压缩
2).开启nacos mysql持久化
注意:数据库中不能存在原始数据
3).修改nacos conf目录中cluster.conf文件添加所有集群节点
10.15.0.3:8845
10.15.0.3:8846
10.15.0.3:8847
4).将修改后nacos复制三份
注意:修改为不同端口信息
5).分别启动三台机器
./startup.sh
# 5.安装Nginx
- 0.安装必要依赖
yum install -y gcc pcre-devel zlib-devel
- 1.下载Nginx
http://nginx.org/en/download.html
- 2.将Nginx上传到linux中,并解压缩
tar -zxvf nginx-1.11.1.tar.gz
- 3.查看Nginx安装目录
[root@localhost nginx-1.11.1]# ls
auto CHANGES CHANGES.ru conf configure contrib html LICENSE man README src
- 4.在Nginx安装目录中执行如下命令:(指定安装位置)
./configure --prefix=/usr/nginx
- 5.执行上述命令后,执行如下命令:
make && make install
# 6.配置nginx conf配置文件
a.加入如下配置:
upstream nacos-servers {
server 10.15.0.3:8845;
server 10.15.0.3:8846;
server 10.15.0.3:8847;
}
b.修改
location / {
proxy_pass http://nacos-servers/;
}
# 7.启动nginx进行测试即可
2、Sentinel 流量卫兵
作用是阿里巴巴开源用来对现有微服务进行保护。替换Hystrix
Hystrix: 用来保护微服务系统主要是用来解决微服雪崩----> 微服务垄断。
Sentinal:用来解决微服务雪崩---->服务熔断机制(服务降级),服务流控等。
(1)Sentinel 中的功能:
1. 资源(Resource):
他认为JAVA中一切资源,服务路径:比方为"/demo",资源是一个微服务访问路径rest接口。
2. 规则(Rule):
流量规则,熔断,负载均衡等规则。
工作的模式:
你用Sentinel 保护哪个资源,你要为这个资源匹配哪个规则?
(2)Sentinel 中的服务组件:
- sentinel提供了两个服务组件:
一个是 sentinel 用来实现微服务系统中服务熔断、降级等功能。 这点和hystrix 类似
一个是 sentinel dashboard 用来监控微服务系统中流量调用等情况 流控 熔断 降级 配置。 这点和hystrix dashboard类似
sentinel dashboard:不仅作为状态的查看更是用来配置规则的。
(3)Sentinel 工作原理:
1.sentinel dashboard 这边配置规则,规则在使用的过程中让sentinel dashboard与sentinel组件进行一个通信。
2.当sentinel dashboard中配置完规则后,sentinel dashboard会把规则通过协议传递给sentinel ,
3.当sentinel 组件中感知到配置的规则时,他就会在自己的内存中形成配置的规则。
4.日后我们的再去请求访问相应的服务,到时候会先检查规则里面有没有规则。
5.如果有的话,就应用该规则里面配置内容
所以在使用sentinel 的时候,必须sentinel 与sentinel dashboard 配合使用。
(4) Sentinel 组件的使用:
# 1. 首先第一步必须启动sentinel dashboard 软件
# 2. 在相应项目引入sentinel依赖:
<!--引入nacos client依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--引入sentinel依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
# 3.在项目的配置文件中配置配置连接到sentinel dashboard:
# (1).开启sentinel服务:
spring.cloud.sentinel.enabled=true
# (2).指定 sentinel dashboard web服务地址:
spring.cloud.sentinel.transport.dashboard=localhost:9191
# (2).指定 sentinel组件与sentinel dashboard 通信地址:
spring.cloud.sentinel.transport.port=8719(默认端口)
server.port=8789
spring.application.name=nacosclient
spring.cloud.nacos.server-addr=localhost:8848
spring.cloud.nacos.discovery.server-addr=${spring.cloud.nacos.server-addr}
spring.cloud.sentinel.enabled=true # 开启sentinel 默认开启
spring.cloud.sentinel.transport.dashboard=localhost:9191 # 连接dashboard
spring.cloud.sentinel.transport.port=8719 # 与dashboard通信的端口
# 4.启动微服项目。
# 5.查看sentinel dashboard web界面。
注意sentinel dashboard信息必须在指定服务进行资源调用后才能进行初始化看得见。
(5)系统吞吐量相关概念:
1.OPS:
Query-Per-Second: OPS 称之为系统每秒的请求数 5/s
2.RT:
Response Time: RT 每个请求响应时间 单位豪秒级
(6)sentinel 中对于系统保护的规则:
a.流控规则:流控制 ( flow contro1)
定义: 其原理是监控应用流量的 oPs 或并发线程数等指标,当达到指定的阅值时对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性.
b.降级规则熔断降级 (Deqrade Service)
定义:其原理时监控应用中资源调用请求,达到指定阔值时自动触发熔断降级。
c.热点规则:热点参数 (ParamFlow)
热点: 何为热点?热点及经常访问的数据。
定义: 其原理很多时候我们希望统计某个热点数据中访问频次最高的TOP K数据,并对其访问进行限制。
d.系统规则:系统规则(SystemFlow)
定义: 其原理sentinel 系统自适应限流从整体维度对应用入口流量进行控制。
e.授权规则 黑白名单控制规则
定义: 很多时候,我们需要根据调用来源来判断该次请求是否允许放行,这时候可以使用 Sentinel 的来源访问控制(黑白名单制》的功能。
若配置黑白名单则请求来源位于黑白名单中不通过,其余请求通过。
3、sentinel 流量控制
# 0.说明
- 流量控制(flow control),其原理是监控应用流量的 QPS 或并发线程数等指标,当达到指定的阈值时对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。
- 同一个资源可以创建多条限流规则。FlowSlot 会对该资源的所有限流规则依次遍历,直到有规则触发限流或者所有规则遍历完毕。
- 一条限流规则主要由下面几个因素组成,我们可以组合这些元素来实现不同的限流效果:
resource:资源名,即限流规则的作用对象
count: 限流阈值
grade: 限流阈值类型(QPS 或并发线程数)
limitApp: 流控针对的调用来源,若为 default 则不区分调用来源
strategy: 调用关系限流策略 ( 直接 关联 链路 )
controlBehavior: 流量控制效果(直接拒绝、Warm Up、匀速排队)
- 流量控制主要有两种统计类型,一种是统计并发线程数,另外一种则是统计 QPS
- 更多细节参见官网:https://github.com/alibaba/Sentinel/wiki/%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6
1.流控 流量控制 FlowControll
定义:其原理是监控应用流量的 QPS 或 并发线程数 指标,当达到指定的值时对流量进行控制,以避免被时的流量高峰冲跨,从而保障应用的高可用性。
QPs:每秒的请求数: 当每秒请求数超过指定阙值之后对当前请求进行限流
并发线程数: 当服务器中创建线程数超过指定阙值之后对当前请求进行限流
2.高级选项
a.流控模式:
1.直接: 当配置资源在运行过程超过当前规则配置的阙值之后对该资源请求做的处理是什么
2.关联模式: 当配置资源在运行过程中超过当前规则配置的阙值之后对他所关联资源进行请求做什么样的处理
3.链路模式(问题): 当配置资源在运行过程超过当前规则配置的阙值之后对他链路中资源请求做什么的处理
b.流控效果 注意: 只适用于oPs限流
1.快速失败:直接拒绝请求,并抛出相应异常
2.Warm Up: (冷启动 预热)
这种方式,即预热/冷启动方式。当系统长期处于低水位的情况下,当流量突然增加时,直接把系统拉升到高水位可能瞬间把系统压垮。
3.排队等待:(始终匀速通过)
这种方式,方式会严格控制请求通过的间隔时间,也即是让请求以均匀的速度通过,对应的是漏桶算法
QPS限流
# 1.配置QPS流量控制
# 2.测试
- 每秒只能最大接收1个请求,超过1个报错
线程数限流
# 1.配置线程数限流
# 2.访问测试
流控模式
# 1.说明
- 直接:标识流量控制规则到达阈值直接触发流量控制
- 关联: 当两个资源之间具有资源争抢或者依赖关系的时候,这两个资源便具有了关联。比如对数据库同一个字段的读操作和写操作存在争抢,读的速度过高会影响写得速度,写的速度过高会影响读的速度。如果放任读写操作争抢资源,则争抢本身带来的开销会降低整体的吞吐量。可使用关联限流来避免具有关联关系的资源之间过度的争抢,举例来说,read_db 和 write_db 这两个资源分别代表数据库读写,我们可以给 read_db 设置限流规则来达到写优先的目的:设置 strategy 为 RuleConstant.STRATEGY_RELATE 同时设置 refResource 为 write_db。这样当写库操作过于频繁时,读数据的请求会被限流。
- 链路限流: https://github.com/alibaba/Sentinel/wiki/%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6
流控效果
- 直接拒绝:(RuleConstant.CONTROL_BEHAVIOR_DEFAULT)方式是默认的流量控制方式,当QPS超过任意规则的阈值后,新的请求就会被立即拒绝,拒绝方式为抛出FlowException。
- Warm Up:(RuleConstant.CONTROL_BEHAVIOR_WARM_UP)方式,即预热/冷启动方式。当系统长期处于低水位的情况下,当流量突然增加时,直接把系统拉升到高水位可能瞬间把系统压垮。通过"冷启动",让通过的流量缓慢增加,在一定时间内逐渐增加到阈值上限,给冷系统一个预热的时间,避免冷系统被压垮。
更多:https://github.com/alibaba/Sentinel/wiki/%E9%99%90%E6%B5%81---%E5%86%B7%E5%90%AF%E5%8A%A8
- 匀速排队:(RuleConstant.CONTROL_BEHAVIOR_RATE_LIMITER)方式会严格控制请求通过的间隔时间,也即是让请求以均匀的速度通过,对应的是漏桶算法。 只能对请求进行排队等待
更多:https://github.com/alibaba/Sentinel/wiki/%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6-%E5%8C%80%E9%80%9F%E6%8E%92%E9%98%9F%E6%A8%A1%E5%BC%8F
4、热点流量控制:
5、熔断降级:
# 0.说明
- https://github.com/alibaba/Sentinel/wiki/%E7%86%94%E6%96%AD%E9%99%8D%E7%BA%A7
- 除了流量控制以外,对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一。由于调用关系的复杂性,如果调用链路中的某个资源不稳定,最终会导致请求发生堆积。Sentinel **熔断降级**会在调用链路中某个资源出现不稳定状态时(例如调用超时或异常比例升高),对这个资源的调用进行限制,让请求快速失败,避免影响到其它的资源而导致级联错误。当资源被降级后,在接下来的降级时间窗口之内,对该资源的调用都自动熔断(默认行为是抛出 `DegradeException`)。
降级策略
- 平均响应时间 (DEGRADE_GRADE_RT):当 1s 内持续进入 N 个请求,对应时刻的平均响应时间(秒级)均超过阈值(count,以 ms 为单位),那么在接下的时间窗口(DegradeRule 中的 timeWindow,以 s 为单位)之内,对这个方法的调用都会自动地熔断(抛出 DegradeException)。注意 Sentinel 默认统计的 RT 上限是 4900 ms,超出此阈值的都会算作 4900 ms,若需要变更此上限可以通过启动配置项 -Dcsp.sentinel.statistic.max.rt=xxx 来配置。
- 异常比例 (DEGRADE_GRADE_EXCEPTION_RATIO):当资源的每秒请求量 >= N(可配置),并且每秒异常总数占通过量的比值超过阈值(DegradeRule 中的 count)之后,资源进入降级状态,即在接下的时间窗口(DegradeRule 中的 timeWindow,以 s 为单位)之内,对这个方法的调用都会自动地返回。异常比率的阈值范围是 [0.0, 1.0],代表 0% – 100%。
- 异常数 (DEGRADE_GRADE_EXCEPTION_COUNT):当资源近 1 分钟的异常数目超过阈值之后会进行熔断。注意由于统计时间窗口是分钟级别的,若 timeWindow 小于 60s,则结束熔断状态后仍可能再进入熔断状态。
5、SentinelResource注解
# 0.说明
- https://github.com/alibaba/Sentinel/wiki/%E6%B3%A8%E8%A7%A3%E6%94%AF%E6%8C%81
@GetMapping("/sentinel/test1")
@SentinelResource(value = "aa",blockHandler = "fallBack",fallback = "fall")
public String test1(int id){
log.info("sentinel test1");
if(id<0)
throw new RuntimeException("非法参数!!!");
}
return "sentinel test1 :"+id;
}
//降级异常处理
public String fallBack(int id,BlockException e){
if(e instanceof FlowException){
return "当前服务已被流控! "+e.getClass().getCanonicalName();
}
return "当前服务已被降级处理! "+e.getClass().getCanonicalName();
}
//异常处理
public String fall(int id){
return "当前服务已不可用!";
}
四、整合环境公共依赖
# 00.整合思路分析
- springcloud eureka consul ribbon openfeign hystix config+bus gateway
- springcloudalibaba nacos服务注册中&统一配置中心 sentinel 服务熔断 限流 ...
整合思路:
1.服务注册中心 nacos
2.统一配置中心 nacos
3.服务熔断组件 sentinel
4.服务间通信组件 openfeign + ribbon
5.服务网关组件 gateway
# 0.构建项目并引入依赖
<!--继承springboot父项目-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
</parent>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.SR6</spring-cloud.version>
<spring.cloud.alibaba.version>2.2.1.RELEASE</spring.cloud.alibaba.version>
</properties>
<dependencyManagement>
<dependencies>
<!--引入springcloud 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>
<!--引入springcloud-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
对于其他组件可以参考:这篇SpringCloud总结
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/188544.html