2013-01-22 5 views
7

मैं पूछना चाहता हूं कि जावा सर्वलेट से लंबी प्रक्रिया चलाने के लिए सबसे अच्छा तरीका क्या है। मेरे पास एक वेबपैप है और जब ग्राहक अनुरोध करता है तो यह सर्वलेट चलाता है। इस सर्वलेट को अनुरोध से कुछ पैरामीटर प्राप्त करना चाहिए और फिर एक प्रक्रिया चलाता है। इस प्रक्रिया में काफी समय लग सकता है इसलिए मुझे इसे अलग से चलाने की जरूरत है। जब इस प्रक्रिया को समाप्त कर दिया जाता है, तो यह परिणाम के साथ एक ईमेल भेजता है।जावा सर्वलेट से लंबी प्रक्रिया चलाने के लिए सबसे अच्छा तरीका क्या है?

अग्रिम धन्यवाद।

उत्तर

5

एक थ्रेड पूल का उपयोग करें। प्रत्येक बार जब आप एक अनुरोध प्राप्त करते हैं, तो एक कार्य बनाएं और इसे थ्रेड पूल में सबमिट करें। यह सुनिश्चित करेगा कि बहुत से अनुरोध सर्वर को घुटनों पर नहीं लाएंगे, क्योंकि आप इस बात पर नियंत्रण रखते हैं कि आपके पास कितने समवर्ती धागे हो सकते हैं, और प्रतीक्षा कार्यों के थ्रेड पूल की कतार में कितने कार्य प्रतीक्षा कर सकते हैं।

Executors और ThreadPoolExecutor के लिए जावाडोक देखें।

1

मैं दो संभावनाएं ऐसा करने के लिए देखें:

  1. प्रत्येक कार्य (थ्रेड पूल दृष्टिकोण) के लिए एक अलग थ्रेड बनाएँ। यह संभव है, लेकिन संभावित रूप से एक प्रदर्शन समस्या पैदा कर सकते हैं।
  2. दूसरा एप्लिकेशन बनाएं। उदाहरण के लिए आप पैरामीटर को डीबी में सहेज सकते हैं। दूसरा आवेदन कुछ अंतराल के साथ इस डीबी की निगरानी करेगा और कुछ करेगा। इसके बजाय डीबी आप WebSphere MQ

दूसरा दृष्टिकोण जैसे कुछ संदेश कतार प्रबंधक का उपयोग कर सकते हैं लाभ है: अगर एप्लिकेशन किसी कारण से अब अनुरोध पर कार्रवाई करने में सक्षम नहीं है, एप्लिकेशन बाद में

2

हालांकि इस ध्वनियों यह पर लौट सकते हैं थोड़ा सा खतरनाक है कि एक सर्वलेट का आविष्कार एक प्रक्रिया को बढ़ाता है (जगह पर उचित थ्रॉटलिंग क्षमताओं के बिना), आप Runtime.getRuntime().exec() का उपयोग कर प्रक्रिया को बढ़ा सकते हैं। प्रक्रिया तर्क तैयार करने और इसे उत्पन्न करने के लिए ProcessBuilder का उपयोग करना बेहतर होगा।

2

आम तौर पर इस प्रकार की गतिविधियों को किसी अन्य प्रकार के एप्लिकेशन मॉड्यूल पर भेजा जाता है जैसे कि संदेश संचालित बीन और यह मेरे लिए सबसे साफ और मानक अनुपालन समाधान प्रतीत होता है। यद्यपि अधिकतर सर्वर शिकायत नहीं करेंगे यदि आप अपना खुद का धागा बनाते हैं (जिसे मानक द्वारा प्रतिबंधित किया जाता है लेकिन शायद ही कभी लागू किया जाता है) आपके स्वयं के नौकरी कतार को स्थापित करने के लिए आवश्यक प्रबंधन की मात्रा और पूल निष्पादन पर्यावरण को मेरी राय में वास्तव में लायक नहीं है।

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