Spring Cloud微服务实战指南
引言
Spring Cloud是一个用于构建微服务架构的强大框架。本文将介绍Spring Cloud的核心组件和最佳实践。
核心组件
服务注册与发现 (Eureka)
java
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
// application.yml
server:
port: 8761
eureka:
client:
registerWithEureka: false
fetchRegistry: false
配置中心 (Config)
java
@EnableConfigServer
@SpringBootApplication
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
// application.yml
spring:
cloud:
config:
server:
git:
uri: https://github.com/your-repo/config
searchPaths: config
服务网关 (Gateway)
java
@EnableDiscoveryClient
@SpringBootApplication
public class GatewayApplication {
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
return builder.routes()
.route("user_service", r -> r.path("/users/**")
.uri("lb://user-service"))
.route("order_service", r -> r.path("/orders/**")
.uri("lb://order-service"))
.build();
}
}
服务熔断与降级
Resilience4j配置
java
@RestController
@RequestMapping("/api")
public class UserController {
@CircuitBreaker(name = "userService", fallbackMethod = "fallback")
@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id) {
return userService.getUser(id);
}
public User fallback(Long id, Exception e) {
return new User(id, "默认用户");
}
}
// application.yml
resilience4j.circuitbreaker:
instances:
userService:
slidingWindowSize: 10
failureRateThreshold: 50
waitDurationInOpenState: 5000
分布式追踪
Sleuth + Zipkin
java
@SpringBootApplication
@EnableDiscoveryClient
public class ServiceApplication {
@Bean
public Sampler defaultSampler() {
return Sampler.ALWAYS_SAMPLE;
}
}
// application.yml
spring:
sleuth:
sampler:
probability: 1.0
zipkin:
base-url: http://localhost:9411
消息总线
Spring Cloud Bus
java
@RefreshScope
@RestController
@RequestMapping("/config")
public class ConfigController {
@Value("${config.name}")
private String configName;
@GetMapping("/name")
public String getConfigName() {
return configName;
}
}
// application.yml
spring:
cloud:
bus:
enabled: true
refresh:
enabled: true
rabbitmq:
host: localhost
port: 5672
负载均衡
LoadBalancer配置
java
@Configuration
public class LoadBalancerConfig {
@Bean
public ReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment,
LoadBalancerClientFactory loadBalancerClientFactory) {
String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
return new RandomLoadBalancer(loadBalancerClientFactory
.getLazyProvider(name, ServiceInstanceListSupplier.class),
name);
}
}
安全认证
OAuth2配置
java
@EnableResourceServer
@Configuration
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/api/public/**").permitAll()
.antMatchers("/api/private/**").authenticated();
}
}
// application.yml
security:
oauth2:
resource:
jwt:
key-uri: http://auth-server/oauth/token_key
服务监控
Spring Boot Admin
java
@EnableAdminServer
@SpringBootApplication
public class AdminApplication {
public static void main(String[] args) {
SpringApplication.run(AdminApplication.class, args);
}
}
// application.yml
spring:
boot:
admin:
context-path: /admin
monitor:
period: 10000
最佳实践
服务拆分
- 领域驱动设计
- 单一职责原则
- 合理粒度
配置管理
- 环境隔离
- 配置中心
- 动态刷新
容错处理
- 熔断降级
- 重试机制
- 限流保护
监控告警
- 健康检查
- 性能监控
- 日志追踪
性能优化
- JVM调优
java
-Xms2g
-Xmx2g
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
- 连接池配置
yaml
spring:
datasource:
hikari:
maximum-pool-size: 10
minimum-idle: 5
idle-timeout: 300000
- 缓存使用
java
@Cacheable(value = "users", key = "#id")
public User getUser(Long id) {
return userRepository.findById(id);
}
部署架构
- 容器化部署
yaml
version: '3'
services:
eureka:
image: eureka-server
ports:
- "8761:8761"
config:
image: config-server
depends_on:
- eureka
- 高可用配置
yaml
eureka:
client:
serviceUrl:
defaultZone: http://eureka1:8761/eureka/,http://eureka2:8762/eureka/
常见问题
服务注册
- 服务发现延迟
- 心跳超时
- 注册中心同步
配置管理
- 配置刷新
- 环境隔离
- 安全性
分布式事务
- 数据一致性
- 补偿机制
- 幂等性
参考资料
- Spring Cloud官方文档
- Spring Boot实战
- 微服务架构设计模式
- 分布式系统原理
- 云原生应用开发指南