弹性系统设计(Resilience4j)
- 熔断与降级
java
// 1. 配置熔断器
CircuitBreakerConfig config = CircuitBreakerConfig.custom()
.failureRateThreshold(50)
.waitDurationInOpenState(Duration.ofMillis(1000))
.build();
CircuitBreaker circuitBreaker = CircuitBreaker.of("orderService", config);
// 2. 使用注解
@CircuitBreaker(name = "orderService", fallbackMethod = "fallback")
public Order getOrder(String id) {
return orderClient.findById(id);
}
public Order fallback(String id, Exception ex) {
return Order.emptyOrder(); // 降级响应
}
2. 限流与重试
java
// 限流器配置
RateLimiterConfig rateLimiterConfig = RateLimiterConfig.custom()
.limitRefreshPeriod(Duration.ofSeconds(1))
.limitForPeriod(10) // 每秒10个请求
.build();
RateLimiter rateLimiter = RateLimiter.of("orderService", rateLimiterConfig);
// 组合使用
CheckedRunnable restrictedCall = RateLimiter
.decorateCheckedRunnable(rateLimiter, this::processOrder);
安全架构(OAuth2 + JWT)
- Spring Security配置
java
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.oauth2ResourceServer(oauth2 -> oauth2.jwt())
.authorizeRequests(auth -> auth
.antMatchers("/public/**").permitAll()
.anyRequest().authenticated()
);
return http.build();
}
}
2. JWT签发与验证
java
// 生成JWT
String token = Jwts.builder()
.setSubject("user1")
.setExpiration(new Date(System.currentTimeMillis() + 3600000))
.signWith(SignatureAlgorithm.HS512, "secret-key")
.compact();
// 解析验证
Claims claims = Jwts.parser()
.setSigningKey("secret-key")
.parseClaimsJws(token)
.getBody();