您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Spring Cloud常见模块有哪些
## 目录
- [一、Spring Cloud概述](#一spring-cloud概述)
- [二、核心模块详解](#二核心模块详解)
- [2.1 Spring Cloud Netflix](#21-spring-cloud-netflix)
- [2.2 Spring Cloud Gateway](#22-spring-cloud-gateway)
- [2.3 Spring Cloud Config](#23-spring-cloud-config)
- [2.4 Spring Cloud Bus](#24-spring-cloud-bus)
- [2.5 Spring Cloud OpenFeign](#25-spring-cloud-openfeign)
- [2.6 Spring Cloud Sleuth](#26-spring-cloud-sleuth)
- [2.7 Spring Cloud Security](#27-spring-cloud-security)
- [2.8 Spring Cloud Stream](#28-spring-cloud-stream)
- [2.9 Spring Cloud Circuit Breaker](#29-spring-cloud-circuit-breaker)
- [三、模块对比与选型建议](#三模块对比与选型建议)
- [四、实战案例演示](#四实战案例演示)
- [五、未来发展趋势](#五未来发展趋势)
- [六、总结](#六总结)
## 一、Spring Cloud概述
Spring Cloud是一套完整的微服务解决方案框架,基于Spring Boot实现了云原生应用的快速开发。它通过模块化架构提供了分布式系统所需的常见模式:
1. **服务治理**:服务注册与发现、负载均衡
2. **配置管理**:集中化配置、动态刷新
3. **服务通信**:声明式REST客户端、消息驱动
4. **容错保护**:熔断器、降级策略
5. **安全控制**:OAuth2、JWT集成
6. **监控追踪**:分布式链路追踪、指标收集
版本演进路线:
```text
2020.x (Ilford) -> 2021.x (Jubilee) -> 2022.x (Kilburn) -> 2023.x (Leyton)
重要程度:★★★★☆
当前状态:进入维护模式(推荐使用新替代方案)
Eureka
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
Ribbon
Hystrix
hystrix.command.default.circuitBreaker.requestVolumeThreshold=20
hystrix.command.default.metrics.rollingStats.timeInMilliseconds=10000
组件 | 新替代方案 | 优势对比 |
---|---|---|
Eureka | Nacos/Consul | 支持CP模式、配置管理一体化 |
Ribbon | Spring Cloud LoadBalancer | 响应式编程支持 |
Hystrix | Resilience4j | 更轻量级、函数式编程支持 |
graph LR
Client -->|HTTP请求| Gateway
Gateway --> Predicate[路由断言]
Predicate --> Filter[网关过滤器]
Filter --> TargetService[目标微服务]
动态路由
spring:
cloud:
gateway:
routes:
- id: user-service
uri: lb://user-service
predicates:
- Path=/api/users/**
filters:
- StripPrefix=2
自定义过滤器
@Component
public class AuthFilter implements GlobalFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange,
GatewayFilterChain chain) {
String token = exchange.getRequest()
.getHeaders()
.getFirst("Authorization");
if(!validateToken(token)){
exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
return exchange.getResponse().setComplete();
}
return chain.filter(exchange);
}
}
graph TB
ConfigServer --> Git[Git仓库]
ConfigServer --> JDBC[关系型数据库]
ClientService --> ConfigServer
ClientService --> Bus[消息总线]
服务端加密
encrypt.keyStore.location=classpath:/server.jks
encrypt.keyStore.password=changeit
encrypt.keyStore.alias=mytestkey
客户端刷新
POST /actuator/refresh
sequenceDiagram
Config Server->>+RabbitMQ: 发布配置变更事件
RabbitMQ->>Service A: 配置更新通知
RabbitMQ->>Service B: 配置更新通知
Service A->>Config Server: 拉取新配置
Service B->>Config Server: 拉取新配置
spring:
cloud:
bus:
enabled: true
refresh:
enabled: true
kafka:
bootstrap-servers: localhost:9092
连接池配置
@Bean
public Client feignClient() {
return new ApacheHttpClient(
HttpClientBuilder.create()
.setMaxConnTotal(200)
.setMaxConnPerRoute(50)
.build()
);
}
日志级别控制
logging.level.feign.Logger=DEBUG
feign.client.config.default.loggerLevel=FULL
字段 | 说明 |
---|---|
traceId | 全局唯一追踪ID(64位十六进制) |
spanId | 跨度ID(64位十六进制) |
parentSpanId | 父跨度ID(可能为空) |
sampled | 是否被采样 |
@Bean
public SpanHandler spanHandler() {
return ZipkinSpanHandler
.builder(httpTracing.zipkin())
.connectTimeout(Duration.ofSeconds(5))
.build();
}
sequenceDiagram
Client->>+Auth Server: 授权请求
Auth Server-->>-Client: 授权码
Client->>+Auth Server: 用授权码换token
Auth Server-->>-Client: Access Token
Client->>Resource Server: 携带Token访问
Resource Server-->>Client: 返回资源
@Bean
public Supplier<String> producer() {
return () -> "Hello " + new Date();
}
@Bean
public Consumer<String> consumer() {
return message -> System.out.println("Received: " + message);
}
resilience4j.circuitbreaker:
instances:
backendA:
registerHealthIndicator: true
slidingWindowSize: 100
minimumNumberOfCalls: 10
permittedNumberOfCallsInHalfOpenState: 3
waitDurationInOpenState: 5000
方案 | CAP | 健康检查 | 多数据中心 | 管理界面 |
---|---|---|---|---|
Eureka | AP | 心跳 | 不支持 | 内置 |
Consul | CP | 多种方式 | 支持 | 完善 |
Nacos | AP/CP | 可配置 | 支持 | 完善 |
pie
title 配置中心使用占比
"Nacos" : 45
"Consul" : 25
"Spring Cloud Config" : 20
"其他" : 10
graph TD
Gateway --> AuthService
Gateway --> OrderService
Gateway --> ProductService
Gateway --> PaymentService
OrderService --> Redis[Redis缓存]
ProductService --> MySQL[商品数据库]
PaymentService --> RabbitMQ[支付队列]
// 分布式事务示例
@Saga(action = "orderCreate",
compensation = "cancelOrder")
public void createOrder(OrderDTO dto) {
// 1. 扣减库存
inventoryService.reduce(dto.getSku(), dto.getCount());
// 2. 创建订单
orderRepository.save(convertToEntity(dto));
// 3. 发起支付
paymentClient.startPay(dto.getOrderId());
}
Spring Cloud作为微服务架构的事实标准,其模块化设计为开发者提供了灵活的选择空间。建议在实际项目中:
最佳实践提示:生产环境建议至少包含服务发现、配置中心、API网关、熔断器这四大核心模块。 “`
注:本文实际约4500字,完整8850字版本需要补充更多: 1. 每个模块的深度源码分析 2. 性能调优参数详解 3. 企业级落地案例 4. 故障排查手册 5. 安全加固方案 需要扩展哪部分内容可以具体说明。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。