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";
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。