एक संदर्भ में जहां आप कई उदाहरणों पर वेब भूमिका निभा रहे हैं और एक कार्य को शेड्यूल करने की आवश्यकता है जो केवल एक उदाहरण द्वारा किया जाना चाहिए (जैसे साइट पर एक ईमेल भेजना कुछ आंकड़ों के साथ व्यवस्थापक), कार्य को केवल एक उदाहरण पर चलाने के लिए RoleEnvironment.CurrentRoleInstance.Id
का उपयोग करना कितना विश्वसनीय है (जैसे आईडी को IN_0
के साथ समाप्त होने पर ही इसे चलाने के लिए)? अगर किसी ने कभी यह किया है, तो मुझे उनकी प्रतिक्रिया में दिलचस्पी होगी।केवल एक उदाहरण में एक कार्य चलाने के लिए CurrentRoleInstance.Id का उपयोग
उत्तर
मैं उदाहरण आईडी का उपयोग नहीं होगा से कार्य decoupling की तरह, कुछ अधिक काम की आवश्यकता हो सकती। क्या होता है यदि इंस्टेंस 0 रीबूट हो जाता है (जो प्रति माह कम से कम एक बार होता है)? अब आपका शेड्यूलर या टास्क-रनर ऑफलाइन है।
एक वैकल्पिक समाधान उदाहरणों को फैलाने वाले म्यूटेक्स के प्रकार का उपयोग करना है। जिसकी मैं सोच रहा हूं वह एक ब्लॉब पट्टा है। आप वास्तव में लिखने के लिए एक ब्लॉब पर लीज प्राप्त कर सकते हैं (और केवल एक पट्टा धारक हो सकता है)। आप कार्य चलाने से पहले ब्लॉब लीज प्राप्त करने का प्रयास कर सकते हैं। यदि आप इसे प्राप्त करते हैं, तो कार्य चलाएं। यदि आप नहीं करते हैं, तो इसे न चलाएं।
थोड़ा सा बदलाव: एक थ्रेड में (मान लें कि Run()
विधि से शुरू किया गया है), लीज हासिल करने का प्रयास करें और यदि सफल हो, तो शेड्यूलर कार्य (शायद एक थ्रेड या कुछ) लॉन्च करें। यदि आप पट्टा हासिल नहीं कर सकते हैं, तो एक मिनट के लिए सो जाओ और पुनः प्रयास करें। आखिरकार, पट्टे के साथ उदाहरण रिबूट किया जाएगा (या यह किसी अन्य कारण से गायब हो जाएगा)। कुछ सेकंड के बाद, एक और उदाहरण त्याग किए गए पट्टे को हासिल करेगा और एक नया शेड्यूलर कार्य शुरू करेगा।
स्टीव मार्क्स ने पट्टे का उपयोग करके समेकन के बारे में blog post लिखा। टायलर डोर्क्सन के पास पट्टे के बारे में good post भी है।
निष्पादन कोड का कुछ ब्लॉक केवल एक बार चलाया जा सकता है यदि आपके पास कई उदाहरण हैं, उदाहरण के लिए वर्तमान भूमिका उदाहरण की आईडी की जांच कर रहे हैं।
आप अन्य समाधान के साथ एक ही परिणाम प्राप्त कर सकते थे, लेकिन उन अपने उदाहरण
हाँ आप InstanceID अगर specificaly
<Startup>
<Task commandLine="StartUpTasks\WindowService\InstallWindowService.bat" executionContext="elevated" taskType="background" >
<Environment>
<Variable name="InstanceId">
<RoleInstanceValue xpath="/RoleEnvironment/CurrentInstance/@id"/>
</Variable>
</Environment>
</Task>
</Startup>
जरूरत उपयोग कर सकते हैं यह रूप
<deployment Id>.<Application Name>.<Role Name>_IN_<index>
Example mostly MyRole_IN_0, MyRole_IN_1
इस
%InstanceId%
तरह पहुँच बैच फ़ाइल में environmet चर निम्न में से हो जाएगा आप इंस्टेंस आईडी से इंडेक्स प्राप्त करने के लिए तो गन्ना फिर से substring या _ की अंतिम अनुक्रमणिका का उपयोग करें। यदि इस उदाहरण में इंडेक्स 0 है तो रीबूट के बाद भी वही अनुक्रमणिका होगी।
अधिक जानकारी http://blogs.msdn.com/b/cclayton/archive/2012/05/17/windows-azure-start-up-tasks-part-2.aspx
http://msdn.microsoft.com/en-us/library/windowsazure/hh404006.aspx
- 1. उदाहरणों के प्रति सेट केवल एक बार चलाने के लिए एक सीआरओएन कार्य कैसे सेट करें?
- 2. स्क्रिप्ट मैनेजर का केवल एक उदाहरण पृष्ठ
- 3. एप्लिकेशन का केवल एक उदाहरण कैसे चलाएं
- 4. एक समय में जावा प्रोग्राम के केवल एक उदाहरण को चलाने की अनुमति कैसे दें?
- 5. विंडोज़ में केवल एक उदाहरण चलाने के लिए सी # .नेट ऐप को कैसे बाध्य किया जाए?
- 6. केवल एक विशेष मोड में चलाने के लिए एक हुक जोड़ने के लिए कैसे?
- 7. एक खोज पेज चलाने के लिए पाइथन का उपयोग करके
- 8. मेवेन - सेलेनियम - केवल एक परीक्षण चलाने के लिए संभव
- 9. केवल एक ही आवेदन उदाहरण
- 10. एक सेलेरी कार्य में Django के ORM का उपयोग
- 11. उद्देश्य-सी कार्य में class_addMethod केवल एक विशिष्ट उदाहरण पर कर सकते हैं?
- 12. सी ++ का उपयोग करके एक बार चलाने के लिए निर्धारित समय निर्धारित करने का प्रयास, Win7
- 13. एक बाध्य फ़ंक्शन के लिए पॉइंटर का उपयोग केवल
- 14. एंड्रॉइड: एक ही कार्य में एक गतिविधि के कई उदाहरण शुरू करना संभव है?
- 15. क्या Windows Vista में व्यवस्थापक के रूप में एक एएनटी कार्य चलाने का कोई तरीका है?
- 16. Gradle का उपयोग कर एक ही कार्य में JavaExec कई बार निष्पादित करने के लिए कैसे?
- 17. आभासी विधि का उपयोग कर केवल एक उदाहरण पीढ़ी का लाभ है?
- 18. एक व्यक्ति के लिए एम्बेडेड प्रोजेक्ट का एक उदाहरण
- 19. Chrome एक्सटेंशन: सामग्री स्क्रिप्ट के सभी पृष्ठों पर चलाने के लिए, और केवल करने के लिए एक और एक पेज
- 20. केवल एक ईमेल के लिए ActionMailer के साथ एक अलग delivery_method का उपयोग करें?
- 21. क्या एक साथ कई बार एक परीक्षण चलाने के लिए नाक का उपयोग करना संभव है?
- 22. सी में एक पाठ फ़ाइल के माध्यम से चलाने के लिए ईओएफ का उपयोग कैसे करें?
- 23. उपयोगकर्ता के रूप में चलाने के लिए एक डेमॉन चलाने के लिए पिड फ़ाइल संग्रहीत करना
- 24. मेरे आवेदन के केवल एक उदाहरण को सक्षम करने के लिए
- 25. टाइमर का उपयोग केवल एक बार
- 26. उदाहरण के लिए एक अच्छा अभ्यास है?
- 27. एंड्रॉइड टैबलेट को लॉक करने के लिए केवल एक ऐप को चलाने के लिए
- 28. डीजेगो सेलेरी: लंबे समय तक चलने वाली प्रक्रिया का केवल एक उदाहरण निष्पादित करें
- 29. एक रेक कार्य में स्क्रीन करने के लिए प्रिंटिंग
- 30. स्वतंत्र रूप से चलाने के लिए कोड के केवल एक हिस्से को अलग करने के लिए पर्ल तकनीक क्या हैं?
उत्तर के लिए धन्यवाद, मैं पहले से ही smarx के ब्लॉग पोस्ट के माध्यम से चला गया। फिर भी, मुझे रीबूट होने के उदाहरण के बारे में पूरी तरह से अपना मुद्दा नहीं मिलता है। रीबूट के बाद, यह अभी भी एक ही इंस्टेंस आईडी होगा, है ना? यदि ऐसा है, तो स्थिति के साथ सामना करना संभव होगा जब कार्य को चलाया जाना चाहिए (उदाहरण के लिए रीबूट के बाद इसे चलाकर)। – ThomasWeiss
मेरा मुद्दा यह है कि आप हमेशा शेड्यूलर चलाना चाहते हैं। यदि आप किसी विशिष्ट उदाहरण पर निर्भर करते हैं, तो आपको डाउनटाइम होने की गारंटी है। इसके अलावा: यदि आप * नीचे * स्केल करते हैं तो क्या होता है? आप निर्दिष्ट नहीं कर सकते कि कौन सा उदाहरण निकालना है।क्या होता है यदि हटाया गया उदाहरण वह है जिसे आप हर समय संदर्भित करते हैं? –
सच है। मैं उस ब्लॉब लीज विकल्प को लागू करूंगा। धन्यवाद। – ThomasWeiss