हम वर्तमान में ReactiveSecurityContextHolder का उपयोग कर रहे हैं जो हमारे सही प्रामाणिक विवरण प्राप्त करता है और फ्लक्स स्ट्रीम के साथ उपयोग किया जाता है।
अब हम सामान को डी-कपल करना चाहते हैं। पहला पुनरावृत्ति यह है कि हम एक सिंक का उपयोग मध्यवर्ती 'ईवेंट-हब' के रूप में करते हैं। तो एक समापन बिंदु से हम कुछ वस्तु को सिंक में उत्पन्न करते हैं।कई।
एक श्रोता इस सिंक से घटनाओं का उपभोग कर रहा है और भारी काम कर रहा है। अब इस उपभोक्ता में मैं उस संदर्भ का उपयोग करना चाहूंगा जो उत्पादक साइट पर उपलब्ध है। मुझे पता है कि वर्तमान संदर्भ को दूसरे फ्लक्स पर पास करने के लिए कोई deferContextual
कर सकता है। लेकिन क्या सिंक से परिणामी फ्लक्स के संदर्भ को पारित करना संभव है?
अग्रिम में धन्यवाद।
एलेक्स
1 उत्तर
वर्तमान में ऐसा कोई एपीआई नहीं है जो मनमाने ढंग से Sinks
को उजागर करता हो। Sinks
के साथ चुनौती यह है कि उनमें से बहुत से एकाधिक Subscriber
s में मल्टीकास्टिंग कर रहे हैं, और Context
प्रत्येक Subscriber
पर परिभाषित है।
हालांकि एक हैक है: Sinks.Many<T>
Scannable
है, और अधिकांश ठोस कार्यान्वयन Stream<Scannable> inners()
पद्धति के माध्यम से अपने ग्राहकों के वर्तमान संग्रह को करना चाहिए। यूनिकास्ट सिंक के मामले में, scan(Attr.ACTUAL)
भी काम करेगा।
दो बड़ी चेतावनी:
- ये एपीआई केवल
Scannable
s को उजागर करते हैं, जो सीधेContext
तक पहुंच की अनुमति नहीं देते हैं - यदि कार्यान्वयन का आंतरिक ग्राहक
Scannable
नहीं है, तो इसे स्ट्रीम मेंScannable#NOT_SCANNABLE
स्थिरांक से बदल दिया जाता है
अधिकांश यदि नहीं तो सभी reactor-core
CoreSubscribers
हैं Scannable
, लेकिन यदि आप एक कस्टम ग्राहक को कनेक्ट करते हैं जो स्कैन करने योग्य नहीं है, भले ही उसके पास Context
, आप इसे नहीं देख पाएंगे।
रिएक्टर-कोर में मल्टीकास्ट सिंक डाउनस्ट्रीम ग्राहकों को अपने आंतरिक स्कैन करने योग्य आंतरिक ट्रैकर में लपेटते हैं, जो इस दृष्टिकोण को काम करेगा।
यूनिकास्ट सिंक थोड़े अलग हैं क्योंकि वे सीधे डाउनस्ट्रीम Subscriber
से जुड़ते हैं। तो अगर यह एक CoreSubscriber
है लेकिन किसी तरह Scannable
नहीं है, तो आप इसे CoreSubscriber
के रूप में नहीं देख पाएंगे और इसके Context
तक नहीं पहुंच पाएंगे।
दृष्टिकोण को सारांशित करने के लिए:
Stream<Scannable>
प्राप्त करने के लिएsink.inners()
पर कॉल करें- सुनिश्चित करें कि मान
CoreSubscriber
के उदाहरण हैं (यही वह हिस्सा है जहां चीजें गलत हो सकती हैं) CoreSubscriber
पर मान डालें औरcurrentContext()
पर कॉल करें- किसी तरह विभिन्न
Context
का मिलान करें जो आपको प्रासंगिक कुंजी-मूल्य जोड़ी (ओं) को निकालने के लिए मिला है
संबंधित सवाल
नए सवाल
java
जावा एक उच्च स्तरीय प्रोग्रामिंग भाषा है। इस टैग का उपयोग तब करें जब आपको भाषा का उपयोग करने या समझने में समस्या हो। इस टैग का उपयोग शायद ही कभी किया जाता है और इसका उपयोग अक्सर [वसंत], [वसंत-बूट], [जकार्ता-ई], [Android], [javafx], [हडूप], [श्रेणी] और [मावेन] के साथ किया जाता है।