Java Microservices Skill
Build production microservices with Spring Cloud and distributed system patterns.
Overview
This skill covers microservices architecture with Spring Cloud including service discovery, API gateway, circuit breakers, event-driven communication, and distributed tracing.
When to Use This Skill
Use when you need to:
- •Design microservices architecture
- •Implement service-to-service communication
- •Configure resilience patterns
- •Set up event-driven messaging
- •Add distributed tracing
Topics Covered
Spring Cloud Components
- •Config Server (centralized config)
- •Service Discovery (Eureka, Consul)
- •API Gateway (Spring Cloud Gateway)
- •Load Balancing (Spring Cloud LoadBalancer)
Resilience Patterns
- •Circuit Breaker (Resilience4j)
- •Retry with backoff
- •Bulkhead isolation
- •Rate limiting
Event-Driven Architecture
- •Apache Kafka integration
- •Spring Cloud Stream
- •Saga pattern
- •Event sourcing basics
Observability
- •Distributed tracing (Micrometer)
- •Metrics (Prometheus)
- •Log correlation
Quick Reference
java
// Saga with Choreography
@Component
public class OrderSagaListener {
@KafkaListener(topics = "order.created")
public void handleOrderCreated(OrderCreatedEvent event) {
inventoryService.reserve(event.getItems());
}
@KafkaListener(topics = "payment.failed")
public void handlePaymentFailed(PaymentFailedEvent event) {
// Compensating transaction
inventoryService.release(event.getOrderId());
orderService.cancel(event.getOrderId());
}
}
// Circuit Breaker Configuration
@Configuration
public class ResilienceConfig {
@Bean
public Customizer<Resilience4JCircuitBreakerFactory> cbCustomizer() {
return factory -> factory.configureDefault(id ->
new Resilience4JConfigBuilder(id)
.circuitBreakerConfig(CircuitBreakerConfig.custom()
.failureRateThreshold(50)
.waitDurationInOpenState(Duration.ofSeconds(30))
.slidingWindowSize(10)
.build())
.build());
}
}
// API Gateway Routes
@Configuration
public class GatewayConfig {
@Bean
public RouteLocator routes(RouteLocatorBuilder builder) {
return builder.routes()
.route("orders", r -> r
.path("/api/orders/**")
.filters(f -> f
.stripPrefix(1)
.circuitBreaker(c -> c.setName("order-cb"))
.retry(retry -> retry.setRetries(3)))
.uri("lb://order-service"))
.build();
}
}
Observability Configuration
yaml
management:
tracing:
sampling:
probability: 1.0
endpoints:
web:
exposure:
include: health,info,metrics,prometheus
logging:
pattern:
level: "%5p [${spring.application.name:},%X{traceId:-},%X{spanId:-}]"
Common Patterns
Saga Pattern
code
Order → Inventory → Payment → (Success | Compensate)
Circuit Breaker States
code
CLOSED → (failures exceed threshold) → OPEN OPEN → (wait duration) → HALF_OPEN HALF_OPEN → (success) → CLOSED HALF_OPEN → (failure) → OPEN
Troubleshooting
Common Issues
| Problem | Cause | Solution |
|---|---|---|
| Cascade failure | No circuit breaker | Add Resilience4j |
| Message lost | No ack | Enable manual ack |
| Inconsistent data | No compensation | Implement saga |
| Service not found | Discovery delay | Tune heartbeat |
Debug Checklist
code
□ Trace request (traceId) □ Check circuit breaker state □ Verify Kafka consumer lag □ Review gateway routes □ Monitor retry counts
Usage
code
Skill("java-microservices")
Related Skills
- •
java-spring-boot- Spring Cloud - •
java-docker- Containerization