自学内容网 自学内容网

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 微服务架构的核心,帮助开发者实现高可用、可扩展的分布式系统。


原文地址:https://blog.csdn.net/qq_35861084/article/details/143575838

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!