यह दस्तावेज़ AI द्वारा अनुवादित किया गया है। किसी भी अशुद्धि के लिए, कृपया अंग्रेजी संस्करण देखें
एकल-नोड वातावरण में, प्लगइन आमतौर पर इन-प्रोसेस स्थिति, इवेंट या कार्यों के माध्यम से अपनी आवश्यकताओं को पूरा कर सकते हैं। हालाँकि, क्लस्टर मोड में, वही प्लगइन एक साथ कई इंस्टेंस पर चल सकता है, जिससे निम्नलिखित विशिष्ट समस्याएँ सामने आती हैं:
NocoBase कोर एप्लिकेशन लेयर पर विभिन्न मिडलवेयर इंटरफेस प्रदान करता है ताकि प्लगइन को क्लस्टर वातावरण में एकीकृत क्षमताओं का पुन: उपयोग करने में मदद मिल सके। निम्नलिखित अनुभाग स्रोत कोड संदर्भों के साथ कैशिंग, सिंक्रोनस मैसेजिंग, मैसेज क्यू और डिस्ट्रीब्यूटेड लॉक के उपयोग और सर्वोत्तम अभ्यासों का परिचय देंगे।
मेमोरी में संग्रहीत किए जाने वाले डेटा के लिए, प्रबंधन हेतु सिस्टम के बिल्ट-इन कैश घटक का उपयोग करने की सलाह दी जाती है।
app.cache के माध्यम से डिफ़ॉल्ट कैश इंस्टेंस प्राप्त करें।Cache set/get/del/reset जैसे बुनियादी ऑपरेशन प्रदान करता है, और कैशिंग लॉजिक को इनकैप्सुलेट करने के लिए wrap और wrapWithCondition के साथ-साथ mset/mget/mdel जैसी बैच विधियों का भी समर्थन करता है।ttl सेट करने की सलाह दी जाती है।उदाहरण: plugin-auth में कैश इनिशियलाइज़ेशन और उपयोग
यदि इन-मेमोरी स्थिति को डिस्ट्रीब्यूटेड कैश के साथ प्रबंधित नहीं किया जा सकता है (उदाहरण के लिए, इसे क्रमबद्ध नहीं किया जा सकता है), तो जब उपयोगकर्ता की कार्रवाइयों के कारण स्थिति बदलती है, तो स्थिति की निरंतरता बनाए रखने के लिए परिवर्तन को एक सिंक सिग्नल के माध्यम से अन्य इंस्टेंस पर प्रसारित करने की आवश्यकता होती है।
sendSyncMessage को लागू किया है, जो आंतरिक रूप से app.syncMessageManager.publish को कॉल करता है और टकराव से बचने के लिए स्वचालित रूप से चैनल में एक एप्लिकेशन-लेवल प्रीफिक्स जोड़ता है।publish एक transaction निर्दिष्ट कर सकता है, और डेटाबेस ट्रांजेक्शन कमिट होने के बाद संदेश भेजा जाएगा, जिससे स्थिति और संदेश सिंक्रनाइज़ेशन सुनिश्चित होगा।handleSyncMessage का उपयोग करें। beforeLoad चरण के दौरान सब्सक्राइब करना कॉन्फ़िगरेशन परिवर्तनों और स्कीमा सिंक्रनाइज़ेशन जैसे परिदृश्यों के लिए बहुत उपयुक्त है।संदेश प्रसारण सिंक संकेतों का अंतर्निहित घटक है और इसे सीधे भी उपयोग किया जा सकता है। जब आपको इंस्टेंस के बीच संदेश प्रसारित करने की आवश्यकता हो, तो आप इस घटक का उपयोग कर सकते हैं।
app.pubSubManager.subscribe(channel, handler, { debounce }) का उपयोग इंस्टेंस के बीच एक चैनल को सब्सक्राइब करने के लिए किया जा सकता है; debounce विकल्प का उपयोग बार-बार प्रसारण के कारण होने वाले लगातार कॉलबैक को रोकने के लिए किया जाता है।publish skipSelf (डिफ़ॉल्ट true है) और onlySelf का समर्थन करता है ताकि यह नियंत्रित किया जा सके कि संदेश वर्तमान इंस्टेंस पर वापस भेजा जाता है या नहीं।उदाहरण: plugin-async-task-manager कार्य रद्द करने वाले इवेंट को प्रसारित करने के लिए PubSub का उपयोग करता है
मैसेज क्यू का उपयोग एसिंक्रोनस कार्यों को शेड्यूल करने के लिए किया जाता है, जो लंबे समय तक चलने वाले या पुनः प्रयास करने योग्य ऑपरेशनों को संभालने के लिए उपयुक्त है।
app.eventQueue.subscribe(channel, { idle, process, concurrency }) के साथ एक उपभोक्ता घोषित करें। process एक Promise लौटाता है, और आप टाइमआउट को नियंत्रित करने के लिए AbortSignal.timeout का उपयोग कर सकते हैं।publish स्वचालित रूप से एप्लिकेशन नाम प्रीफिक्स जोड़ता है और timeout और maxRetries जैसे विकल्पों का समर्थन करता है। यह डिफ़ॉल्ट रूप से एक इन-मेमोरी क्यू एडाप्टर का उपयोग करता है, लेकिन आवश्यकतानुसार RabbitMQ जैसे विस्तारित एडाप्टर पर स्विच किया जा सकता है।उदाहरण: plugin-async-task-manager कार्यों को शेड्यूल करने के लिए EventQueue का उपयोग करता है
जब आपको रेस कंडीशन से बचने की आवश्यकता हो, तो आप एक संसाधन तक पहुंच को क्रमबद्ध करने के लिए डिस्ट्रीब्यूटेड लॉक का उपयोग कर सकते हैं।
local एडाप्टर प्रदान करता है। आप Redis जैसे डिस्ट्रीब्यूटेड इम्प्लीमेंटेशन को रजिस्टर कर सकते हैं। समवर्तीता को नियंत्रित करने के लिए app.lockManager.runExclusive(key, fn, ttl) या acquire/tryAcquire का उपयोग करें।ttl का उपयोग लॉक को जारी करने के लिए एक सुरक्षा उपाय के रूप में किया जाता है, जिससे असाधारण मामलों में इसे अनिश्चित काल तक रोके जाने से रोका जा सके।app.cache और app.syncMessageManager जैसी एकीकृत क्षमताओं का उपयोग करें।transaction.afterCommit का उपयोग करना चाहिए (syncMessageManager.publish में यह बिल्ट-इन है)।timeout, maxRetries, और debounce मान सेट करें।इन क्षमताओं के साथ, प्लगइन विभिन्न इंस्टेंस के बीच सुरक्षित रूप से स्थिति साझा कर सकते हैं, कॉन्फ़िगरेशन को सिंक्रनाइज़ कर सकते हैं और कार्यों को शेड्यूल कर सकते हैं, जिससे क्लस्टर डिप्लॉयमेंट परिदृश्यों की स्थिरता और निरंतरता आवश्यकताओं को पूरा किया जा सके।