1 微服务的概念
-
区别于单体项目
-
单体项目拆分成微服务项目的目标:高内聚、低耦合
-
拆分思路
-
纵向拆分:根据功能模块
-
横向拆分:抽取可复用模块
-
2 微服务拆分——远程调用
-
模拟前端向后台发送请求
-
RestTemplate:通过远程调用,发送 HTTP 请求,得到 HTTP 响应
3 服务治理
3.1 注册中心原理
三个角色
-
每个服务既可以作为服务的调用者
-
也可以作为服务的提供者
-
注册中心(家政中心)
-
服务提供者到注册中心注册服务信息
-
服务调用者访问注册中心,订阅所需服务的信息
-
负载均衡:随机、轮询、加权随机、加权轮询、哈希
-
-
监控服务状态变更
-
服务提供者需要与注册中心进行 心跳续约,如果服务挂了(不再发送续约消息)就会将该服务从服务注册表中移除,并向服务调用者推送变更
-
注册中心会向服务调用者推送服务状态变更(有服务挂了、有新的服务启动)的新消息
-
-
3.2 搭建 Nacos 实现注册中心
-
Nacos 是一个注册中心组件
-
使用 Docker 部署 Nacos 服务
-
可以进入 Nacos 控制面板监控服务的健康状态和服务详情(如启动服务器 IP 和端口等)
3.3 服务注册
步骤
-
引入 nacos discovery 依赖
-
配置要注册的服务名称和 Nacos 的地址
-
启动服务实例(IDEA 的多个端口)
3.4 服务发现
步骤
-
引入 nacos discovery 依赖
-
配置 Nacos 地址
-
服务发现:到 Nacos 注册中心获取服务注册列表(可以使用 Spring Cloud 提供的 API)
-
根据服务名称,获取服务实例列表
-
负载均衡,选择一个实例进行请求
-
获取实例的 IP 和端口,发起远程调用
-
3.5 治理结果
-
服务调用者不再需要记住服务提供者的 IP 地址和端口号,而是根据服务名称 动态拉取 服务实例列表,并通过负载均衡选择随机选择一个服务实例进行调用
-
服务挂了 ✔ 心跳续约
-
新启动的服务 ✔ 推送变更
4 OpenFeign 的使用
1. 基本介绍
- 声明式的 HTTP 客户端,基于 SpringMVC 的常见注解,更简单地实现 HTTP 请求的发送
2. 使用步骤
- 引入依赖
-
项目主类 / 启动类使用注解 @EnableFeignClients 开启 OpenFeign 功能
-
编写 FeignClient:使用 @FeignClient(value = "item-service"),@FeignClient 会将该类标记为一个 FeignClient 客户端,value 是服务名称, OpenFeign 会根据该 value 到注册中心去拉取实例列表
-
使用 FeignClient,实现远程调用:配置好 FeignClient 接口后就可以像使用本地方法一样实现远程调用
List<ItemDTO> items = itemClient.queryItemByIds(List.of(1,2,3));