如何从零到一构建一个SpringCloud微服务项目
Spring Cloud 是Spring Boot风格封装优秀公司的成熟框架,形成易懂、易部署、易维护的分布式系统开发工具包,如医疗工具包( 纱布,绷带,镊子,创可贴 )
Spring Cloud这个开发工具包中都有什么呢
Spring Cloud是Spring提供的微服务框架。它利用Spring Boot的开发特性简化了微服务开发的复杂性,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,这些工作都可以借助Spring Boot的开发风格做到一键启动和部署。
Spring Cloud的目标是通过一系列组件,帮助开发者迅速构件一个分布式系统,Spring Cloud 是通过包装其它公司产品来实现的,比如Spring Cloud整合了开源的Netflix很多产品。Spring Cloud提供了微服务治理的诸多组件,例如服务注册和发现、配置中心、熔断器、智能路由、微代理、控制总线、全局锁、分布式会话等。
Spring Cloud组件非常多,涉及微服务开发的诸多场景,本节主要介绍Spring Cloud以及最为基础的Spring Cloud 五大组件,后续在进行详细的学习。Spring Cloud的架构图如图1-5所示。
搭建微服务工程
接下来模拟一个微服务调用的场景,有两个微服务,一个订单微服务,一个支付微服务,订单微服务通过RestTepleate调用支付微服务,完成支付功能。
- 支付微服务工程:服务提供者
- 订单微服务工程:服务使用者。
1. 支付工程
使用Spring Initializr,创建支付微服务工程01_cloud_payment,模拟支付。如图
注意:默认start.spring.io ,经常连不上,可以使用Custom:start.springboot.io 创建。
- 选择依赖
选择下面依赖,如图1-8所示。
- Spring Boot 2.5.7
- Spring Boot DevTools
- Lombok
- Spring Web
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 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>2.5.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.lxs.demo</groupId>
<artifactId>01_cloud_payment</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>01_cloud_payment</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.lxs.demo</groupId>
<artifactId>03_cloud_common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
2.订单工程
- 选择依赖
选择下面依赖,如图所示。
- Spring Boot 2.4.8
- Spring Boot DevTools
- Lombok
- Spring Web
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 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>2.5.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.lxs.demo</groupId>
<artifactId>02_cloud_order</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>02_cloud_order</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.lxs.demo</groupId>
<artifactId>03_cloud_common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>