REST in Microservices
Microservices ARCHITECTURE mein, EK SERVICE, AKSAR, EK DUSRI SERVICE ki, DATA/FUNCTIONALITY, ZAROORAT KARTI hai — RestTemplate (PURANA, BLOCKING) YA WebClient (MODERN, NON-BLOCKING, REACTIVE) SE, YE, INTER-SERVICE, HTTP CALLS, KIYE JAATE hain.
RESILIENCE PATTERNS, ESSENTIAL HAIN, MICROSERVICES COMMUNICATION mein — CIRCUIT BREAKER (Resilience4j), AGAR, EK SERVICE, BAAR-BAAR, FAIL ho rahi hai, TO, FURTHER CALLS, TEMPORARILY, "BLOCK" kar deta hai (FAIL FAST), TAAKI, POORA SYSTEM, CASCADE FAILURE mein, NA JAAYE.
@Service
public class OrderService {
private final WebClient webClient;
public Inventory checkInventory(Long productId) {
return webClient.get()
.uri("http://inventory-service/api/inventory/" + productId)
.retrieve()
.bodyToMono(Inventory.class)
.block(); // synchronous call, MVC context mein
}
}
// Circuit breaker (Resilience4j) ke saath:
@CircuitBreaker(name = "inventoryService", fallbackMethod = "fallbackInventory")
public Inventory checkInventoryResilient(Long productId) {
return webClient.get()
.uri("http://inventory-service/api/inventory/" + productId)
.retrieve().bodyToMono(Inventory.class).block();
}
public Inventory fallbackInventory(Long productId, Exception ex) {
return new Inventory(productId, 0, "UNAVAILABLE"); // GRACEFUL degradation
}- WebClient (modern) / RestTemplate (legacy) = inter-service, HTTP calls
- Circuit Breaker (Resilience4j) = repeated failures par, FAIL FAST, cascade failure AVOID
- Synchronous REST = SIMPLE, LEKIN, tight coupling — async (Kafka), coupling KAM karta hai
Hardcoded, URLs (jaise, "http://inventory-service:8080") ke, BAJAYE, MODERN, MICROSERVICES, SERVICE, DISCOVERY (Eureka, Kubernetes DNS) SE, SERVICE, NAAM SE, EK-DUSRE, ko, DHOONDТE hain — @LoadBalanced, WebClient/RestTemplate, ISE, AUTOMATICALLY, HANDLE karte hain.
@LoadBalanced
@Bean
public WebClient.Builder webClientBuilder() { return WebClient.builder(); }
// Ab, service NAME se, CALL kar sakte ho, IP/PORT, hardcode kiye BINA:
webClientBuilder.build().get().uri("http://inventory-service/api/check").retrieve();Resilience4j's, RETRY, MODULE, FAILED, REQUESTS ko, AUTOMATICALLY, RETRY karta hai, EXPONENTIALLY, INCREASING, DELAY ke SAATH (jaise, 1s, 2s, 4s) — TEMPORARY, NETWORK, GLITCHES SE, RECOVER karne ke liye, USEFUL, LEKIN, CIRCUIT, BREAKER ke, SAATH, COMBINE karna, ZAROORI hai, taaki, ENDLESS, RETRIES, NA HON.
- Retry + exponential backoff = TEMPORARY, glitches SE, GRACEFULLY, RECOVER
- Circuit breaker ke, SAATH, COMBINE karo — WARNA, ENDLESS, retries, HO SAKTE hain