大道至简 少字全意 易经的方式看 SpringCloud 核心组件 及实例 适用于 懂而久未用回忆 ,不懂而需明正理而用 学习最简单的方式就是写一遍

目录

介绍

一、服务注册与发现 Eureka     

二、服务通信与负载均衡 Ribbon、Feign

三、容错与熔断  Hystrix

四、服务网关 Zuul/Gateway

五、配置中心  Spring Cloud Config

组件协作流程示例

扩展说明

实例 核心代码

Eureka

Feign

Ribbon 客户端负载均衡

Hystrix 熔断器

Zull/Gateway 网关

扩展

核心操作流程

代码关键点


介绍

     Spring Cloud 核心组件是构建微服务架构的基础模块,(按功能层级排序) 少字全意 基础框架需要内容,此为核心 细节扩展外找即可。
 

一、服务注册与发现 Eureka     

       - **功能**:服务治理核心组件,提供**服务注册与发现**能力。服务启动时通过 Eureka Client 注册元数据到 Eureka Server(注册中心),其他服务通过查询注册表动态获取服务实例地址

      - **特性**:支持高可用集群、心跳续约机制(默认30秒)、自我保护模式(防止因网络波动误删服务)。

二、服务通信与负载均衡 Ribbon、Feign

   **Ribbon**

     - **功能**:**客户端负载均衡**,基于 HTTP/TCP 请求分配流量。默认策略为轮询(Round Robin),支持自定义策略(如随机、权重等)

      - **协作**:与 Eureka 集成,动态获取服务实例列表,避免硬编码地址

 **Feign**  

     - **功能**:**声明式 HTTP 客户端**,通过接口注解简化服务调用。底层基于动态代理自动封装 HTTP 请求,整合了 Ribbon 和 Hystrix,实现负载均衡与容错。

三、容错与熔断  Hystrix

       - **功能**:**服务熔断与降级**,防止雪崩效应。通过熔断器机制,在服务故障时快速失败并降级(如返回兜底数据),支持线程隔离和请求监控

       - **触发条件**:默认10秒内请求失败率超过50%触发熔断

四、服务网关 Zuul/Gateway

        - **Zuul**:早期网关组件,支持路由转发、过滤链(如权限校验、日志记录),但基于同步阻塞模型

       - **Gateway**:新一代网关,基于 Netty 实现异步非阻塞,性能更高,支持动态路由、限流、熔断等  

五、配置中心  Spring Cloud Config

   - **功能**:**集中化管理微服务配置**,支持 Git/SVN 存储配置,实现动态更新

   - **协作**:结合 Spring Cloud Bus(消息总线)可实时推送配置变更

  

组件协作流程示例

以订单服务调用库存服务为例:

1. **注册**:库存服务通过 Eureka Client 注册到 Eureka Server。

2. **发现**:订单服务通过 Feign 调用库存服务时,Ribbon 从 Eureka 获取实例列表并负载均衡。

3. **容错**:若库存服务响应超时,Hystrix 触发熔断,返回降级结果。

4. **网关**:外部请求通过 Gateway 路由到订单服务,执行鉴权、限流等过滤逻辑。

扩展说明

- **替代方案**:部分组件如 Hystrix 已逐步被 Resilience4j、Sentinel 替代,Zuul 被 Gateway 取代,但核心设计理念一致。

- **选型建议**:新项目优先使用 Gateway 替代 Zuul,结合 Nacos(替代 Eureka)实现更灵活的服务治理。

实例 核心代码

Eureka

// Eureka Server 启动类 
@SpringBootApplication 
@EnableEurekaServer 
public class EurekaServerApp {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApp.class, args);
    }
}
 
// Eureka Client 配置(application.yml)
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
  instance:
    instance-id: ${spring.application.name}:${server.port}

Feign

// 定义 Feign 客户端接口 
@FeignClient(name = "inventory-service")
public interface InventoryServiceClient {
    @PostMapping("/inventory/deduct")
    String deductStock(@RequestBody Map<String, Object> params);
}
 
// 调用示例(在订单服务中)
@Autowired 
private InventoryServiceClient inventoryServiceClient;
 
public void updateOrderStatus() {
    inventoryServiceClient.deductStock(params); // 自动发起 HTTP 请求 
}

Ribbon 客户端负载均衡

消费者负载均衡 末日轮询 Round Robin 和 Eureka 协作 获取服务实例列表

// 启用负载均衡的 RestTemplate 
@Bean 
@LoadBalanced 
public RestTemplate restTemplate() {
    return new RestTemplate();
}
 
// 调用服务(自动选择实例)
String url = "http://inventory-service/inventory/deduct";
restTemplate.postForObject(url, params, String.class);

Hystrix 熔断器

防止 服务雪崩 通过熔断隔离故障服务,支撑降级 超时控制

// 服务降级示例 
@HystrixCommand(fallbackMethod = "fallbackMethod")
public String callIntegralService() {
    // 调用积分服务 
}
 
public String fallbackMethod() {
    return "积分服务暂不可用,稍后重试";
}
 
// 配置熔断策略(application.yml)
hystrix:
  command:
    default:
      execution.isolation.thread.timeoutInMilliseconds: 3000 
      circuitBreaker.requestVolumeThreshold: 10

Zull/Gateway 网关

统一入口 管理 请求路由 权限校验 限流

// 启用 Zuul 代理 
@EnableZuulProxy 
@SpringBootApplication 
public class GatewayApp {}
 
// 路由配置(application.yml)
zuul:
  routes:
    order-service:
      path: /order/**
      serviceId: order-service

扩展

核心操作流程

服务通过 Eureka 注册 》Feign/Ribbon 实现调用 〉Hystrix 保障稳定性》网关统一路由。

代码关键点

试用@EnableEurekaServer 和EnableEureakClient 快速搭建注册中心和服务节点

通过@FeignClient +接口定义实现无入侵远程调用

结合HystrixCommand 实现服务容错

***************持续更新 易经的方式看技术*************************

***************持续更新 易经的方式看技术*************************

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值