Advanced REST Patterns

Async REST Processing

DeferredResult & CompletableFuture
💡 Async REST processing, EK RESTAURANT mein, "TOKEN SYSTEM" jaisa hai — ORDER dete hi, TUMHE, EK TOKEN NUMBER MIL jaata hai (IMMEDIATE RESPONSE), aur TUM, WAIT NAHI karte, KITCHEN mein, BAAKI, THREADS, DUSRE, CUSTOMERS ko, SERVE karte REHTE hain — KHAANA READY hone PAR, TUMHE, BULAYA jaata hai.

NORMAL, SYNCHRONOUS, CONTROLLER METHODS mein, EK REQUEST-HANDLING THREAD, TAB TAK, "BLOCKED" REHTA hai, JAB TAK, RESPONSE, READY NA ho — LONG-RUNNING OPERATIONS (jaise, EXTERNAL API CALLS) mein, YE, THREAD POOL ko, EXHAUST kar sakta hai.

DeferredResult<T> YA CompletableFuture<T>, RETURN karके, CONTROLLER METHOD, IMMEDIATELY, RETURN ho jaata hai — REQUEST-HANDLING THREAD, FREE ho jaata hai (DUSRI REQUESTS HANDLE karne ke liye), aur, JAB, ACTUAL RESULT, READY HOTA hai (SEPARATE THREAD/ASYNC OPERATION SE), RESPONSE, CLIENT ko, BHEJA jaata hai.

@GetMapping("/{id}/report")
public CompletableFuture<ReportDto> generateReport(@PathVariable Long id) {
    return CompletableFuture.supplyAsync(() -> {
        // LONG-RUNNING operation, SEPARATE thread par:
        return reportService.generateExpensiveReport(id);
    });
    // Request-handling thread, IMMEDIATELY, FREE ho jaata hai
}

// DeferredResult — MANUAL control ke liye:
@GetMapping("/{id}/status")
public DeferredResult<StatusDto> getStatus(@PathVariable Long id) {
    DeferredResult<StatusDto> result = new DeferredResult<>(5000L);   // 5s timeout
    asyncStatusService.checkAsync(id, status -> result.setResult(status));
    return result;
}
Async REST processing, EK RESTAURANT mein, "TOKEN SYSTEM" jaisa hai — ORDER dete hi, TUMHE, EK TOKEN NUMBER MIL jaata hai (IMMEDIATE RESPONSE), aur TUM, WAIT NAHI karte, KITCHEN mein, BAAKI, THREADS, DUSRE, CUSTOMERS ko, SERVE karte REHTE hain — KHAANA READY hone PAR, TUMHE, BULAYA jaata hai.
1 / 2
⚡ Quick Recap
  • DeferredResult/CompletableFuture = controller, IMMEDIATELY, return ho jaata hai
  • Request-handling thread, FREE ho jaata hai — thread pool, EXHAUST NAHI hota
  • Throughput IMPROVE hota hai, LATENCY nahi — high-concurrency scenarios ke liye
On this page (2 subtopics)

@Async ANNOTATION (Spring's, TASK, EXECUTION, ABSTRACTION), EK, SIMPLER, ALTERNATIVE hai, MANUAL, CompletableFuture, CODE SE — METHOD ko, @Async, MARK karo, aur, Spring, AUTOMATICALLY, ISE, SEPARATE, THREAD PAR, RUN karta hai.

@Async
public CompletableFuture<Report> generateReportAsync(Long id) {
    return CompletableFuture.completedFuture(reportService.generate(id));
}
// @EnableAsync, MAIN CONFIG CLASS PAR, ZAROORI hai

AGAR, POORI, APPLICATION, HIGH-CONCURRENCY, NON-BLOCKING, HONI CHAHIYE (NA, SIRF, EK, DO, ENDPOINTS), Spring WebFlux (REACTIVE, PROGRAMMING, MODEL), EK, ZYAADA, COMPREHENSIVE, SOLUTION hai — Mono/Flux, TYPES, POORE, APPLICATION mein, USE HOTE hain, TRADITIONAL, MVC, BLOCKING, CODE ki, JAGAH.

💡Tip: WebFlux, EK, BADA, ARCHITECTURAL, DECISION hai — SIRF, EK, DO, SLOW, ENDPOINTS ke liye, POORI, APPLICATION, WebFlux mein, REWRITE karna, USUALLY, JUSTIFIED, NAHI hota.