Spring Cloud 是一系列框架的集合,它利用了 Spring Boot 的开发便利性,提供了微服务开发中所需的各种工具,包括配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态等。以下是 Spring Cloud 中一些主要的组件:

1. Spring Cloud Config

用于集中化管理所有微服务环境下的配置,可以将配置放到远程服务器,集中化管理配置,当配置发生变更时,可以实时刷新到各个微服务中。

用途:集中管理配置文件,支持动态刷新配置。

     # config-server.yml (Config Server 配置)
     spring:
       cloud:
         config:
           server:
             git:
               uri: https://github.com/your-repo/config-repo.git # 配置仓库地址
               searchPaths: config # 指定配置文件路径

     # application.yml (客户端配置)
     spring:
       cloud:
         config:
           uri: http://config-server:8888 # 配置中心地址
           fail-fast: true
           enabled: true

2. Spring Cloud Netflix Eureka

基于 Netflix Eureka 的服务发现与注册中心实现,允许各个微服务实例向 Eureka Server 注册自身,并且可以相互发现彼此的位置,从而实现服务之间的调用。

用途:服务发现与注册

   # eureka-server.yml (Eureka Server 配置)
   spring:
     application:
       name: eureka-server
   server:
     port: 8761
   eureka:
     instance:
       hostname: localhost
     client:
       registerWithEureka: false
       fetchRegistry: false
       serviceUrl:
         defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

   # service.yml (服务实例配置)
   spring:
     application:
       name: my-service
   eureka:
     client:
       serviceUrl:
         defaultZone: http://localhost:8761/eureka/

3. Spring Cloud Netflix Hystrix

提供了断路器功能,隔离了远程系统、服务和第三方库的访问点,当出现故障时能够快速失败,避免级联效应。

用途:断路器模式,防止雪崩效应。

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;

@RestController
public class MyController {

    @GetMapping("/service")
    @HystrixCommand(fallbackMethod = "fallback")
    public String callService() {
        // 调用远程服务
        return restTemplate.getForObject("http://remote-service", String.class);
    }

    public String fallback() {
        return "Fallback method invoked!";
    }
}

4. Spring Cloud Netflix Ribbon

基于 Netflix Ribbon 实现的客户端负载均衡库,可以在消费端实现对服务端请求的负载均衡策略。

用途:微服务架构中的路由转发和过滤。

#application.yml 配置文
spring:
  application:
    name: zuul-gateway
server:
  port: 8765
zuul:
  routes:
    provider-service:
      path: /provider-service/**
      url: http://localhost:8080
    consumer-service:
      path: /consumer-service/**
      url: http://localhost:8081

#provider-service 的application.yml 配置文件
spring:
  application:
    name: provider-service
server:
  port: 8080


#consumer-service 的application.yml 配置文件
spring:
  application:
    name: consumer-service
server:
  port: 8081

5. Spring Cloud Netflix Zuul

边缘服务应用,为微服务架构集群提供代理、过滤、路由等功能,常被用来做API网关。

用途:API网关,路由请求到不同微服务。

 # zuul-gateway.yml (Zuul 网关配置)
 zuul:
   routes:
     my-service:
       path: /my-service/**
       url: http://localhost:8080

java代码实现:

 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.cloud.netflix.zuul.EnableZuulProxy;

 @SpringBootApplication
 @EnableZuulProxy
 public class ZuulGatewayApplication {

     public static void main(String[] args) {
         SpringApplication.run(ZuulGatewayApplication.class, args);
     }
 }

6. Spring Cloud Bus

用于简化应用程序之间或应用程序与消息代理之间的集成工作,可以用于事件发布、服务间通信,也可以用于在集群(例如配置变化事件)中广播消息。

用途:简化应用程序之间的事件发布和订阅机制

 application.yml 配置文件
 spring:
   rabbitmq:
     host: localhost
     port: 5672
     username: guest
     password: guest
   cloud:
     bus:
       enabled: true
       trace: true

 provider-service 创建一个简单的服务提供者,暴露一个 REST API,并监听配置更新事件。

 spring:
   application:
     name: provider-service
   cloud:
    config:
       uri: http://localhost:8888
   rabbitmq:
     host: localhost
     port: 5672
     username: guest
     password: guest
   cloud:
     bus:
       enabled: true
       trace: true



 consumer-service 创建一个服务消费者,暴露一个 REST API,并监听配置更新事件。
 spring:
   application:
     name: consumer-service
   cloud:
     config:
       uri: http://localhost:8888
   rabbitmq:
     host: localhost
     port: 5672
     username: guest
     password: guest
   cloud:
     bus:
       enabled: true
       trace: true

7. Spring Cloud Sleuth

为微服务架构下的服务提供了追踪支持,通常与 Zipkin 配合使用,可以收集服务间的调用链路数据,便于问题排查。

用途:跟踪微服务间的调用链路。
java代码实现:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TracingController {

    @GetMapping("/trace")
    public String trace() {
        // 业务逻辑
        return "Traced";
    }
}

玉喵
1 声望2 粉丝

学习成长的鸡肋 好好好不积累要鸡肋