SpringCloud(十)——Spring Cloud Alibaba组件
前言
- SpringCloudAlibaba官方定义:
该微服务工具集是分布式应用开发的一整套解决方案。换句话说,该工具集为分布式应用开发提供了一站式解决方案,其中包含开发分布式应用的所有组件。
- SpringCloudAlibaba特性以及提供的组件:
- 服务流量控制和服务降级(
Sentinel
):对应替换Hystrix
; - 服务注册和发现组件(
Nacos
):对应替换consul
以及Eureka
; - 统一中心(
Nacos
):对应替换config
; - 事件驱动(
RocketMQ
):对应替换Bus
; - 分布式事务支持(
Seata
); - Dubbo RPC:使用这个协议的前提是各个微服务使用的语言必须是同一种(Java)。
- 服务流量控制和服务降级(
上述的几个组件中,Alibaba被使用的是前三个(即加粗)的组件,现今微服务开发使用的组件为:
- Nacos:服务注册中心以及统一配置中心;
- HttpRest:结合Ribbon或OpenFeign组件实现服务间的负载均衡通信;
- Sentinel:服务流量监控以及服务降级;
- Gateway:网关组件。
文章目录
父项目环境搭建
本篇笔记开始说明SpringCloudAlibaba的相关组件,其项目环境搭建和SpringCloud完全相同,只是引入依赖有些区别。
- 引入依赖:
<!--控制SpringCloud以及SpringCloudAlibaba版本依赖-->
<properties>
<spring.cloud-version>2021.0.0</spring.cloud-version>
<spring.cloud.alibaba.version>2.2.7.RELEASE</spring.cloud.alibaba.version>
</properties>
<!--SpringBoot版本-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.3</version>
</parent>
<!--SpringCloud以及Alibaba组件版本依赖-->
<dependencyManagement>
<dependencies>
<!--维护SpringCloud 版本-->
<!--SpringCloud插件的引入同样不会引入依赖,只是维护版本-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud-version}</version>
<!--引入父项目工具集的时候,表示当前为工具集-->
<type>pom</type>
<!--表示引入-->
<scope>import</scope>
</dependency>
<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>
【注】:我们新开的父项目在一个新的路径下,这个时候需要将该目录下的JDK和Maven重新配置,否则会出现问题。
Nacos替换consul
使用Nacos替换consul需要注意的是,连接注册中心的依赖需要更改,远端服务器中的注册中心组件需要更改。
Nacos下载
在此需要说明一下,下载教程中为大家提供了两个下载链接,主要是版本不同,大家注意区分。因为大家在使用Nacos
依赖的版本如果过高(2.0版本以上)的时候,低版本的Nacos
服务无法承载本地的版本。
查看Nacos
在GitHub中的版本依赖开一发现,在1.4.1版本开始修改了老版本的客户端代码,所以大家要区分自己需要的版本。
Nacos客户端配置
在此创建的NacosClient
服务仅仅代指需要注册到注册中心的微服务。
- 引入依赖
<dependencies>
<!--SpringCloud 项目必须基于SpringBoot-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--nacos 依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
- 书写配置
server.port=8081
spring.application.name=NACOSCLIENT
# 配置总nacos
#spring.cloud.nacos.server-addr=${ip}:8848
# 单纯配置注册中心的路径
spring.cloud.nacos.discovery.server-addr=${ip}:8848
# 服务名 ,默认为SpringBoot服务名,所以可以不写
#spring.cloud.nacos.discovery.service=${spring.application.name}
- 入口类添加注解
@SpringBootApplication
// 该注解表示根据配置文件来讲服务注册到相应的注册中心中,从20版本以后就可以不用写了
//@EnableDiscoveryClient
public class NacosClientApplication {
public static void main(String[] args) {
SpringApplication.run(NacosClientApplication.class,args);
}
}
**【注】:**如果发现启动过程中发现无法连接到Nacos服务,请检查网络以及自己的版本是否可以可以匹配。
Nacos套用OpenFeign
Nacos使用OpenFeign进行服务间通信需要注意一些问题,如下:
<!--nacos-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<!--查看源码发现:SpringCloud在Hoxton.M2 RELEASED 版本之后就舍弃掉了Ribbon,而是使用LoadBalance-->
<!--所以,不引入对应的LoadBalance会报错,同时,要注意去掉nacos中的ribbon组件,否则会覆盖loadbalance失效-->
<exclusions>
<exclusion>
<groupId>com.netflix.ribbon</groupId>
<artifactId>ribbon</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--openfeign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
**【注】:**注释里面都说明了,在此不做赘述。
总结
从本篇笔记开始记录的问题,都是基于之前笔记的说明, 所以建议想要学习的同学进行系统的学习。最后,大家一定要对自己使用的版本进行查看。