WebFlux के साथ अतुल्यकालिक संसाधन
अत्यधिक समवर्ती और स्केलेबल API बनाने के लिए Spring WebFlux के साथ रिएक्टिव प्रोग्रामिंग लागू करें।
WebFlux के साथ अतुल्यकालिक संसाधन, CoddyKit पर Spring Boot 4 माइक्रोसर्विस और REST API का एक निःशुल्क पाठ है। यह 9 में से 2वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Spring Boot 4 माइक्रोसर्विस और REST API सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Spring Boot 4 माइक्रोसर्विस और REST API पाठ्यक्रम में कुल 9 पाठ शामिल हैं।
रिएक्टिव क्यों? अवरोधन की समस्या
पारंपरिक अनुप्रयोगों में, जब आपके कोड को किसी चीज़ के लिए प्रतीक्षा करनी पड़ती है, जैसे डेटाबेस क्वेरी या बाहरी API कॉल, तो वह अक्सर वर्तमान थ्रेड को अवरुद्ध कर देता है।
इसका अर्थ है कि कार्रवाई पूरी होने तक थ्रेड कोई और काम नहीं कर सकता। बहुत-से समवर्ती उपयोगकर्ताओं की स्थिति में इससे ये समस्याएँ हो सकती हैं:
- अधिक संसाधन खपत, क्योंकि बहुत-से थ्रेड आवश्यक होते हैं।
- भारी लोड में धीमा प्रतिक्रिया समय।
- सीमित स्केलेबिलिटी।
Spring WebFlux का परिचय
Spring WebFlux, Spring का रिएक्टिव वेब ढाँचा है, जो Project Reactor पर आधारित है। यह आपको अतुल्यकालिक और गैर-अवरोधक अनुप्रयोग बनाने की सुविधा देता है।
प्रति-अनुरोध एक थ्रेड मॉडल का उपयोग करने वाले Spring MVC के विपरीत, WebFlux इवेंट-लूप मॉडल का उपयोग करता है। इसका अर्थ है कि कुछ ही थ्रेड अनेक समवर्ती अनुरोधों को कुशलता से संभाल सकते हैं, जिससे आपका API अधिक स्केलेबल बनता है।
मूल अवधारणाएँ: Mono और Flux
Spring WebFlux में रिएक्टिव प्रोग्रामिंग के केंद्र में Project Reactor के दो प्रकाशक होते हैं:
- Mono: ऐसी स्ट्रीम को दर्शाता है जो 0 या 1 आइटम भेजती है और फिर पूरी हो जाती है, या त्रुटि देती है। इसे भविष्य में मिलने वाले वैकल्पिक मान की तरह समझिए।
- Flux: ऐसी स्ट्रीम को दर्शाता है जो 0 से N आइटम भेजती है और फिर पूरी हो जाती है, या त्रुटि देती है। इसका उपयोग संग्रह या डेटा की सतत स्ट्रीम के लिए किया जाता है।
जब तक कोई इन्हें सब्सक्राइब नहीं करता, ये कुछ भी नहीं करते!
आपका पहला रिएक्टिव एंडपॉइंट
आइए एक बुनियादी WebFlux नियंत्रक बनाते हैं। ध्यान दें कि हम साधारण Mono<String> के बजाय Mono<String> लौटाते हैं। इससे Spring WebFlux को पता चलता है कि प्रतिक्रिया को प्रतिक्रियात्मक तरीके से संभालना है।
इस उदाहरण को चलाकर देखें और अपने ब्राउज़र में /hello खोलें।
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Mono;
@SpringBootApplication
@RestController
public class WebfluxApp {
public static void main(String[] args) {
SpringApplication.run(WebfluxApp.class, args);
}
@GetMapping("/hello")
public Mono<String> hello() {
return Mono.just("Hello, WebFlux!");
}
}‘map’ से डेटा का रूपांतरण
Mono और Flux डेटा का रूपांतरण करने के लिए ऑपरेटर उपलब्ध कराते हैं। map() ऑपरेटर उत्सर्जित की गई प्रत्येक वस्तु पर एक समकालिक फ़ंक्शन लागू करता है।
यहाँ हम "hello" स्ट्रिंग को बड़े अक्षरों में बदलते हैं। मूल डेटा बदला नहीं जाता, बल्कि एक नया रूपांतरित मान उत्सर्जित किया जाता है।
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Mono;
@SpringBootApplication
@RestController
public class WebfluxApp {
public static void main(String[] args) {
SpringApplication.run(WebfluxApp.class, args);
}
@GetMapping("/greet")
public Mono<String> greet() {
return Mono.just("hello")
.map(String::toUpperCase)
.map(s -> s + " WORLD!");
}
}Flux से संग्रहों के साथ काम करना
जब आपको कई वस्तुओं की धारा लौटानी हो, तो Flux आपका प्रमुख प्रकाशक है। यह समय के साथ शून्य, एक या कई वस्तुएँ उत्सर्जित कर सकता है।
यहाँ फलों का Flux<String> लौटाने का उदाहरण है। पहुँचने पर, क्लाइंट के Accept हेडर के आधार पर ब्राउज़र को वस्तुएँ JSON सरणी या धारा के रूप में प्राप्त होंगी।
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;
@SpringBootApplication
@RestController
public class WebfluxApp {
public static void main(String[] args) {
SpringApplication.run(WebfluxApp.class, args);
}
@GetMapping("/fruits")
public Flux<String> getFruits() {
return Flux.just("Apple", "Banana", "Cherry", "Date");
}
}व्यावहारिक उदाहरण: प्रतिक्रियाशील User सेवा
आइए अब तक सीखी गई बातों को एक साथ लागू करते हैं। एक सरल User डेटा क्लास की कल्पना कीजिए। हम ऐसी सेवा बना सकते हैं जो Flux<User> लौटाए और थोड़ी देरी के साथ डेटाबेस से User प्राप्त करने का अनुकरण करे, ताकि असमकालिकता प्रदर्शित की जा सके।
यह एंडपॉइंट सभी User के उपलब्ध होने की प्रतीक्षा करने के बजाय, उनके उपलब्ध होते ही उन्हें धारा के रूप में भेजेगा।
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import java.time.Duration;
@SpringBootApplication
@RestController
public class WebfluxApp {
public static void main(String[] args) {
SpringApplication.run(WebfluxApp.class, args);
}
record User(String id, String name) {}
@GetMapping("/users")
public Flux<User> getUsers() {
return Flux.just(
new User("1", "Alice"),
new User("2", "Bob"),
new User("3", "Charlie")
)
.delayElements(Duration.ofMillis(500)); // Simulate async delay
}
@GetMapping("/users/{id}")
public Mono<User> getUserById(String id) {
return Mono.just(new User(id, "User " + id))
.delayElement(Duration.ofSeconds(1));
}
}त्रुटियों का सहज प्रबंधन
प्रतिक्रियाशील धाराएँ विफल हो सकती हैं। WebFlux त्रुटियों को सहजता से संभालने के लिए onErrorResume() या onErrorReturn() जैसे ऑपरेटर उपलब्ध कराता है। इनके द्वारा आप कोई वैकल्पिक मान या कोई दूसरी प्रतिक्रियाशील धारा दे सकते हैं।
त्रुटि प्रबंधन के बिना, विफल धारा उस त्रुटि को सब्सक्राइबर तक पहुँचा देगी, जिससे एप्लिकेशन क्रैश हो सकता है या अवांछित HTTP 500 स्थिति उत्पन्न हो सकती है।
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Mono;
@SpringBootApplication
@RestController
public class WebfluxApp {
public static void main(String[] args) {
SpringApplication.run(WebfluxApp.class, args);
}
@GetMapping("/fail")
public Mono<String> failingEndpoint() {
return Mono.error(new RuntimeException("Something went wrong!"))
.onErrorResume(e -> {
System.err.println("Error: " + e.getMessage());
return Mono.just("Fallback Message");
});
}
}WebFlux मापनीयता क्यों बढ़ाता है
WebFlux अपनाकर आपके एप्लिकेशन अधिक थ्रूपुट और संसाधनों का बेहतर उपयोग प्राप्त कर सकते हैं, विशेष रूप से इनपुट/आउटपुट-आधारित कार्यों में। ऐसा इसलिए है:
- कम थ्रेड: कम संख्या में थ्रेड बड़ी संख्या में समवर्ती कनेक्शन संभाल सकते हैं।
- अवरोधरहित: थ्रेड निष्क्रिय होकर प्रतीक्षा नहीं करते; इनपुट/आउटपुट संचालन पूरा होने तक वे अन्य अनुरोध संभालते हैं।
- संसाधनों का कुशल उपयोग: अधिक भार के दौरान मेमोरी और CPU का उपयोग कम होता है।
इसी कारण WebFlux उन माइक्रोसर्विस के लिए आदर्श है जो बाहरी प्रणालियों के साथ बार-बार संपर्क करती हैं।
प्रतिक्रियाशील प्रकारों की त्वरित जाँच
उन मूल प्रतिक्रियाशील प्रकारों पर विचार कीजिए जिन्हें हमने अभी सीखा है।
पुनरावलोकन: WebFlux के साथ प्रतिक्रियाशील प्रोग्रामिंग अपनाना
बहुत अच्छा! आपने Spring WebFlux के साथ असमकालिक प्रोग्रामिंग की दिशा में अपने पहले कदम उठा लिए हैं।
- हमने सीखा कि अवरोधक इनपुट/आउटपुट मापनीयता को सीमित करता है।
- Spring WebFlux एक अवरोधरहित, प्रतिक्रियाशील विकल्प उपलब्ध कराता है।
- Mono 0 से 1 वस्तु संभालता है, जबकि Flux 0 से N वस्तुएँ संभालता है।
- ये प्रकाशक संसाधनों के अधिक कुशल उपयोग और अधिक समवर्ती कार्य संभव बनाते हैं।
अब जानिए कि शुरू से अंत तक अवरोधरहित एप्लिकेशन बनाने के लिए WebFlux को प्रतिक्रियाशील डेटा रिपॉज़िटरी के साथ कैसे जोड़ा जाता है!
एआई शिक्षक के साथ Java सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 24
- पाठ
- 93
अक्सर पूछे जाने वाले प्रश्न
क्या “WebFlux के साथ अतुल्यकालिक संसाधन” पाठ निःशुल्क है?
हाँ—“WebFlux के साथ अतुल्यकालिक संसाधन” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Spring Boot 4 माइक्रोसर्विस और REST API पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Spring Boot 4 माइक्रोसर्विस और REST API पाठ्यक्रम में कुल 9 पाठ शामिल हैं।
“WebFlux के साथ अतुल्यकालिक संसाधन” में मैं क्या सीखूँगा?
अत्यधिक समवर्ती और स्केलेबल API बनाने के लिए Spring WebFlux के साथ रिएक्टिव प्रोग्रामिंग लागू करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Spring Boot 4 माइक्रोसर्विस और REST API का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Spring Boot 4 माइक्रोसर्विस और REST API शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Spring Boot 4 माइक्रोसर्विस और REST API शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 9 में से 2वाँ पाठ है।
“WebFlux के साथ अतुल्यकालिक संसाधन” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Spring Boot 4 माइक्रोसर्विस और REST API पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Spring Boot 4 माइक्रोसर्विस और REST API पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- संदेश प्रवाह का अनुकूलन
- WebFlux के साथ अतुल्यकालिक संसाधन
- डेटा संरचना का अनुकूलन
- उपभोक्ताओं और उत्पादकों की स्केलिंग
- माइक्रोसर्विस के लिए कैशिंग रणनीतियाँ
- विरूपीकरण की रणनीतियाँ
- डेटाबेस शार्डिंग और प्रतिकृति
- डेटाबेस की निगरानी और त्रुटि-निवारण
- RabbitMQ प्रदर्शन का मानदंड परीक्षण