हम वर्तमान में ReactiveSecurityContextHolder का उपयोग कर रहे हैं जो हमारे सही प्रामाणिक विवरण प्राप्त करता है और फ्लक्स स्ट्रीम के साथ उपयोग किया जाता है।

अब हम सामान को डी-कपल करना चाहते हैं। पहला पुनरावृत्ति यह है कि हम एक सिंक का उपयोग मध्यवर्ती 'ईवेंट-हब' के रूप में करते हैं। तो एक समापन बिंदु से हम कुछ वस्तु को सिंक में उत्पन्न करते हैं।कई।

एक श्रोता इस सिंक से घटनाओं का उपभोग कर रहा है और भारी काम कर रहा है। अब इस उपभोक्ता में मैं उस संदर्भ का उपयोग करना चाहूंगा जो उत्पादक साइट पर उपलब्ध है। मुझे पता है कि वर्तमान संदर्भ को दूसरे फ्लक्स पर पास करने के लिए कोई deferContextual कर सकता है। लेकिन क्या सिंक से परिणामी फ्लक्स के संदर्भ को पारित करना संभव है?

अग्रिम में धन्यवाद।

एलेक्स

0
Alex Wouda 8 जून 2021, 12:39

1 उत्तर

सबसे बढ़िया उत्तर

वर्तमान में ऐसा कोई एपीआई नहीं है जो मनमाने ढंग से Sinks को उजागर करता हो। Sinks के साथ चुनौती यह है कि उनमें से बहुत से एकाधिक Subscribers में मल्टीकास्टिंग कर रहे हैं, और Context प्रत्येक Subscriber पर परिभाषित है।

हालांकि एक हैक है: Sinks.Many<T> Scannable है, और अधिकांश ठोस कार्यान्वयन Stream<Scannable> inners() पद्धति के माध्यम से अपने ग्राहकों के वर्तमान संग्रह को करना चाहिए। यूनिकास्ट सिंक के मामले में, scan(Attr.ACTUAL) भी काम करेगा।

दो बड़ी चेतावनी:

  • ये एपीआई केवल Scannables को उजागर करते हैं, जो सीधे Context तक पहुंच की अनुमति नहीं देते हैं
  • यदि कार्यान्वयन का आंतरिक ग्राहक Scannable नहीं है, तो इसे स्ट्रीम में Scannable#NOT_SCANNABLE स्थिरांक से बदल दिया जाता है

अधिकांश यदि नहीं तो सभी reactor-core CoreSubscribers हैं Scannable, लेकिन यदि आप एक कस्टम ग्राहक को कनेक्ट करते हैं जो स्कैन करने योग्य नहीं है, भले ही उसके पास Context, आप इसे नहीं देख पाएंगे।

रिएक्टर-कोर में मल्टीकास्ट सिंक डाउनस्ट्रीम ग्राहकों को अपने आंतरिक स्कैन करने योग्य आंतरिक ट्रैकर में लपेटते हैं, जो इस दृष्टिकोण को काम करेगा।

यूनिकास्ट सिंक थोड़े अलग हैं क्योंकि वे सीधे डाउनस्ट्रीम Subscriber से जुड़ते हैं। तो अगर यह एक CoreSubscriber है लेकिन किसी तरह Scannable नहीं है, तो आप इसे CoreSubscriber के रूप में नहीं देख पाएंगे और इसके Context तक नहीं पहुंच पाएंगे।

दृष्टिकोण को सारांशित करने के लिए:

  1. Stream<Scannable> प्राप्त करने के लिए sink.inners() पर कॉल करें
  2. सुनिश्चित करें कि मान CoreSubscriber के उदाहरण हैं (यही वह हिस्सा है जहां चीजें गलत हो सकती हैं)
  3. CoreSubscriber पर मान डालें और currentContext() पर कॉल करें
  4. किसी तरह विभिन्न Context का मिलान करें जो आपको प्रासंगिक कुंजी-मूल्य जोड़ी (ओं) को निकालने के लिए मिला है
0
Simon Baslé 9 जून 2021, 12:39
विकल्प 4 हमारे लिए सबसे उपयुक्त निकला।
 – 
Alex Wouda
9 जून 2021, 14:39
ये कदम हैं, अलग विकल्प नहीं :)
 – 
Simon Baslé
9 जून 2021, 14:41