के साथ वर्कर पूल और बहु-किरायेदार कतार मैं एक वेब एप्लिकेशन पर काम करता हूं जो एक बहु-किरायेदार क्लाउड आधारित एप्लिकेशन (कई ग्राहक, प्रत्येक अपने अलग "पर्यावरण" के साथ, लेकिन सभी हार्डवेयर के साझा सेट पर) और हम उपयोगकर्ता को बाद में प्रसंस्करण के लिए काम को बैच करने की क्षमता पेश कर रहे हैं। बैच किए गए काम के प्रकार वास्तव में महत्वपूर्ण नहीं हैं, यह केवल पर्याप्त मात्रा में है जो काम कतार के बिना ऐसा करना वास्तव में व्यावहारिक नहीं है। हमने RabbitMQ को हमारे अंतर्निहित कतार ढांचे के रूप में चुना है।खरगोश एमक्यू
क्योंकि हम एक बहु-किरायेदार ऐप हैं, इसलिए हम नहीं चाहते हैं कि ग्राहक किसी अन्य क्लाइंट के लिए लंबी कतार प्रक्रिया के समय का कारण बन सकें, इसलिए एक विचार जिसे हमने फ़्लोट किया है, प्रति पर एक कतार बना रहा है ग्राहक आधार और एक साझा कर्मचारी पूल हमारे सभी ग्राहक कतारों में इंगित किया गया है। समस्या यह है कि, सबसे अच्छा जो मैं समझ सकता हूं, श्रमिक सीधे एक विशिष्ट कतार से बंधे होते हैं, न कि विनिमय। हमारी आदर्श दुनिया में, हमारे ग्राहक कतारों को अभी भी संसाधित किया जाएगा, बिना किसी क्लाइंट को एक साझा कर्मचारी पूल से, जिसे हम अधिक श्रमिकों को लॉन्च करके या निष्क्रिय लोगों को बंद करके आवश्यकतानुसार बढ़ सकते हैं या घट सकते हैं। एक विशिष्ट कतार से बंधे श्रमिकों को हमें व्यावहारिक अर्थ में इससे रोकता है, क्योंकि हम अक्सर बहुत से श्रमिकों को बिना किसी गतिविधि के कतार में निष्क्रिय करते हैं।
क्या इसे पूरा करने के लिए अपेक्षाकृत सीधे आगे है? मैं RabbitMQ के लिए बिल्कुल नया हूं और वास्तव में जो कुछ भी कर रहा हूं उसे पूरा करने में सक्षम नहीं हूं। हम भी एक जटिल जटिल बहुसंख्यक उपभोक्ता अनुप्रयोग लिखना नहीं चाहते हैं, यह एक समय और परीक्षण समय में सिंक है जिसे हम शायद बर्दाश्त नहीं कर सकते हैं। हमारा ढेर विंडोज/नेट/सी # आधारित है अगर यह जर्मेन है, लेकिन मुझे नहीं लगता कि इस सवाल में हाथ में एक बड़ा असर होना चाहिए।
मैं एक ही कतार में एकाधिक श्रमिकों को असाइन करने के बारे में नहीं पूछ रहा हूं, मैं रिवर्स के बारे में पूछ रहा हूं। मैं श्रमिकों के एक सीमित पूल को बड़ी मात्रा में उपभोग करना चाहता हूं (चलो इसे 500 ~ कॉल करें) कतारों की संख्या। – bakasan
मैंने इस तरह के दृष्टिकोण के साथ पहले हाथ का प्रयोग किया है और यह सुंदर नहीं है: इन सभी कतारों को संसाधित करने के लिए उपयुक्त हेरिस्टिक खोजना मुश्किल है। क्या आप सबसे पहले पूर्ण कतारों को संसाधित करते हैं? या पुराने संदेशों वाले लोग? दोनों स्थितियों में, आप एएमक्यूपी प्रोटोकॉल से बाहर हैं और खरगोश प्रबंधन API से निपटना शुरू करना है। फिर आप सोचते हैं: चलो श्रमिकों की तुलना में कतारों की संख्या समान है और आप 500 क्यू और कार्यकर्ता कतारों के बीच कुछ सुसंगत हैश मैपिंग जोड़ते हैं। फिर आप महसूस करते हैं कि उस पर प्रतिस्पर्धा करने वाली एक कतार और एन श्रमिकों की आपको आवश्यकता है। –
मेरे पास एक समान आवश्यकता है, हालांकि मैं यह सुनिश्चित करना चाहता हूं कि किसी विशेष ग्राहक के संदेशों को अनुक्रमिक रूप से संसाधित किया जाए। संपर्क बनाने से पहले एक संपर्क हटाया नहीं गया है आदि। क्या वहाँ कुछ कॉन्फ़िगरेशन या रैबिटएमक्यू का सेटअप है जो इसे अभी तक श्रमिकों के बीच कतार साझा कर सकता है? (क्या यह एक नया क्यू है ...?) – Aaron