2015-11-11 6 views
6

मेरे पास निम्न स्थिति है।
मेरे पास एक आरईएसटी क्लाइंट है, जो 3 अन्य आरईएसटी ग्राहकों की ओर मुखौटा के रूप में कार्य करता है। (मैं स्प्रिंग बूट का उपयोग कर जावा में प्रोग्रामिंग कर रहा हूं)एकाधिक आरईएसटी अनुरोध लेनदेन/परमाणु कैसे करें?

क्लाइंट के उत्तरदायित्वों में से एक में उपयोगकर्ताओं पर सीआरयूडी संचालन करना शामिल है।
अब, सभी 3 अन्य सिस्टम जो अपने स्वयं के आरईएसटी एपीआई का पर्दाफाश करते हैं, उनमें कुछ प्रकार का उपयोगकर्ता प्रबंधन होता है।

जब मुझे अनुरोध मिलता है, उदाहरण के लिए, उपयोगकर्ता बनाएं, मुझे उन्हें अपने 3 डी सिस्टम पर अपने आरईएसटी एपीआई के माध्यम से बनाना होगा और मेरे डेटाबेस में बने रहना होगा।

अब, सर्वोत्तम स्थिति परिदृश्य में, मैं बस अपने एपीआई को कॉल करता हूं, उपयोगकर्ता को अपने डीबी में डालता हूं और सब कुछ बढ़िया है।

हालांकि, उस परिदृश्य पर विचार करें जहां उपयोगकर्ताओं का निर्माण केवल 1 बाहरी सेवा पर होता है। क्या मैं अन्य सभी पर ऑपरेशन का पुनः प्रयास करता हूं? क्या मैं उपयोगकर्ता को उस पर हटाए जाने की कोशिश करता हूं?

ऐसा करने का सही तरीका क्या है?

+2

एक संसाधन के रूप में खुद को पूरे लेन-देन के इलाज के लिए प्रयास करें। – chrylis

उत्तर

2

ऐसा करने का कोई आसान तरीका नहीं है। यदि आपके "लेनदेन" का कोई भी हिस्सा विफल रहता है, तो कोई तरीका नहीं है कि आप सभी सिस्टम पर स्थिरता की गारंटी के लिए रोलबैक या विश्वसनीय रूप से पुनः प्रयास कर सकें। एक वितरित लेनदेन प्रणाली का उपयोग करने के लिए आपको सभी तीन (चार प्रणालियों) के साथ एक कड़े एकीकरण की आवश्यकता होगी।

1

एक तरह से यह करने के लिए (यह मानते हुए आप अपने नोड्स के बीच अलग-अलग राज्यों बर्दाश्त कर सकते हैं):

  1. मान लें, अपने मुखौटा भेजे CRUD अनुरोधों की लगातार कतार है। एक बार नया अनुरोध req कतार में है, तो आप इसे करने के लिए आरईएसटी क्लाइंट से पूछना शुरू कर देते हैं;
  2. एक बार सभी आरईएसटी ग्राहकों ने अनुरोध किया और सफलता की सूचना दी, तो आप इसे अपनी कतार से हटा सकते हैं, और यह परिवर्तन अपने सिस्टम की वैश्विक स्थिति में प्रभावी बना सकते हैं। उदाहरण के लिए, req बनाना था, तो नया उपयोगकर्ता बाहरी दुनिया के लिए दृश्यमान है, अगर req अद्यतन है, तो अद्यतन बाहरी दुनिया के लिए दृश्यमान हो जाते हैं और इसी तरह। इसका तात्पर्य वैश्विक राज्य है जो मुखौटा प्रणाली के डेटाबेस में संग्रहीत है;
  3. अब, अगर आपका मुखौटा नीचे चला जाता है तो req प्रगति पर है (सभी आरईएसटी ग्राहकों ने सफलता की सूचना नहीं दी है) क्या करें? पुनरारंभ करने के बाद, आपका मुखौटा, (लंबित) कतार से सभी लंबित अनुरोधों को लेना चाहिए और उन्हें REST क्लाइंट में धक्का देना चाहिए। इसका तात्पर्य है कि आरईएसटी क्लाइंट यह पता लगा सकते हैं कि क्या उन्होंने पहले ही उस विशेष अनुरोध को संसाधित किया है (और यह अभी हुआ, मुखौटा ने इसे नीचे जाने से पहले जवाब संसाधित नहीं किया था)। आमतौर पर, यह अद्वितीय अनुरोध आईडी का उपयोग करके हासिल किया जाता है, उदाहरण के लिए, यूयूआईडी।

प्रक्रिया से ऊपर काम करता है यदि आपके सिस्टम के लिए केवल आरईएसटी क्लाइंट के हिस्से द्वारा संसाधित अनुरोध करने के लिए सुरक्षित है (जिसका अर्थ है कि डेटा केवल बाहरी दुनिया के लिए मुखौटा के माध्यम से सुलभ है)। यदि नहीं, तो आपको कुछ सिस्टम की आवश्यकता है जो वितरित लेनदेन का समर्थन करता है (दो चरण प्रतिबद्धता के लिए Google)।

1

आपको केस-दर-मामले आधार पर इससे निपटने की आवश्यकता होगी। आपके द्वारा प्रदान किए गए उदाहरण में, आप कोशिश कर सकते हैं और हटा सकते हैं, लेकिन यह भी असफल हो सकता है।

एक बार जब आप एक विफलता आप की जरूरत है: कि भले ही केवल 3 की 1

के लिए बनाया गया था एक उपयोगकर्ता का उपयोग हो सकता है

उपयोगकर्ता
  • हैंडल ग्राहकों बनाने की
    1. हैंडल पुन: प्रयास करें पुनः प्रयास करें, आप या तो आरंभकर्ता पुनः प्रयास कर सकते हैं या अनुरोध कतार कर सकते हैं।

      दोनों ही मामलों आप शायद अपने एपीआई डिजाइन करने के लिए इतना है कि यदि आप पहले से ही बनाया गया था एक उपयोगकर्ता को फिर से बनाने का प्रयास है, यह यह एक अद्यतन के रूप में व्यवहार करेगा चाहता हूँ में

      उदाहरण के लिए, केवल तीन में से एक सफल हुआ।

      अनुरोध शुरू करने वाला वेब पेज एक त्रुटि देता है। उपयोगकर्ता फिर कोशिश करता है। इस बार आप पहली बार अपडेट करते हैं और दूसरा और तीसरा बनाने का पुनः प्रयास करते हैं।

      के लिए ग्राहकों रिकॉर्ड देखने और एक आंशिक उपयोगकर्ता हो रही, या तो आप रिकॉर्ड को ट्रैक करता है कि लोगों को बनाया गया था जो, या ग्राहकों के लिए खुद को देखने के लिए कि केवल तीन में से 1 बनाया गया था की आवश्यकता होगी की एक 4 प्रणाली की आवश्यकता होगी। यह भी एक मुद्दा है, तो अपने ग्राहकों को हमेशा से ही एक बार में तीन में से एक को देख रहे हैं न हो।

  • संबंधित मुद्दे