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

springcloud各组件说明

Spring Cloud 是一个构建分布式微服务架构的开源框架,提供了一系列的组件和工具,用于实现服务治理、负载均衡、服务调用、断路器、API网关、配置中心、链路追踪等功能。


1. Eureka - 服务注册与发现

原理

Eureka 是 Netflix 开源的一个服务发现组件,包含服务端(Eureka Server)和客户端(Eureka Client)。Eureka Server 作为服务注册中心,所有微服务在启动时会向 Eureka Server 注册自身信息,并且会定时发送心跳以保持注册信息的有效性。Eureka Client 可以从 Eureka Server 获取其他服务的注册信息,实现服务间的自动发现。

示例
  • Eureka Server 配置

    # application.yml for Eureka Server
    server:
      port: 8761
    
    eureka:
      client:
        registerWithEureka: false
        fetchRegistry: false
      server:
        enableSelfPreservation: true
    
  • Eureka Client 配置

    # application.yml for Eureka Client
    eureka:
      client:
        serviceUrl:
          defaultZone: http://localhost:8761/eureka/
    

2. Feign - 声明式 HTTP 客户端

原理

Feign 是一种声明式的 HTTP 客户端,它与 Ribbon 集成,实现负载均衡功能。通过 Feign,可以通过简单的注解声明来调用其他微服务的 API。

示例
  • 定义 Feign 客户端接口

    @FeignClient(name = "user-service")
    public interface UserClient {
        @GetMapping("/users/{id}")
        User getUserById(@PathVariable("id") Long id);
    }
    
  • 配置

    feign:
      hystrix:
        enabled: true
    

3. Ribbon - 客户端负载均衡

原理

Ribbon 是客户端负载均衡工具,它在 Eureka 获取服务列表后,在客户端进行负载均衡。Ribbon 提供多种负载均衡策略,如随机、轮询等。

示例
  • 自定义 Ribbon 配置

    # Ribbon配置,设置负载均衡策略
    user-service:
      ribbon:
        NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
    

4. Hystrix - 断路器

原理

Hystrix 是 Netflix 提供的一个容错、延迟和容错控制的组件,用于实现服务的断路、降级和隔离,避免单个服务的故障蔓延到整个系统中。

示例
  • 创建 Hystrix 命令

    @HystrixCommand(fallbackMethod = "getUserByIdFallback")
    public User getUserById(Long id) {
        return userClient.getUserById(id);
    }
    
    public User getUserByIdFallback(Long id) {
        return new User(id, "Default User");
    }
    
  • 配置

    hystrix:
      command:
        default:
          execution:
            isolation:
              thread:
                timeoutInMilliseconds: 2000
    

5. Zuul - API 网关

原理

Zuul 是 Netflix 开源的 API 网关组件,可以实现动态路由、负载均衡、鉴权、过滤等功能。通过 Zuul,可以对外暴露统一的接口,并将请求路由到不同的微服务。

示例
  • Zuul 配置

    zuul:
      routes:
        user-service:
          path: /user-service/**
          serviceId: user-service
    
  • 添加过滤器

    public class PreFilter extends ZuulFilter {
        @Override
        public String filterType() { return "pre"; }
        @Override
        public int filterOrder() { return 1; }
        @Override
        public boolean shouldFilter() { return true; }
        @Override
        public Object run() {
            // Filtering logic here
            return null;
        }
    }
    

6. Spring Cloud Config - 配置中心

原理

Spring Cloud Config 为分布式系统中的服务提供集中化的外部配置管理,支持通过 Git、SVN 等存储库管理配置文件,并通过 Config Server 将配置文件动态推送到各微服务中。

示例
  • Config Server 配置

    # application.yml for Config Server
    server:
      port: 8888
    
    spring:
      cloud:
        config:
          server:
            git:
              uri: https://github.com/your-repo/config-repo
    
  • Client 配置

    spring:
      cloud:
        config:
          uri: http://localhost:8888
    

7. Spring Cloud Bus - 数据总线

原理

Spring Cloud Bus 使用消息代理(如 Kafka 或 RabbitMQ)在分布式系统中传播事件。通常与 Spring Cloud Config 配合使用,Config Server 更新配置时,可以通过 Spring Cloud Bus 自动刷新所有相关服务的配置。

示例
  • 配置 Spring Cloud Bus

    spring:
      cloud:
        bus:
          enabled: true
        stream:
          bindings:
            output:
              destination: springCloudBus
    
  • 刷新配置

    使用 POST 请求刷新所有服务配置:

    curl -X POST http://localhost:8080/actuator/bus-refresh
    

8. Spring Cloud Sleuth - 分布式链路追踪

原理

Sleuth 提供分布式系统中的链路追踪功能,通过在请求的调用链中添加唯一的追踪 ID(traceId)和段 ID(spanId),实现服务之间的调用链路追踪。通常与 Zipkin 或 Jaeger 集成进行可视化追踪。

示例
  • Sleuth 和 Zipkin 配置

    spring:
      sleuth:
        sampler:
          probability: 1.0
      zipkin:
        base-url: http://localhost:9411
    
  • 在代码中使用 Sleuth 追踪

    @Autowired
    private Tracer tracer;
    
    public void doSomething() {
        Span newSpan = tracer.nextSpan().name("doSomething");
        try (Tracer.SpanInScope ws = tracer.withSpanInScope(newSpan.start())) {
            // 执行逻辑
        } finally {
            newSpan.end();
        }
    }
    

总结

  • Eureka:服务注册与发现,用于微服务间的自动发现。
  • Feign:声明式 HTTP 客户端,简化服务间通信。
  • Ribbon:客户端负载均衡,分配服务请求。
  • Hystrix:断路器,处理服务故障和降级。
  • Zuul:API 网关,实现统一的外部接口和动态路由。
  • Spring Cloud Config:集中化配置管理,实现动态配置。
  • Spring Cloud Bus:消息总线,实现配置的分布式刷新。
  • Spring Cloud Sleuth:分布式链路追踪,监控服务间调用链。

这些组件共同组成了 Spring Cloud 微服务架构的核心,帮助开发者实现高可用、可扩展的分布式系统。


http://www.kler.cn/a/381987.html

相关文章:

  • 如何解决 ‘adb‘ 不是内部或外部命令,也不是可运行的程序或批处理文件的问题
  • 机器学习04-为什么Relu函数
  • Zabbix6.0升级为7.2
  • lodash常用函数
  • 深入理解 Linux wc 命令
  • ChatGPT之父:奥尔特曼
  • ctfshow(89,90,92,93)--PHP特性--intval函数
  • 【RDD算子的分类】RDD的转换算子和触发算子(行为算子)、以及各个算子的作用,对比sql中的关键字
  • 【系统架构设计师(第2版)】十一、未来信息综合技术
  • Hearts of Iron IV 之 Archive Modification
  • HTML+javaScript+CSS
  • 【个人记录】screen和tmux
  • “农田奇迹:如何用遥感技术实现作物分类与产量精准估算“
  • Java:获取HttpServletRequest请求参数
  • PostgreSQL 到 PostgreSQL 数据迁移同步
  • 计算机网络——网络层导论
  • 云渲染与汽车CGI图像技术优势和劣势
  • 用 Python 写了一个天天酷跑(附源码)
  • 【docker入门】docker的安装
  • vue3中setup的作用是什么?
  • ELK实现加载多个配置日志文件
  • Jest进阶:测试 Vue 组件
  • WAPI认证过程如何实现?
  • stm32引脚PB3、PB4、PA15作为普通IO口用时,需要先解除调试端口复用
  • 基于SSM+uniapp的营养食谱系统+LW参考示例
  • 【数据结构与算法】LeetCode: 贪心算法