SpringCloud Alibaba 工程搭建详细教程

news2024/11/13 20:27:56

使用 Spring Cloud Alibaba 的主要目的是解决单体应用的痛点,并利用微服务架构的优势来构建高扩展性、可靠的分布式系统。

1. 单体应用的痛点

单体应用虽然在小型项目中优势明显,但随着业务复杂性增加,逐渐暴露出许多问题:

  • 代码复杂性:随着功能增长,单体应用代码量增加,导致可读性、可维护性和可扩展性下降。新开发人员需要花费大量时间理解系统。
  • 测试困难:在单体应用中,任何小的更改都可能影响整个系统,导致测试覆盖范围大,测试成本高。
  • 并发能力有限:单体应用运行在一台服务器上,随着访问量的增加,性能瓶颈显现,用户体验下降。
  • 容错性差:如果某一功能模块出现故障,可能导致整个应用系统不可用。

2. 微服务的优势

微服务架构通过将单体应用按业务功能划分为多个独立的小模块(微服务),每个服务都有独立的进程、数据库和部署方式。这种架构的优势包括:

  • 独立部署与扩展:每个微服务可以独立开发、测试、部署,并且根据需要单独扩展,大大提高了灵活性和可扩展性。
  • 容错性提高:微服务之间通过 HTTP RESTful API 或者消息机制进行通信,某个服务的故障不会影响整个系统,可以局部熔断,保障整体可用性。
  • 语言与技术多样性:不同的微服务可以采用不同的编程语言或存储技术,灵活适应业务需求。
  • 易于维护:由于每个微服务的代码规模较小,可维护性更高,新开发人员上手难度降低。

3. Spring Cloud Alibaba 的重要组件

Spring Cloud Alibaba 提供了构建微服务架构的核心组件,帮助开发者应对微服务架构中面临的复杂性。

主要组件包括:

Nacos:

  • 服务注册与发现:Nacos 作为注册中心,负责微服务的动态注册和发现,简化了服务之间的通信。
  • 配置中心:Nacos 提供分布式配置管理,支持动态配置更新,避免了繁琐的手动配置文件修改。

Ribbon:

  • 负载均衡:Ribbon 是客户端负载均衡器,能够在多个服务实例之间分配请求流量,提升服务的可用性和性能。

Feign:

  • 声明式 HTTP 客户端:通过 Feign,可以轻松调用其他微服务的 HTTP 接口,简化远程调用的代码,实现更清晰的代码逻辑。

Sentinel:

  • 限流、降级、熔断:Sentinel 提供了强大的流量控制功能,能实时监控微服务的运行状况,进行限流和熔断,保障系统的稳定性。

Gateway:

  • API 网关:Spring Cloud Gateway 是一个高性能的 API 网关,它通过 WebFlux 编程模式支持路由转发、认证授权、日志监控等功能,集中管理外部请求流量。

Sleuth:

  • 调用链监控:Sleuth 负责微服务间的调用链路追踪,能够在分布式系统中帮助快速定位问题,提供链路级的性能监控。

Seata:

  • 分布式事务解决方案:Seata 提供了跨微服务的分布式事务管理,保证微服务之间的事务一致性,解决了分布式架构中事务管理复杂的问题。

工程搭建

1、搭建父工程

删除掉src目录(父目录不需要)

2、引入相关springcloud依赖

先看下springboot和springcloud、springcloud alibaba 和各个组件之间的版本对应关系:

SpringCloud与SpringBoot的版本的兼容关系

springcloud和springcloud alibaba版本保持一致

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.2.9</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>cloud</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging> <!-- 这里设置为pom -->
    <name>demo</name>
    <description>demo</description>
    <url/>
    <licenses>
        <license/>
    </licenses>
    <developers>
        <developer/>
    </developers>
    <scm>
        <connection/>
        <developerConnection/>
        <tag/>
        <url/>
    </scm>
    <properties>
        <java.version>17</java.version>
        <spring-cloud.version>2023.0.2</spring-cloud.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-alibaba-dependencies -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2023.0.1.0</version>
            <type>pom</type>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <!-- 定义子模块 -->
    <modules>
        <module>service1</module>
        <module>service2</module>
    </modules>

</project>

3、创建子模块

创建子模块service1、service2

子模块service1的xml

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>cloud</groupId>
		<artifactId>demo</artifactId>
		<version>0.0.1-SNAPSHOT</version>
		<relativePath>../pom.xml</relativePath> <!-- 指向父项目的 pom 文件 -->
	</parent>
	<artifactId>service1</artifactId>
	<dependencies>
		<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-discovery -->
		<dependency>
			<groupId>com.alibaba.cloud</groupId>
			<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
			<version>2023.0.1.0</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-sentinel -->
		<dependency>
			<groupId>com.alibaba.cloud</groupId>
			<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
			<version>2023.0.1.0</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>
	</dependencies>
</project>

子模块service2的xml

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>cloud</groupId>
        <artifactId>demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath> <!-- 指向父项目的 pom 文件 -->
    </parent>
    <artifactId>service2</artifactId>
    <dependencies>
        <!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-discovery -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2023.0.1.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-sentinel -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
            <version>2023.0.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>
</project>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2154070.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python | Leetcode Python题解之第420题强密码检验器

题目&#xff1a; 题解&#xff1a; class Solution:def strongPasswordChecker(self, password: str) -> int:n len(password)has_lower has_upper has_digit Falsefor ch in password:if ch.islower():has_lower Trueelif ch.isupper():has_upper Trueelif ch.isdi…

Datawhale X 南瓜书 task02学习笔记

算法原理引入 样本点通常应该在模型的2侧&#xff0c;原因&#xff1a;在实际中&#xff0c;因为某种不可控的因素&#xff0c;测出来的样本点肯定是有误差的。如果样本数据点都在模型上&#xff0c;则说明在建立模型时&#xff0c;把误差也考虑进去了&#xff0c;这就是我们说…

Linux使用常见问题指南

普通用户sudo权限问题 我在普通用户Sun下,编写了一个.cc文件,然后用sudo权限安装gcc/g去运行该文件,却提示我如下: 原因 当前的用户没有加入到sudo的配置文件里 #切换到root用户 su #编辑配置文件 vim /etc/sudoers #增加配置, 在打开的配置文件中&#xff0c;找到root ALL(A…

波分技术基础 -- FEC

信号在传输过程中&#xff0c;不可避免的会出现劣化、误码&#xff0c;FEC (Forward error correction) 技术确保通信系统在噪声和其他损伤的影响下&#xff0c;依然能够实现无错误传输。 应用场景&#xff1a;长途密集波分系统&#xff08;DWDM&#xff09;实现方式&#xff…

AI赋能篇:万物皆可播,AI视频直播新趋势,轻松打造24h不间断开播!

AI赋能篇&#xff1a;万物皆可播&#xff0c;AI视频直播新趋势&#xff0c;轻松打造24h不间断开播&#xff01; 在数字化浪潮的推动下&#xff0c;人工智能&#xff08;AI&#xff09;正以前所未有的速度渗透到我们生活的每一个角落&#xff0c;其中&#xff0c;AI视频直播作为…

基于vue框架的储蓄卡业务管理系统的设计与实现28g6t(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;客户,银行账户,存款记录,取款记录,转账记录,经理,柜员,贷款产品,贷款申请,放款信息,还款信息,离职申请,通知公告,用户反馈,开户申请 开题报告内容 基于Vue框架的储蓄卡业务管理系统设计与实现开题报告 一、项目背景与意义 随着金融科…

智慧园区:解析集成运维的未来之路

随着科技的进步和社会的发展&#xff0c;智慧园区已经成为了城市建设的重要方向。作为一个集信息技术、通信技术、能源技术等多种技术于一体的综合性项目&#xff0c;智慧园区的建设具有极高的科技含量和产业复杂度。而在智慧园区的运维管理中&#xff0c;更是需要集成化的处理…

unity3d入门教程八-飞机大战

unity3d入门教程八-飞机大战 19.2竖屏设置19.3主控脚本19.4制作子弹19.5制作飞机19.6制作怪物19.7击中目标19.8随机生成怪物19.9预制体怪物随机更换头像19.10怪物相关优化19.11游戏背景19.12游戏最终优化一、 HP显示二、怪物预制体三、分值显示四、背景音乐 19.2竖屏设置 切换到…

信息安全工程师(8)网络新安全目标与功能

前言 网络新安全目标与功能在当前的互联网环境中显得尤为重要&#xff0c;它们不仅反映了网络安全领域的最新发展趋势&#xff0c;也体现了对网络信息系统保护的不断加强。 一、网络新安全目标 全面防护与动态应对&#xff1a; 目标&#xff1a;建立多层次、全方位的网络安全防…

安装黑群晖系统,并使用NAS公网助手访问教程(好文)

由于正版群晖系统的价格不菲&#xff0c;对于预算有限的用户来说&#xff0c;安装黑群晖系统成为了一个不错的选择&#xff08;如果您预算充足&#xff0c;建议选择白群晖&#xff09;。如您对宅系科技比较感兴趣&#xff0c;欢迎查看本文&#xff0c;将详细介绍如何安装黑群晖…

PAT甲级-1083 List Grades

题目 题目大意 学生有姓名&#xff0c;编号和分数&#xff0c;给定分数区间&#xff0c;输出在这个区间内的人名和编号。输出顺序按照分数从高到低&#xff0c;没有重复的分数。 思路 非常简单的结构体排序题&#xff0c;定义一个结构体&#xff0c;按照题目条件sort就可以了…

2--SpringBoot项目中员工管理、分类管理 详解(一)

目录 员工管理 新增员工 需求分析和设计 代码开发 实体类 Controller层 Service层接口 Service层实现类 Mapper层 功能测试 通过接口文档测试 代码完善 问题一 解决 问题二 解决 员工分页查询 需求分析和设计 代码开发 设计DTO类 封装PageResult Controlle…

微服务架构---Ribbon\Feign

Ribbon(负载均衡) Ribbon概述 在 SpringCloud 中&#xff0c; Nacos⼀般配合Ribbon进行使用&#xff0c;Ribbon提供了客户端负载均衡的功能&#xff0c;Ribbon利用从Nacos中读取到的服务信息&#xff0c;在调用服务节点提供的服务时&#xff0c;会合理的进行负载。 Ribbon作…

Arthas vmoption(查看和修改 JVM里诊断相关的option)

文章目录 二、命令列表2.1 jvm相关命令2.1.6 vmoption&#xff08;查看和修改 JVM里诊断相关的option&#xff09;举例1&#xff1a;vmoption 查看所有的选项举例2&#xff1a;vmoption MinHeapFreeRatio 查看指定的选项 二、命令列表 2.1 jvm相关命令 2.1.6 vmoption&#x…

精选写作技巧!分享4款ai写毕业论文可以写出公式表格的软件

在撰写毕业论文时&#xff0c;AI写作工具可以极大地提高效率和质量。以下是四款值得推荐的AI软件&#xff0c;它们不仅能够帮助生成高质量的论文初稿&#xff0c;还能处理公式和表格等复杂内容。 传送门&#xff1a;https://www.aipaperpass.com?piclLGw 千笔-AIPassPaper是一…

基于SpringBoot+Vue的私人牙科诊所管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的…

大模型学习记录之Agent部署

首先&#xff0c;需要明确大模型的概念&#xff0c;通过百度的文心一言的结果&#xff0c;我们得到如下概念&#xff1a; 大模型的特点 大模型&#xff08;Large Models&#xff09; 在人工智能和机器学习领域&#xff0c;特别是深度学习领域&#xff0c;指的是那些具有大量参…

SAP B1 Web Client MS Teams App集成连载四

过程/Procedure&#xff1a; 1.通过点击选项卡旁边的下拉箭头&#xff0c;可以重新配置、重命名和移除现有选项卡。 You can reconfigure, rename and remove an existing tab by clicking the drop down arrow alongside the tab. 要重新配置选项卡&#xff0c;请选择“设置”…

网络安全:腾讯云智、绿盟、美团、联想的面经

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…

【用Java学习数据结构系列】用堆实现优先级队列

看到这句话的时候证明&#xff1a;此刻你我都在努力 加油陌生人 个人主页&#xff1a;Gu Gu Study 专栏&#xff1a;用Java学习数据结构系列 喜欢的一句话&#xff1a; 常常会回顾努力的自己&#xff0c;所以要为自己的努力留下足迹 喜欢的话可以点个赞谢谢了。 作者&#xff…