पाठ 35 / 35
रिएक्टिव प्रोग्रामिंग परिचय
रिएक्टिव स्ट्रीम जो समस्या हल करते हैं वह देखें — लोड में ब्लॉक होते थ्रेड — और Mono व Flux पर बने न्यूनतम non-blocking WebFlux endpoint को पढ़ें।
समस्या: प्रति रिक्वेस्ट एक थ्रेड
पारंपरिक (servlet) रिक्वेस्ट हैंडलर धीमी downstream कॉल की प्रतीक्षा में अपना थ्रेड रोक देता है — भारी लोड में थ्रेड ख़त्म हो जाते हैं जबकि CPU खाली, केवल I/O की प्रतीक्षा में है। Reactive प्रोग्रामिंग (Reactive Streams / Project Reactor) इसकी बजाय एक callback पंजीकृत करती है और प्रतीक्षा के दौरान थ्रेड को दूसरे काम के लिए मुक्त कर देती है।
Mono व Flux
Mono<T> शून्य-या-एक असिंक्रोनस मान दर्शाता है, Flux<T> शून्य-से-अनेक — दोनों लेज़ी हैं: जब तक कोई subscribe न करे कुछ नहीं चलता। Spring WebFlux कंट्रोलर परिणाम के लिए ब्लॉक होने की बजाय इन्हें सीधे लौटाते हैं।
@RestController
class UserController {
private final WebClient client;
@GetMapping("/users/{id}")
Mono<User> get(@PathVariable String id) {
return client.get()
.uri("/legacy-users/{id}", id)
.retrieve()
.bodyToMono(User.class); // non-blocking
}
}यह कब उपयोगी है (और कब नहीं)
उच्च-समरूपता वाली I/O-भारी सेवाओं (gateway, streaming) में reactive चमकता है। सामान्य लोड की CRUD ऐप के लिए वर्चुअल थ्रेड (Java 21+) पर सामान्य ब्लॉकिंग कोड जितना ही स्केलेबल है पर कहीं सरल — reactive केवल मापी गई ज़रूरत पर अपनाएँ।
अंतिम क्विज़ 1/8
अंतिम क्विज़
त्वरित जाँच: कौन-सी सुविधा behaviour को argument के रूप में देने देती है?
- Static imports
- Annotations
- Lambda expressions
- Packages
Answer
Lambda expressions — Lambdas functional interfaces लागू करते हैं।
अंतिम क्विज़ 2/8
अंतिम क्विज़
त्वरित जाँच: Stream.map क्या करता है?
- Filters elements
- Terminates the stream
- Sorts keys
- Transforms each element
Answer
Transforms each element — map हर element पर function लगाता है।
अंतिम क्विज़ 3/8
अंतिम क्विज़
त्वरित जाँच: अनुपस्थित values को कौन-सा class सुरक्षित रूप से संभालता है?
- Optional
- Object
- Void
- Number
Answer
Optional — Optional अनुपस्थित values को स्पष्ट बनाता है।
अंतिम क्विज़ 4/8
अंतिम क्विज़
त्वरित जाँच: happens-before क्या गारंटी देता है?
- Faster code
- One thread's writes are visible to another
- No exceptions
- Automatic locks
Answer
One thread's writes are visible to another — यह threads के बीच memory visibility तय करता है।
अंतिम क्विज़ 5/8
अंतिम क्विज़
त्वरित जाँच: Thread pools कौन-सा tool संभालता है?
- Scanner
- StringBuilder
- ExecutorService
- Properties
Answer
ExecutorService — Executors tasks को threads से अलग करते हैं।
अंतिम क्विज़ 6/8
अंतिम क्विज़
त्वरित जाँच: कौन-सा Spring concept आपके classes को dependencies देता है?
- Reflection only
- JSP
- Servlets
- Dependency injection
Answer
Dependency injection — IoC container beans को जोड़ता है।
अंतिम क्विज़ 7/8
अंतिम क्विज़
त्वरित जाँच: Passwords को bcrypt से hash क्यों करें?
- So plain text is never stored
- To make them shorter
- To speed up login
- To allow decryption
Answer
So plain text is never stored — Hashing data लीक होने पर users की रक्षा करता है।
अंतिम क्विज़ 8/8
अंतिम क्विज़
त्वरित जाँच: Virtual threads क्या सस्ता बनाते हैं?
- CPU-bound loops
- Blocking I/O concurrency
- Memory leaks
- Compilation
Answer
Blocking I/O concurrency — JVM blocked virtual threads को park करता है।