वर्तमान स्थिति: मेरे पास एन देरी वाले नौकरी श्रमिकों के साथ रेल ऐप है। जब भी मैं कुछ मशीन को एसएसएच अनुरोध भेजना चाहता हूं, तो मैं कार्यकर्ता के लिए एक कार्य बनाता हूं। कर्मचारी कुछ ऐसा करता है:रेल + देरी नौकरियां: एसएसएच कनेक्शन पूल
Net:SSH.start(hostname, username, :password => pass) do |ssh|
ssh.exec!(command)
end
कभी-कभी मैं उदा। 50 ऐसे कार्यों को एक-एक करके, या एक-दूसरे से 5-10 मिनट के भीतर किया जाना चाहिए। इस मामले में प्रत्येक कार्य अलग कनेक्शन खोलता है, जो प्रभावी नहीं है और कभी-कभी कई कनेक्शनों के कारण लक्षित सर्वर द्वारा अवरुद्ध किया जाता है।
मुझे क्या चाहिए: कहीं भी संग्रहीत कनेक्शन खोले हैं और प्रत्येक कार्यकर्ता द्वारा पुन: उपयोग किया जाता है। ताकि प्रत्येक कार्यकर्ता किसी भी तरह और फिर कनेक्शन प्राप्त सिर्फ
ssh.exec!(command)
चलाने मैं क्या प्रयास किया है:
- फ़ाइल/डेटाबेस में कनेक्शन भंडारण/कैश के रूप में वे serializable नहीं हैं संभव नहीं लग रहा है
- ने प्रारंभिकरण के तहत तत्काल वैश्विक चर के साथ सिंगलटन कक्षा का उपयोग करने का प्रयास किया है। हालांकि वर्ग कार्यकर्ता प्रत्येक कार्यकर्ता के लिए अलग है (बाद में पाया गया है कि वैश्विक चर एक विकल्प नहीं हो सकता है)।
क्या इसे हल करने का कोई तरीका है? कोई अन्य विचार? धन्यवाद!!
क्या आपके कार्य कुछ समय के लिए आयोजित हैं, या आप बस एसएसएच कार्यों को सिंक्रनाइज़ कर रहे हैं? –
कार्य वास्तव में देरी नहीं कर रहे हैं, लेकिन कतार की तरह अधिक। उदा। एक ऑपरेशन ए है जिसके दौरान एसएसएच कमांड का गुच्छा निष्पादित किया जाता है, फिर कार्य बी (5-10 मिनट), फिर कार्य सी (फिर से एसएसएच अनुरोध) –