निष्पादित की जाती हैं, मेरा एप्लिकेशन रीस्क जॉब्स बनाता है जिसे प्रति उपयोगकर्ता अनुक्रमिक रूप से संसाधित किया जाना चाहिए, और उन्हें यथासंभव तेज़ी से संसाधित किया जाना चाहिए (1 सेकंड अधिकतम देरी)।रेस्क्यू: समय-महत्वपूर्ण नौकरियां जो अनुक्रमिक रूप से प्रति उपयोगकर्ता
एक उदाहरण: job1 और job2 उपयोगकर्ता 2 के लिए user1 und job3 के लिए बनाया गया है। Resque समानांतर में job1 और job3 को संसाधित कर सकता है, लेकिन job1 और job2 क्रमशः संसाधित किया जाना चाहिए।
मैं एक समाधान के लिए अलग अलग विचार किया है:
- मैं अलग कतारों इस्तेमाल कर सकते हैं (उदाहरण के लिए queue_1 ... queue_10) और प्रत्येक पंक्ति (जैसे
rake resque:work QUEUE=queue_1
) के लिए एक कार्यकर्ता शुरू करते हैं। उपयोगकर्ताओं को रनटाइम पर एक कतार/कार्यकर्ता (उदाहरण के लिए लॉगिन, हर दिन इत्यादि) को सौंपा गया है। - मैं गतिशील "उपयोगकर्ता कतार" (जैसे कतार _ # {user.id}) का उपयोग कर सकता हूं और resque को विस्तारित करने का प्रयास करता हूं कि केवल 1 कार्यकर्ता एक समय में एक कतार को संसाधित कर सकते हैं (जैसा कि Resque: one worker per queue में पूछा गया है)
- मैं नौकरियों को एक गैर-रेज्यू कतार में डाल सकता हूं और उन नौकरियों को नियंत्रित करने वाले रेस्क-लॉक (https://github.com/defunkt/resque-lock) के साथ "प्रति-उपयोगकर्ता मेटा जॉब" का उपयोग कर सकता हूं।
क्या आपके पास अभ्यास में से किसी एक परिदृश्य के साथ कोई अनुभव है? या अन्य कोई विचार है जो सोचने लायक हो सकता है? मैं किसी भी इनपुट की सराहना करता हूं, धन्यवाद!
कि job1 स्पष्ट रूप से, क्योंकि वे वे एक ही समय में नहीं बनाई गई हैं job2 के बारे में पता नहीं करना चाहिए (वे विभिन्न अनुरोधों आदि में बनाया सकता है)। – lacco
जो मामले में है मैं res2-retry का उपयोग, job2 पर, यदि जॉब 1 समाप्त हो गया है और बाद में फिर से कतार नहीं है तो चेक करने के लिए - रेज्यू-रीट्री को आवश्यकतानुसार घातीय बैकऑफ या सीमित ट्रे का उपयोग करने के लिए सेट किया जा सकता है। – TomDunning
जॉब 2 कैसे जानता है कि एक विशिष्ट उपयोगकर्ता के लिए जॉब 1 प्रगति पर है? – lacco