【Spring Cloud】微服务学习
Spring Cloud 简介
Spring Cloud 是基于 Spring Boot 实现的微服务架构开发工具集。它为微服务系统提供了配置管理、服务注册与发现、负载均衡、断路器、智能路由、微代理、控制总线等组件的支持,使开发者能够快速构建分布式系统。
Spring Cloud 是一整套解决方案,其核心理念是“关注业务、抽象技术”。
一,核心组件及原理
Eureka
Eureka 是 Netflix 提供的服务注册与发现组件。
• Eureka Server:服务注册中心,所有服务实例向其注册。
• Eureka Client:服务提供者和消费者均为客户端,向 Eureka 注册或拉取注册信息。
原理:
• 服务提供者启动后将自身信息(服务名称、地址、端口等)注册到 Eureka。
• 服务消费者通过 Eureka 获取其他服务的地址并发起调用。
优点:
• 支持客户端负载均衡。
• 支持服务实例健康检查。
Consul
Consul 是 HashiCorp 开发的一个支持多数据中心的服务网格工具,提供服务注册、服务发现、配置管理等功能。
特点:
• 支持健康检查机制。
• 提供 Key/Value 配置存储。
• 支持 HTTP 和 DNS 协议查询服务。
和 Eureka 的区别:
特性 Eureka Consul
健康检查 客户端上报 服务端主动检查
配置管理 不支持 支持 KV 存储
数据一致性 AP(可用+分区) CP(一致性+分区)
UI 界面 简洁 功能全面
Ribbon(已被弃用,推荐用 Spring Cloud LoadBalancer)
Ribbon 是 Netflix 开源的客户端负载均衡器,集成在 Feign 和 RestTemplate 中。
原理:
• 启动时从注册中心拉取服务清单,缓存到本地。
• 每次请求根据负载均衡算法(轮询、随机、权重)选择一个服务实例。
替代方案:
Spring Cloud LoadBalancer 已替代 Ribbon,具有更强的扩展性。
Feign
Feign 是一个声明式 HTTP 客户端,结合 Eureka 和 Ribbon 可实现负载均衡和服务调用。
特性:
• 通过接口 + 注解定义 HTTP 请求。
• 集成 Ribbon 实现负载均衡。
• 集成 Hystrix 实现容错机制(Spring Cloud 2020 之后建议用 Resilience4j)。
使用方式:
@FeignClient(“user-service”)
public interface UserClient {
@GetMapping(“/user/{id}”)
User getUserById(@PathVariable(“id”) Long id);
}
二,使用 Spring Initializr 创建 Spring Cloud 项目
步骤:
- 打开 https://start.spring.io/
- 选择如下配置:
• Project: Maven / Gradle
• Language: Java
• Spring Boot Version: 建议使用 2.6.x 及以下兼容旧版 Spring Cloud(或 3.x 以上配合 Spring Cloud 2022+)
• Dependencies:
• Spring Web
• Spring Boot DevTools
• Eureka Discovery Client
• Spring Cloud OpenFeign
• Spring Cloud Config Client(可选) - 点击 Generate 生成项目并导入 IDE(如 IntelliJ IDEA)
1,服务注册中心配置
创建一个 eureka-server 项目:
- 添加依赖(pom.xml)
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
- 配置 application.yml
server:port: 8761spr