2016-02-15 5 views
9

जब वेबबॉज को क्यूयू ट्रिगर के माध्यम से एज़ूर स्टोरेज पर कतार से संदेश मिलता है, तो यह संदेश पट्टे पर देता है (इसे अदृश्य बनाता है)। यदि ट्रिगरिंग फ़ंक्शन (वेबोज़ का) संदेश को संसाधित करने में लंबा समय लगता है, तो क्या यह पट्टा स्वचालित रूप से बढ़ाया जाता है? या मैं इसे समारोह में संभाल लेना चाहिए?क्या वेबजोज़ स्वचालित रूप से Azure Queue संदेशों पर पट्टे को नवीनीकृत करते हैं?

इस लिंक Windows Azure Queues: Improved Leases, Progress Tracking, and Scheduling of Future Work पर, लेखक कहता है कि "संदेश पर एक पट्टा कार्यकर्ता है कि मूल विपंक्ति किया द्वारा बढ़ाया जा सकता है ताकि यह संदेश प्रोसेस जारी रख सकते हैं"

नोट: मैंने एक वेबबॉज (एक QueueTrigger के साथ) की कोशिश की जो 20 मिनट के लिए इंतजार कर रहा है।

//Write Log 
Thread.Sleep(1200000); 
//Write Log 

यह सफलतापूर्वक पूरा हो गया है। और इस समय के दौरान कोई अन्य वेबबॉज उदाहरण एक ही कतार आइटम (यह दिखाई नहीं दे रहा था) के लिए प्रयास करने का प्रयास करें। इसलिए ऐसा लगता है कि पट्टे के लिए एक ऑटो-नवीनीकरण तंत्र मौजूद है। किसी भी तरह से मैं एक Microsoft कर्मचारी या एक आधिकारिक लिंक (एमएसडीएन, एज़ूर, ...) के साथ एक जवाब का इंतजार कर रहा हूँ।

उत्तर

10

हां, आपका पट्टा स्वचालित रूप से बढ़ाया गया है। यह हर बार 10 मिनट है।

यह उत्तर यहां देखें [1] एक Microsoft कर्मचारी द्वारा dzure.microsoft.com [2] पर दस्तावेज़ों और टिप्पणियों का जिक्र करते हुए।

संपादित (विस्तृत उत्तर)

इसके अलावा, स्रोत कोड की जांच, https://github.com/Azure/azure-webjobs-sdk/blob/cfc875a7f00e595410c0603e6ca65537025490a9/src/Microsoft.Azure.WebJobs.Host/Queues/Listeners/QueueListener.cs पर QueueListener वर्ग के साथ शुरू ही इंगित करता है।

QueueListener में कोड लाइन 138, जहां 10 मिनट visibilityTimeout चर परिभाषित किया गया है पर प्रासंगिक भाग हैं:

TimeSpan visibilityTimeout = TimeSpan.FromMinutes(10); // long enough to process the job 

चर तो ProcessMessageAsync है, जो एक टाइमर विधि CreateUpdateMessageVisibilityTimer में परिभाषित शुरू होता है को भेज दिया जाता है यही कारण है कि उसी मूल्य के साथ। 10 मिनट का मान यह निर्धारित करने के लिए किया जाता है कि दृश्यता समय समाप्ति के पहले और अगले अपडेट (इसे रोककर और LinearSpeedupStrategy कक्षा का उदाहरण बनाकर)।

आखिरकार, कक्षा UpdateQueueMessageVisibilityCommand [3] में, आप पाएंगे कि UpdateMessageAsync कतार पर विधि को उसी 10 मिनट के नवीकरण के साथ बुलाया जाता है।

LinearSpeedupStrategy 5 मिनट के बाद फिर से नवीनीकृत होगा, जब तक कि नवीनीकरण विफल नहीं हो जाता है, तब तक यह 1 मिनट के बाद फिर से प्रयास करेगा (जैसा कि QueueListener में परिभाषित किया गया है)।

[1] Azure Storage Queue and multiple WebJobs instances: will QueueTrigger set the message lease time on triggered?

[2] https://azure.microsoft.com/en-us/documentation/articles/websites-dotnet-webjobs-sdk-get-started/

[3] https://github.com/Azure/azure-webjobs-sdk/blob/cfc875a7f00e595410c0603e6ca65537025490a9/src/Microsoft.Azure.WebJobs.Host/Queues/Listeners/UpdateQueueMessageVisibilityCommand.cs

+0

उस प्रश्न में उत्तर में से एक मेरा है। जिसका अर्थ है कि मैंने उस सवाल और स्पष्ट रूप से अन्य जवाब देखा। और मैंने दिए गए लिंक को भी पढ़ा और उस उदाहरण को बहुत पहले किया। मुझे सुझाव दिया गया है कि "आपका पट्टा स्वचालित रूप से बढ़ाया गया है। यह हर बार 10 मिनट है" में कुछ भी नहीं मिला। शायद मुझे कुछ याद आती है। क्या आप इस पैराग्राफ को निर्दिष्ट कर सकते हैं जिसे आप इस परिणाम को समाप्त करते हैं? –

+1

@NuriTasdemir मुझे खेद है, मैंने पोस्टर के नामों को नहीं देखा। आप सही हैं, लेख में समय के विस्तार का उल्लेख नहीं है और यह कितना समय है। इसलिए, मैंने गिटहब पर स्रोत कोड देखा (https://github.com/Azure/azure-webjobs-sdk/blob/master/src/Microsoft.Azure.WebJobs.Host/Queues/Listeners/QueueListener.cs)। 10 मिनट की खिड़की लाइन 138 पर हार्ड-कोड की गई है। उस मान को फिर कुछ विधि कॉल के साथ पास किया जाता है और फिर टाइमर में लाइन 250 पर फिर से उपयोग किया जाता है जो दृश्यता टाइमआउट को रीसेट करने के लिए संदेश अपडेट करेगा। – SvenAelterman

+1

@NuriTasdemir यह थोड़ा जटिल है क्योंकि यह दृश्यता टाइमआउट को आधे रास्ते से रीसेट करना शुरू कर देगा। इसलिए, प्रसंस्करण समय के पहले 5 मिनट के बाद, यह इसे 10 मिनट तक बढ़ाएगा, आदि। 'LineQSpeueMessageVisibilityCommand' का उपयोग' LinearSpeedupStrategy' आदि के माध्यम से किया जाता है लेकिन नीचे की रेखा यह है कि समय आपके वेबजोब की ओर से 10 के लिए बढ़ाया गया है हर बार मिनट। – SvenAelterman

-2

आप विधि (जावा कोड) का उपयोग कर सकते हैं:

queue.retrieveMessage() 

नीला भंडारण पर एक कतार से एक संदेश प्राप्त करने के लिए। यह डिफ़ॉल्ट रूप से 30 सेकंड के बाद दिखाई देगा।

आप पट्टे का विस्तार करना चाहते हैं, तो आप नीचे दिए गए कोड का उपयोग कर सकते हैं:

CloudQueueMessage updateMessage = queue.retrieveMessage(); 
EnumSet<MessageUpdateFields> updateFields = EnumSet.of(MessageUpdateFields.CONTENT, MessageUpdateFields.VISIBILITY); 
queue.updateMessage(updateMessage, 60, updateFields, null, null); 

इसका मतलब यह है अपने संदेश एक और 60 सेकंड के लिए संसाधित करने के लिए सक्षम हो जाएगा।

+0

मुझे लगता है कि konow। हालांकि, मेरे मामले में मुझे "सार्वजनिक स्थैतिक एसिंक कार्य प्रक्रिया QueueMessage ([QueueTrigger (" queue_name ")] BlobInformation blobInfo" के रूप में webjob sdk (C#) के QueueTrigger विशेषता के माध्यम से कतार संदेश प्राप्त हो रहा है। " मुझे लगता है कि इस मामले में, दृश्यों के पीछे इसे संभाला जाता है। और मैं बस सुनिश्चित करने के लिए पूछ रहा हूँ। मेरे परीक्षणों में, वेबबॉज प्रक्रिया ने 90 सेकंड तक लिया और कतार में कतार संदेश दिखाई नहीं दिया। –

+0

मुझे लगता है कि आप लेख पढ़ सकते हैं [वेबजब्स एसडीके के साथ एज़ूर कतार भंडारण का उपयोग कैसे करें] (https://azure.microsoft.com/en-us/documentation/articles/websites-dotnet-webjobs-sdk-storage-queues- कैसे-करें/# createqueue)। Webjob sdk में एक "मतदान एल्गोरिदम" है। ऐसा लगता है कि जब तक यह अधिकतम प्रतीक्षा समय तक नहीं पहुंच जाता तब तक आपका वेबोज़ प्रक्रिया जारी रहेगा। क्या आप अधिकतम संदेश प्रतीक्षा कर सकते हैं? –

+0

@ एलेक्स चेन-डब्ल्यूएक्स उस लेख में वर्णित मतदान एल्गोरिदम केवल यह बताता है कि WebJob कितनी बार नए कतार संदेशों की जांच करेगा। चूंकि प्रत्येक चेक एक भंडारण लेनदेन करता है, इसलिए आप अपनी लागत को नियंत्रण में रखने के लिए इसका उपयोग कर सकते हैं। – SvenAelterman

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