मेरे जावाईई वेब एप्लिकेशन के भीतर, मुझे आने वाले संदेशों को आगमन के क्रम में कड़ाई से संसाधित करने की आवश्यकता है। मुझे लगता है कि मेरे वेबपैप कंटेनर (टॉमकैट 6) संदेश के क्रम को बनाए रखता है क्योंकि वे http पोर्ट पर पहुंचते हैं।सख्त क्रम के साथ संदेशों की समवर्ती प्रसंस्करण
मुझे सिरदर्द का कारण क्या होता है, वैसे ही मैं आंतरिक रूप से इन संदेशों को संसाधित कर रहा हूं। बेहतर वर्कलोड के लिए, मैं प्रत्येक संदेश की प्रसंस्करण को थ्रेडपूल में जोड़ता हूं क्योंकि यहां कई चीजें करने की आवश्यकता है। एक्सएमएल पार्सिंग, कभी-कभी बाहरी वेब सेवाओं का उपयोग कर डेटा का संवर्द्धन। प्रसंस्करण समाप्त होने के बाद, मैंने संदेश के जावा प्रतिनिधित्व को एक जटिल स्ट्रीम प्रसंस्करण इंजन esper.codehaus.org में धक्का दिया, जो थ्रेडसेफ है। यहां, विभिन्न पैटर्न की जांच की जाती है जहां प्रवेश आदेश उच्चतम आवश्यकता है, उदाहरण के लिए किसी घटना की दहलीज सीमा से अधिक है।
मुझे प्रत्येक संसाधित संदेश को प्राथमिकता प्रश्न में डालने का विचार था, जो आगमन के समय प्राप्त प्राथमिकता आईडी (मेरे सर्वलेट में, जहां यह प्रत्येक संदेश के लिए बढ़ाया जाता है)। समस्या निम्न है:
वह धागा जो कतार से तत्वों को मतदान कर रहा है (सबसे कम आईडी कतार का सिर है) इसे एस्पर में डालने के लिए एक आईडी छोड़ सकती है क्योंकि यह गायब वस्तुओं की जांच नहीं करती है। मुझे लगता है कि एक उदाहरण बेहतर बाहर काम करता है:
चरणों के लिए (1) (4) सब कुछ के रूप में इरादा काम करता है। लेकिन चरण (5) पर QueuePoller तत्व 6 को पुनर्प्राप्त करता है और तत्व 4 नहीं (जिसे बाद में चरण (6) में डाला जाता है)। इसका परिणाम संदेश क्रम में होता है: 2; 3; 6; 4.
मैंने जो करने की कोशिश की थी वह कतार के सिर को मतदान के कार्यान्वयन को बदलने के लिए आईडी के सख्त क्रम का पालन करना था। मतलब, यदि अगली आईडी का तत्व अभी तक कतार में डाला नहीं गया है, तो वहां तक बाधा पर प्रतीक्षा करें। यह पहले 10 मिनट के लिए काम करने लग रहा था, लेकिन फिर फांसी, शायद एक तत्व के कारण जो कतार में कभी नहीं डाला गया था।
किसी को भी अतीत में एक ही समस्या है और मेरे लिए कुछ संकेत है?
जैसे ही वे आपके सर्वर पर पहुंचते हैं, आप कतार वस्तुओं को बेहतर बना सकते हैं, फिर उन्हें केवल कतार से लिया जा सकता है और एक बार उनकी प्रक्रिया पूरी हो जाती है। –
जो मुझे समझ में नहीं आता है, अगर आउटपुट कतार में तत्वों के क्रम को इनपुट कतार में ऑर्डर से मेल खाना है, तो उन्हें ऑर्डर करने का क्या अच्छा प्रसंस्करण है? यही है, अगर क्यूईपॉलर को 6 से पहले 4 की आवश्यकता है तो 4 से पहले क्यों करें? – aib
मैंने उन दोनों के बारे में सोचा, लेकिन मुझे लगता है कि यह इसी तरह के परिणाम का कारण बन जाएगा। मान लीजिए, मैं एक ध्वज का उपयोग करता हूं जो इंगित करता है कि प्रसंस्करण समाप्त हो गया है, अगर प्रोसेसिंग में कुछ गड़बड़ हुई है (सर्वर टाइमआउट, इत्यादि जो भी तत्व को सम्मिलित नहीं किया जाता है, तो भी समस्याएं उत्पन्न हो सकती हैं)। इस प्रकार, सूचक ध्वज कभी भी सत्य पर सेट नहीं किया जाएगा। – matthes