当前位置: 首页 > news >正文

【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 项目

步骤:

  1. 打开 https://start.spring.io/
  2. 选择如下配置:
    • 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(可选)
  3. 点击 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
http://www.lryc.cn/news/600802.html

相关文章:

  • LeetCode——1717. 删除子字符串的最大得分
  • 秋招Day20 - 微服务 - 概念
  • 【机器学习深度学习】模型微调:多久才算微调完成?——如何判断微调收敛,何时终止训练
  • 二维数组相关学习
  • 大模型蒸馏(distillation)---从DeepseekR1-1.5B到Qwen-2.5-1.5B蒸馏
  • UniappDay03
  • 【Canvas与旗帜】条纹版大明三辰旗
  • AI是否会终结IT职业?深度剖析IT行业的“涌现”与重构
  • 慧星云新增大模型服务:多款大模型轻松调用
  • C++:STL中vector的使用和模拟实现
  • MySQL的底层原理--InnoDB数据页结构
  • 人大金仓 kingbase 连接数太多, 清理数据库连接数
  • 基于匿名管道的多进程任务池实现与FD泄漏解决方案
  • VUE2 学习笔记7 v-model、过滤器
  • 6.数组和字符串
  • ChatIm项目文件上传与获取
  • 拉普拉斯方程的径向解法
  • opencv学习(图像金字塔)
  • DriverManager在rt.jar里,凭什么能加载到classpath下的驱动?
  • Vue当中背景图无法占满屏幕的解决方法
  • 记一次腾讯云临时密钥接管存储桶
  • 零基础 “入坑” Java--- 十四、【练习】图书小系统
  • mrpc框架项目的AI总结
  • 热传导问题Matlab有限元编程 :工业级热仿真核心技术-搭建热传导求解器【含案例源码】
  • 【ELasticsearch】节点角色分类与作用解析
  • ubuntu下docker安装thingsboard物联网平台详细记录(附每张图)
  • 考研复习-数据结构-第八章-排序
  • 求hom_math_2d的角度值
  • URL与URI:互联网世界的“门牌号“与“身份证“
  • DocC的简单使用