04-微服务之 SpringCloud
什么是 SpringCloud
SpringCloud 就是基于 SpringBoot 提供的一套微服务解决方案,是关注全局的微服务协调治理框架,是各个微服务架构落地技术的集合体。
SpringCloud 与 SpringBoot 的关系
- SpringBoot 专注于快速开发单个个体微服务
- SpringCloud 是关注全局的微服务协调治理框架,它将 SpringBoot 开发的微服务整合并管理起来,为各个微服务之间提供:配置管理、服务发现、断路器、路由、代理、事件总线等集成服务
- SpringBoot 可以离开 SpringCloud 独立使用,而 SpringCloud 离不开 SpringBoot
SpringCloud 与 SpringBoot 的版本选择
- 访问官网 https://spring.io/ 进入 Project -> SpringCloud,如下图
SpringCloud Netflix 环境搭建
-
创建通用 Maven 项目:spring-cloud-netflix
-
作为总工程,只留一个 pom.xml 文件即可
-
编写 pom 定义依赖管理
pom.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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.kaishen</groupId> <artifactId>spring-cloud-netflix</artifactId> <version>1.0-SNAPSHOT</version> <!-- 打包方式 --> <packaging>pom</packaging> <!-- 版本号 --> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <!-- 日志相关 --> <log4j.version>2.17.2</log4j.version> <logback.version>1.3.0-alpha14</logback.version> <!-- json 相关 --> <json.version>20220320</json.version> <gson.version>2.9.0</gson.version> <!-- J2EE 相关 --> <lombok.version>1.18.24</lombok.version> <lang3.version>3.12.0</lang3.version> <dom4j.version>2.1.3</dom4j.version> <commons-io.version>2.11.0</commons-io.version> <guava.version>31.1-jre</guava.version> <!-- 数据库相关 --> <druid.version>1.2.9</druid.version> <mysql.version>5.1.47</mysql.version> <mybatis.version>2.2.2</mybatis.version> <!-- Netflix Component version --> <netflix.component.version>1.4.7.RELEASE</netflix.component.version> </properties> <!-- 依赖管理,此处做管理,每个Module需自行引入所需依赖 --> <dependencyManagement> <dependencies> <!-- SpringCloud 依赖 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Hoxton.SR12</version> <type>pom</type> <scope>import</scope> </dependency> <!-- SpringBoot 依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.3.12.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> <!-- region 通用组件 --> <!-- log4j --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>${log4j.version}</version> </dependency> <!-- logback --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>${logback.version}</version> </dependency> <!-- json --> <dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>${json.version}</version> </dependency> <!-- google json --> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>${gson.version}</version> </dependency> <!-- Lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> <scope>provided</scope> </dependency> <!-- lang3 Java 第二 API --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>${lang3.version}</version> </dependency> <!-- dom4j --> <dependency> <groupId>org.dom4j</groupId> <artifactId>dom4j</artifactId> <version>${dom4j.version}</version> </dependency> <!-- commons-io --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>${commons-io.version}</version> </dependency> <!-- guava 线程池技术 --> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>${guava.version}</version> </dependency> <!-- druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>${druid.version}</version> </dependency> <!-- MySQL --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> <!-- MyBatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>${mybatis.version}</version> </dependency> <!-- endregion --> <!-- region Netflix Component --> <!-- Eureka Server --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> <version>${netflix.component.version}</version> </dependency> <!-- Eureka Client --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> <version>${netflix.component.version}</version> </dependency> <!-- Ribbon --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId> <version>${netflix.component.version}</version> </dependency> <!-- Feign --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> <version>${netflix.component.version}</version> </dependency> <!-- Hystrix --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> <version>${netflix.component.version}</version> </dependency> <!-- Dashboard --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId> <version>${netflix.component.version}</version> </dependency> <!-- Zuul --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zuul</artifactId> <version>${netflix.component.version}</version> </dependency> <!-- Config Server --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> <version>3.1.2</version> </dependency> <!-- Config Client --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> <version>3.1.2</version> </dependency> <!-- endregion --> </dependencies> </dependencyManagement> </project>
-
打包方式改为 pom
-
创建 Module,每个 Module 都是一个独立的微服务
SpringCloud Alibaba 环境搭建
由于 SpringCloud Netflix 相关组件停更,Alibaba 便在原有 SpringCloud 的基础上推出了一套替代方案
-
创建通用 Maven 项目:spring-cloud-alibaba
-
作为总工程,只留一个 pom.xml 文件即可
-
编写 pom 定义依赖管理
pom.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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.kaishen</groupId> <artifactId>springcloud</artifactId> <version>1.0-SNAPSHOT</version> <!-- 打包方式 --> <packaging>pom</packaging> <!-- 属性配置 --> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <!-- 日志相关 --> <log4j.version>2.17.2</log4j.version> <logback.version>1.3.0-alpha14</logback.version> <!-- json 相关 --> <json.version>20220320</json.version> <gson.version>2.9.0</gson.version> <!-- J2EE 相关 --> <lombok.version>1.18.24</lombok.version> <lang3.version>3.12.0</lang3.version> <dom4j.version>2.1.3</dom4j.version> <commons-io.version>2.11.0</commons-io.version> <guava.version>31.1-jre</guava.version> <!-- 数据库相关 --> <druid.version>1.2.9</druid.version> <mysql.version>5.1.47</mysql.version> <mybatis.version>2.2.2</mybatis.version> <!-- SpringCloud 组件相关 --> <springcloud.version>2021.0.2</springcloud.version> <alibaba.cloud.version>2021.0.1.0</alibaba.cloud.version> <springboot.version>2.6.7</springboot.version> <zk.version>3.1.1</zk.version> <consul.version>3.1.0</consul.version> </properties> <!-- 依赖管理,此处做管理,每个 Module 需自行引入所需依赖 --> <dependencyManagement> <dependencies> <!-- SpringCloud --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${springcloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- Alibaba Cloud --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>${alibaba.cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- SpringBoot --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${springboot.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- region 通用组件 --> <!-- log4j --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>${log4j.version}</version> </dependency> <!-- logback --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>${logback.version}</version> </dependency> <!-- json --> <dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>${json.version}</version> </dependency> <!-- google json --> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>${gson.version}</version> </dependency> <!-- Lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> <scope>provided</scope> </dependency> <!-- lang3 Java 第二 API --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>${lang3.version}</version> </dependency> <!-- dom4j --> <dependency> <groupId>org.dom4j</groupId> <artifactId>dom4j</artifactId> <version>${dom4j.version}</version> </dependency> <!-- commons-io --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>${commons-io.version}</version> </dependency> <!-- guava 线程池技术 --> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>${guava.version}</version> </dependency> <!-- druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>${druid.version}</version> </dependency> <!-- MySQL --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> <!-- MyBatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>${mybatis.version}</version> </dependency> <!-- endregion --> <!-- Zookeeper --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId> <version>${zk.version}</version> </dependency> <!-- Consul --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-discovery</artifactId> <version>${consul.version}</version> </dependency> </dependencies> </dependencyManagement> </project>
-
打包方式改为 pom
-
创建 Module,每个 Module 都是一个独立的微服务
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)