微服务架构基础知识的总结(黑马微服务课程day8)(黑马商城项目)
微服务架构基础知识的总结
之前的内容:
问题相关:订单id不一致解决方案 ,用户身份拦截器相关解决方案
微服务的具体内容:Nacos , OpenFeign
📚 目录(点击跳转对应章节)
一、单体架构与微服务架构对比
二、微服务拆分原则
三、服务之间的远程调用(RestTemplate)
四、服务治理与注册中心原理
五、服务发现(Nacos)
六、OpenFeign 简化远程调用
七、Spring Cloud Gateway 网关
八、自定义过滤器
九、网关传递用户信息
十、OpenFeign 传递用户信息
十一、配置管理(Nacos Config)
十二、动态路由(扩展内容)
一、单体架构与微服务架构对比
1. 单体架构
图片演示:

单体架构是指:
所有业务模块都部署在同一个应用中,统一打包、统一发布。
优点:
- 架构简单,开发和部署成本低
- 调试方便,适合小型项目
缺点:
- 项目规模变大后,代码臃肿、维护困难
- 一个模块出问题,可能导致整个系统不可用
- 无法针对不同业务模块进行独立扩展
2. 微服务架构
图片演示:

微服务架构将系统按业务维度拆分为多个独立服务,每个服务:
- 独立开发
- 独立部署
- 独立运行
优点:
- 服务解耦,便于维护和扩展
- 支持不同服务使用不同技术栈
- 提高系统整体稳定性
缺点:
- 架构复杂度提高
- 引入分布式问题(网络、延迟、容错等)
二、微服务拆分原则
图片演示:

在进行服务拆分时,通常遵循以下原则:
-
单一职责原则
一个微服务只负责一类业务 -
高内聚、低耦合
服务内部功能紧密,服务之间依赖尽量少 -
以业务为中心,而不是以技术为中心
不要为了拆而拆 -
避免循环依赖
三、服务之间的远程调用(RestTemplate)
1. 将 RestTemplate 注入 Spring 容器
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
使用 @Bean 注解创建一个 RestTemplate 实例,使其可以被Spring管理并注入到其他组件中。
这样就可以在其他组件中通过 @Autowired 注入使用。
2. 使用 exchange 方法发起远程调用
restTemplate.exchange(
"http://localhost:8081/items?id={id}",
HttpMethod.GET,
null,
User.class,
Map.of("id", "1")
);
其中的参数说明:
url: 请求地址,可包含占位符(如{id})method: HTTP方法(如HttpMethod.GET)requestEntity: 请求体(可为空)responseType: 返回结果的类型(如User.class)uriVariables: URL中的变量参数(如Map.of("id", "1"))
exchange 方法特点:
- 支持 GET、POST、PUT、DELETE 等所有 HTTP 方法
- 支持 URL 占位符
- 可自定义请求头、请求体
- 返回
ResponseEntity
图片总结:

四、服务治理与注册中心原理
1. 注册中心的核心作用
注册中心(如 Nacos)主要解决三个问题:
- 服务注册
- 服务发现
- 负载均衡
图片演示:
—
2. 工作流程
- 服务提供者启动后,将 IP 和端口注册到注册中心
- 服务调用者向注册中心订阅服务列表
- 注册中心在服务变化时主动推送更新
- 调用者根据获取的服务地址直接发起远程调用
3.对图片的理解

五、服务发现(Nacos)
实现流程:

Nacos 作为注册中心,具备以下能力:
- 服务注册与发现
- 健康检查
- 配置管理
- 动态配置推送
通过 Nacos,服务之间不再依赖固定 IP,而是通过服务名调用。
六、OpenFeign 简化远程调用
1. OpenFeign 的核心思想
- 基于接口 + 注解
- 屏蔽 RestTemplate 细节
- 与 Spring Cloud 深度整合
2. 实现流程


3. 连接池的使用

Feign 默认支持连接池:
- 减少频繁创建连接的开销
- 提升并发性能
- 推荐在生产环境开启
4. 日志级别配置
定义日志级别 Bean
@Bean
public Logger.Level feignLoggerLevel() {
return Logger.Level.FULL;
}
开启 Feign 日志
@FeignClient(value = "item-service", configuration = FeignConfig.class) //方式一(针对单个FeignClient)
@EnalbeFeignClients(defaultConfiguration = DefaultConfig.class)//方式二(全局配置,所有FeignClient都生效)
七、Spring Cloud Gateway 网关
1. 路由属性
网关通过路由将请求转发到对应的微服务。
主要包括:

2. 路由断言(Predicate)
断言用于判断请求是否匹配某条路由,如:

3. 路由过滤器(Filter)

过滤器用于:
- 请求前处理
- 请求后处理
- 权限校验
- 参数修改
4. 网关请求处理流程
流程图:

- 请求进入 Gateway
- 匹配路由断言
- 执行过滤器链
- 转发请求至下游服务
- 返回响应
八、自定义过滤器

1. 自定义局部过滤器(遇到了再了解即可)
- 只作用于某个路由
- 实现
GatewayFilter接口
2. 自定义全局过滤器(GlobalFilter)

- 作用于所有请求
- 常用于统一鉴权、日志、用户信息处理
九、网关传递用户信息
流程图:

1. 网关拦截请求
- 从请求头中解析用户信息
- 校验合法性
- 将用户信息放入请求头
2. 下游服务获取用户信息
通过请求头获取用户数据,实现用户上下文透传。
十、OpenFeign 传递用户信息


通过 Feign 的拦截器:
- 在请求发送前统一添加用户信息 Header
- 确保服务链路中用户信息不丢失
十一、配置管理(Nacos Config)

1. 拉取公共配置
引入依赖

创建 bootstrap.yaml
bootstrap.yaml 优先级高于 application.yaml,用于加载远程配置。

2. 配置热更新
前提条件:

- 使用 Nacos Config
- 配置类添加
@RefreshScope - Nacos 中修改配置并发布
无需重启服务即可生效。
十二、动态路由(扩展内容)

通过将路由信息存储到 Nacos 中,实现:
- 路由规则动态调整
- 无需重启网关
- 提升系统灵活性









