🔀
Advanced REST Patterns

REST in Microservices

Service-to-Service Communication
💡 Microservices ke BEECH, REST communication, EK OFFICE mein, DIFFERENT DEPARTMENTS ke BEECH, "FORMAL MEMOS" BHEJNE jaisa hai — HAR DEPARTMENT (SERVICE), APNA KAAM, INDEPENDENTLY karta hai, LEKIN, ZAROORAT PADНE PAR, DUSRE DEPARTMENT ko, EK STRUCTURED REQUEST (REST CALL) BHEJTA hai.

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
}
🔀
Microservices ke BEECH, REST communication, EK OFFICE mein, DIFFERENT DEPARTMENTS ke BEECH, "FORMAL MEMOS" BHEJNE jaisa hai — HAR DEPARTMENT (SERVICE), APNA KAAM, INDEPENDENTLY karta hai, LEKIN, ZAROORAT PADНE PAR, DUSRE DEPARTMENT ko, EK STRUCTURED REQUEST (REST CALL) BHEJTA hai.
1 / 2
⚡ Quick Recap
  • 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
Is page mein (2 subtopics)

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