SpringCloud Alibaba 微服务(一):项目搭建

目录

前言

一、单体应用的痛点

二、微服务的优势

三、Spring Cloud Alibaba的重要组件

Nacos

Sentinel

RocketMQ

Seata

Feign

四、项目搭建

1、注意事项

SpringCloud 与SpringBoot 版本对应关系

SpringCloud和SpringCloud Alibaba 和各个组件之间的版本对应关系

各个组件目前的维护情况

2、新建项目

①:创建父级工程

②:删掉src目录

③:添加依赖

总结


前言

作为一名开发者,记录学习过程并分享心得是提升自己并帮助他人的有效方式。本文是我学习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 和各个组件之间的版本对应关系

版本说明 · alibaba/spring-cloud-alibaba Wiki · GitHubicon-default.png?t=N7T8https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E

各个组件目前的维护情况

红色表示已停止维护、已过时 绿色表示可用

注册中心: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微服务架构。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

仅此而已丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值