一、架构图
二、springCloud全家桶组件库
三、Spring Cloud 实战项目全景规划
四、技术选型
第一阶段:搭建基础的微服务功能,实现微服务之间的通信;
1、服务治理:服务治理的重点是搭建基础的跨服务调用功能。我会把用户服务、优惠计算服务和订单服务改造成可以独立启动的微服务,并借助 Nacos 的服务发现功能,通过 Webflux 组件中的 WebClient 实现基于 HTTP 的跨服务间的调用;
2、负载均衡:在这部分,我们将在服务治理的基础上,引入 Loadbalancer 组件为跨服务调用添加负载均衡的能力。除此之外,我会对 Loadbalancer 组件的扩展接口做自定义开发,实现一个金丝雀测试的负载均衡场景;
3、简化服务调用:我将使用 OpenFeign 组件对用户服务进行改造,将原先复杂的 WebClient 调用替换为简洁的 OpenFeign 调用。
第二阶段:为各个模块构建服务容错、分布式配置中心、分布式链路追踪能力;
1、配置管理:配置管理的重点是将三个微服务应用接入到 Nacos Config 配置中心,使用远程配置中心存储部分配置项
2、。服务容错:搭建 Sentinel Dashboard 控制台,通过控制台将降级规则和流量整形规则应用到业务埋点中。
3、链路追踪:这部分的重点是搭建分布式链路追踪与日志系统。
第三阶段:进一步实现微服务网关、消息驱动和分布式事务。
1、搭建微服务网关作为统一流量入口;
2、使用消息驱动组件对接 RabbitMQ;
3、通过分布式事务保证数据一致性。
补充知识:
重要流程:创建一个单pom项目改为父子pom项目
0、检查idea是否在父模块pom中生成子模块
<modules>
<module>eureka</module>
</modules>
1、子模块pom.xml添加
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
2、使用Eureka搭建注册中心
① 通过idea创建一个maven模块
② 创建启动类 EurekaApplication
@EnableEurekaServer
③ 关闭链接到注册中心(不用自己链接自己)
spring.application.name=eureka
server.port=8761
eureka.client.fetch-registry=false
eureka.client.register-with-eureka=false
3、搭建server模块处理公共逻辑
① 使用方法:其他项目引入server模块的jar包
pom.xml
<dependency>
<groupId>com.course</groupId>
<artifactId>server</artifactId>
</dependency>
② 注册到Eureka注册中心模块
第一步、增加eureka client依赖
pom.xml
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
第二步、增加配置,注册中心地址
application.properties
spring.application.name=eureka
server.port=8761
eureka.client.fetch-registry=true
eureka.client.register-with-eureka=true
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
第三步、启动类加EnableeurekaClient注解
@EnableEurekaClient
4、搭建路由模块-gateway
作用:网关主要功能:限流(流量控制);重试(请求失败时重试,慎用); 跨域(前后端不在同一个域);路由转发请求); 鉴权(登录校验,签名校验等
① 配置端口为9000表示路由
application.properties
spring.application.name=gateway
server.port=9000
注册到注册中心逻辑同上
② 路由转发
application.properties
spring.cloud.gateway.routes[0].id=system
spring.cloud.gateway.routes[0].uri=http://127.0.0.1:9001
spring.cloud.gateway.routes[0].predicates[0].name=Path
spring.cloud.gateway.routes[0].predicates[0].args[0]=/system/**
spring.cloud.gateway.routes[0].filters[0].name=LoginAdmin
spring.cloud.gateway.routes[0].filters[0].args[0]=true
5、搭建业务模块-system处理业务逻辑
① 配置公共请求头
application.properties
server.servlet.context-path=/system