Spring WebFlux for Java: रिएक्टिव प्रोग्रामिंग की पूरी गाइड
1. यह क्या है और क्यों ज़रूरी है
Spring WebFlux एक रिएक्टिव वेब फ्रेमवर्क है जो Spring Framework 5+ इकोसिस्टम का हिस्सा है। यह पारंपरिक Spring MVC का एक विकल्प प्रदान करता है। ब्लॉकिंग (blocking) अप्रोच के विपरीत, जहां हर HTTP रिक्वेस्ट को एक अलग थ्रेड हैंडल करता है, WebFlux एसिंक्रोनस, नॉन-ब्लॉकिंग (non-blocking) इनपुट-आउटपुट मॉडल पर आधारित है। यह न्यूनतम थ्रेड्स के साथ हज़ारों कनेक्शन्स को हैंडल कर सकता है, जो हाई-लोड सिस्टम, माइक्रोसर्विसेज और रियल-टाइम एप्लिकेशन के लिए बेहद ज़रूरी है।
Spring WebFlux की ज़रूरत क्यों है? आज के समय में, जहां यूज़र्स और डिवाइस की संख्या तेज़ी से बढ़ रही है, पारंपरिक सर्वलेट कंटेनर (Tomcat, Jetty) "C10K" समस्या (10,000 कनेक्शन हैंडल करना) का सामना करते हैं। हर थ्रेड मेमोरी लेता है (आमतौर पर ~1 MB प्रति स्टैक), और 10,000 थ्रेड्स पर यह सिर्फ स्टैक के लिए 10 GB RAM हो जाता है। WebFlux रिएक्टिव स्ट्रीम्स (Reactive Streams) मॉडल का उपयोग करके इस समस्या को हल करता है, जहां एक थ्रेड कई रिक्वेस्ट को हैंडल कर सकता है और डेटा तैयार होने पर उनके बीच स्विच कर सकता है।
WebFlux दो प्रकार के सर्वर सपोर्ट करता है: Netty (अनुशंसित, नॉन-ब्लॉकिंग) और Servlet 3.1+ (Tomcat, Jetty, Undertow)। यह Reactor प्रोजेक्ट (Mono और Flux) के साथ पूरी तरह से इंटीग्रेट होता है और @Controller एनोटेशन के साथ-साथ फंक्शनल रूटिंग (Router Functions) का उपयोग कर सकता है। यह इसे हाई-परफॉर्मेंस API, इवेंट सर्वर (SSE), WebSocket एप्लिकेशन और रिएक्टिव डेटाबेस (MongoDB Reactive, R2DBC) के साथ माइक्रोसर्विसेज बनाने के लिए आदर्श बनाता है।
2. इंस्टॉलेशन
Spring WebFlux pip या npm के ज़रिए इंस्टॉल नहीं होता, क्योंकि यह Java के लिए एक लाइब्रेरी है। इसका उपयोग करने के लिए आपको अपने प्रोजेक्ट में डिपेंडेंसी जोड़नी होगी। नीचे Maven और Gradle के लिए सटीक कमांड दिए गए हैं।
Maven (pom.xml)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
<version>3.2.0</version> <!-- नवीनतम वर्जन का उपयोग करें -->
</dependency>
Gradle (build.gradle)
implementation 'org.springframework.boot:spring-boot-starter-webflux:3.2.0'
अगर आप Spring Initializr (start.spring.io) का उपयोग कर रहे हैं, तो डिपेंडेंसी सेक्शन में "Spring Reactive Web" चुनें। डेटाबेस के साथ नॉन-ब्लॉकिंग काम के लिए यह भी जोड़ें:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb-reactive</artifactId>
</dependency>
3. त्वरित शुरुआत — न्यूनतम कार्यशील उदाहरण
एक सरल रिएक्टिव REST कंट्रोलर बनाएं जो ग्रीटिंग लौटाता है। यह उदाहरण एनोटेशन के साथ WebFlux की बुनियादी सेटअप दिखाता है।
// MainApplication.java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
SpringApplication.run(MainApplication.class, args);
}
}
// GreetingController.java
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Mono;
@RestController
public class GreetingController {
@GetMapping("/hello")
public Mono<String> sayHello() {
return Mono.just("Hello from Spring WebFlux!");
}
}
एप्लिकेशन चलाएं और http://localhost:8080/hello खोलें। आपको "Hello from Spring WebFlux!" स्ट्रिंग दिखेगी। ध्यान दें: मेथड Mono<String> लौटाता है, न कि सिर्फ