目录
SpringCloud 与SpringBoot 版本对应关系
SpringCloud和SpringCloud Alibaba 和各个组件之间的版本对应关系
前言
作为一名开发者,记录学习过程并分享心得是提升自己并帮助他人的有效方式。本文是我学习Spring Cloud Alibaba的第一篇博客,旨在通过记录微服务工程搭建的过程,理解和使用Spring Cloud Alibaba。
一、单体应用的痛点
单体应用将所有功能模块集中在一个项目中,尽管在初期开发较为简单,但随着项目规模的扩大,单体应用的缺点也愈发明显:
难以维护:项目代码量庞大,任何一个小的改动都可能影响整个系统,维护成本高。
难以扩展:单体应用难以做到按需扩展,资源利用率低。
部署复杂:每次发布都需要将整个应用重新部署,发布周期长且风险大。
开发效率低:团队协作开发时,各个模块之间的耦合度高,开发效率受到影响。
二、微服务的优势
微服务架构通过将系统拆分成多个小的服务,每个服务都可以独立开发、部署和扩展,极大地改善了单体应用的痛点。其主要优势包括:
高可维护性:每个服务都相对独立,代码量小,维护起来更加方便。
高扩展性:可以针对不同的服务进行独立扩展,资源利用更高效。
独立部署:服务可以独立部署,减少了发布的复杂度和风险。
技术多样性:不同的服务可以使用不同的技术栈,选择最适合的技术解决方案。
三、Spring Cloud Alibaba的重要组件
Spring Cloud Alibaba提供了诸多组件,帮助开发者快速构建和管理微服务架构。以下是一些重要的组件:
Nacos:一个易于使用的动态服务发现、配置管理和服务管理平台。
Sentinel:用于流量管理,支持熔断、限流、系统负载保护等功能。
RocketMQ:分布式消息中间件,提供高可靠、高性能的消息传递能力。
Seata:分布式事务解决方案,提供高效且便捷的分布式事务服务。
Feign:一个声明式的HTTP客户端,用于服务间的通信。
Nacos
Nacos (Naming and Configuration Service) 是阿里巴巴开源的一个动态服务发现、配置管理和服务管理平台。它主要功能如下:
服务发现和注册:通过Nacos,服务可以方便地注册自己并发现其他服务,从而实现负载均衡和故障转移。
配置管理:Nacos允许你集中管理配置文件,并在配置变化时实时推送到各个服务。
服务健康监控:Nacos提供了服务健康检查和告警功能,可以监控服务的运行状态。
Sentinel
Sentinel 是阿里巴巴开源的流量管理组件,主要用于处理微服务系统的稳定性问题。主要功能包括:
流量控制:根据设定的限流规则对流量进行控制,防止流量过大导致系统崩溃。
熔断降级:当某个服务出现故障时,通过熔断机制自动切断请求,防止故障蔓延。
系统负载保护:根据系统的负载情况动态调整流量,保证系统的稳定运行。
实时监控:提供详细的流量监控和统计信息,帮助开发者及时发现和解决问题。
RocketMQ
RocketMQ 是阿里巴巴开源的一款分布式消息中间件,主要功能如下:
高可靠性:支持消息持久化和多副本机制,保证消息的高可靠性。
高性能:具有高吞吐量和低延迟的特点,能够支持海量消息的快速传输。
灵活的消息模型:支持多种消息模型,包括点对点和发布订阅模型。
分布式事务:支持分布式事务消息,保证消息的一致性。
Seata
Seata (Simple Extensible Autonomous Transaction Architecture) 是阿里巴巴开源的分布式事务解决方案,主要功能包括:
分布式事务管理:提供AT、TCC、SAGA等多种事务模式,帮助开发者处理分布式系统中的数据一致性问题。
高性能:采用高效的事务协调机制,保证事务处理的性能。
易用性:提供简单易用的API,开发者可以方便地集成到自己的应用中。
Feign
Feign 是Spring Cloud的一个声明式HTTP客户端,主要功能包括:
声明式服务调用:通过定义接口和注解的方式,方便地调用远程服务。
负载均衡:与Ribbon集成,支持客户端负载均衡。
熔断器:与Hystrix集成,支持熔断机制,提高服务的稳定性。
可扩展性:支持自定义的编码器、解码器和错误处理器,满足不同的需求。
四、项目搭建
1、注意事项
SpringCloud 与SpringBoot 版本对应关系
SpringCloud和SpringCloud Alibaba 和各个组件之间的版本对应关系
各个组件目前的维护情况
红色表示已停止维护、已过时 绿色表示可用
注册中心:eureka(停更)、Zookeeper、Consul(go语言编写)、Nacos
服务调用:Ribbon、LoadBalancer(新出的)/ Feign(Netfilx公司不在更新)、OpenFeign(Spring公司自己出的,与Feign相当于葫芦娃兄弟,几乎一样)
服务降级:Hystrix(cloud自带的停更,国内依然很多使用,其思想很值得学习),resilience4j(国外推荐代替Hystrix),sentienl(国内一般推荐用这个,阿里出品)
服务网关:Zuul(内部原因没出Zuul2)gateway(Spring自己推出的)
服务配置:Config,Nacos(把Config替代了)
服务总线:Bus(淘汰) Nacos
2、新建项目
我们公司用的JDK17和SpringBoot2.7.x,因此版本选取如下:
SpringBoot – 2.7.5
SpringCloud – 2021.0.5
Springcloud Alibaba – 2021.1
①:创建父级工程
②:删掉src目录
③:添加依赖
<?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>com.test</groupId>
<artifactId>springcloud-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<!-- spring boot -->
<spring-boot.version>2.7.5</spring-boot.version>
<!-- spring cloud -->
<spring-cloud.version>2021.0.5</spring-cloud.version>
<spring-cloud-alibaba.version>2021.1</spring-cloud-alibaba.version>
<spring-cloud-starter-alibaba-nacos-config.version>2.1.4.RELEASE</spring-cloud-starter-alibaba-nacos-config.version>
</properties>
<dependencies>
<!-- jdk17删除的包引入 -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- 不加会加载不到BootStrap.yml文件 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>${spring-cloud-starter-alibaba-nacos-config.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
</dependencies>
<!-- 管理依赖版本号,子项目不会默认依赖 -->
<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>
</dependencies>
</dependencyManagement>
</project>
总结
通过上述步骤,我们已经搭建了一个基础的Spring Cloud Alibaba微服务工程。从单体应用的痛点,到微服务的优势,再到Spring Cloud Alibaba的重要组件,最后到具体的工程搭建,希望这篇文章能帮助你快速上手Spring Cloud Alibaba微服务架构。