2008-10-03 13 views
5

मुझे बाहरी सिस्टम के लिए विश्वसनीय/लेन-देन के तरीके में ईवेंट और कार्यों को कतारबद्ध करने की आवश्यकता है। एमएसएमक्यू या एक्टिवएमक्यू जैसी चीजों का उपयोग करना बहुत मोहक दिखता है, लेकिन लेनदेन का हिस्सा जटिल हो जाता है (एमएसडीटीसी, आदि)।लेनदेन संबंधी क्यूइंग/डेक्यूइंग

हम डेटाबेस (SQL सर्वर 2005+, ओरेकल 9 +) का उपयोग कर सकते हैं और आसान लेनदेन समर्थन प्राप्त कर सकते हैं, लेकिन क्यूइंग भाग उलझन में हो जाता है।

न तो मार्ग बहुत अच्छा लगता है और गंदा गेटचा और किनारे के मामलों से भरा हुआ है।

क्या कोई इस मामले में कुछ व्यावहारिक मार्गदर्शन प्रदान कर सकता है?

सोचें: ई/सी/ए या एक नियत कार्य इंजन जो हर बार जागता है और देखता है कि इस समय चलने वाले किसी भी निर्धारित कार्य (यानी अगली रन-तिथि बीत चुकी है, लेकिन समाप्ति तिथि अभी तक नहीं पहुंचा है)।

उत्तर

5

हमारे सिस्टम में 60 कंप्यूटर हैं, प्रत्येक में 12 कार्य (थ्रेड) चल रहे हैं जिन्हें "अगली नौकरी पाने" की आवश्यकता है। सब कुछ, यह प्रति दिन 50 के "नौकरियों" आता है। प्रति मिनट कितने लेन-देन के गणित करें और कार्य समय को समझें वैरिएबल है, इसलिए एक ही समय में कई "पॉप" ईवेंट प्राप्त करना संभव है।

हमारे पास एमएसएमक्यू का उपयोग करके हमारा पहला संस्करण था। निष्कर्ष: दूर रहें।हालांकि यह लोड और सिंक्रनाइज़ेशन मुद्दों के साथ ठीक है, लेकिन इसमें 2 समस्याएं थीं। एक कष्टप्रद और एक सौदा ब्रेकर।

परेशान: एंटरप्राइज़ सॉफ़्टवेयर के रूप में, एमएसएमक्यू की सुरक्षा आवश्यकताएं हैं जो ग्राहकों को नेटवर्क व्यवस्थापक के साथ स्थापित करने और लड़ने के लिए एक और चीज बनाती हैं।

डील ब्रेकर: तब आया जब हम अगली नौकरी लेना चाहते थे, लेकिन एक साधारण पॉप का उपयोग नहीं करते थे, लेकिन "अगली नीली नौकरी पाने" या "अगली पीला नौकरी पाने" जैसे कुछ। यह नहीं कर सकता!

हम योजना बी पर गए: एक एकल एसक्यूएल 2005 तालिका के साथ अपना स्वयं का क्यू लागू किया। खुश नहीं हो सकता

मैंने प्रतिदिन 200K संदेशों के साथ परीक्षण किया, काम किया। हम "अगली" तर्क को जितना चाहें उतना जटिल बना सकते हैं।

पकड़: आपको अगले आइटम को ले जाने वाले एसक्यूएल के साथ बहुत सावधान रहना होगा। चूंकि आप इसे तेज और गैर लॉक करना चाहते हैं। 2 बहुत महत्वपूर्ण SQL संकेत हैं जो हम कुछ शोधों के आधार पर उपयोग करते हैं। जादू इस तरह कुछ चला जाता है:

SELECT TOP 1 @Id = callid 
FROM callqtbl WITH (READPAST, XLOCK) 
where 1=1 ORDER BY xx,yy 
+1

से मेल खाने के लिए कॉन्फ़िगर किया जा सकता है क्या आप उस क्वेरी को थोड़ा और गहराई से समझा सकते हैं? तिया! –

1

Quartz.Net एक ओपन सोर्स जॉब शेड्यूलिंग सिस्टम है।

+0

दिलचस्प नामित ओरेकल सुविधा देख सकते हैं, मैं निश्चित रूप से इस एक नज़र दे देंगे। – chadmyers

0

क्या वेबस्पियर एमक्यू (एमक्यू सीरीज़) एक विकल्प है? लेनदेन संदेश का समर्थन करता है।

+0

संभावित रूप से। क्या इसकी लेनदेन प्रसंस्करण में डाटाबेस लेनदेन भी शामिल है (वितरित लेनदेन)? यह इसके लायक है? – chadmyers

+0

यह शायद इसके लायक नहीं है क्योंकि यह केवल मैसेजिंग सिस्टम के लिए आंतरिक लेनदेन प्रसंस्करण है। यदि आप प्राप्त/निकायों के साथ डीबी कॉल भी शामिल करना चाहते हैं तो आपको एमएसडीटीसी गुओ की भी आवश्यकता होगी (विंडोज़ मानते हुए) एमक्यू सीरीज़ कुछ भी ज्यादा पर चलता है: http://www.mqseries.net/phpBB2/index.php – MotoWilliams

4

मैंने एमएसएमक्यू को लेनदेन के रूप में इस्तेमाल किया है और यह विशेष रूप से जटिल नहीं लग रहा है - एक लेनदेन स्कोप ने डेटाबेस पहुंच के साथ एनक्यू या डेक्यू कॉल को लपेट लिया और सभी तब तक अच्छी तरह से थे जब कतार को इसे बनाया जाने के बाद लेनदेन के रूप में परिभाषित किया गया था । मुझे नहीं लगता कि यह ActiveMQ के साथ सच है, जो एक संदेश ब्रोकर है, लेकिन एमएसएमक्यू प्रत्येक एंडपॉइंट मशीन पर स्थानीय रूप से स्थापित है, इसलिए कतार में लेन-देन की वस्तु प्राप्त करने के लिए एक फैंसी वितरित लेनदेन की आवश्यकता नहीं होती है।

आप शायद पहले से ही कर रहे हैं इस बारे में पता होना है, लेकिन नेट पर कुछ हल्के पुस्तकालयों कि MSMQ (और साथ ही सैद्धांतिक रूप से अन्य परिवहन)

nServiceBus पर कुछ अच्छा कपोल-कल्पना प्रदान कर रहे हैं: www.nservicebus.com

मास ट्रांजिट: http://code.google.com/p/masstransit/

इसके अलावा, ओरेन एनी का प्रयोग दिलचस्प है अगर प्रयोगात्मक फ़ाइल सिस्टम आधारित, लेनदेन कतार। इस पुस्तकालय का लाभ यह है कि, एमएसएमक्यू के विपरीत, इसे पुस्तकालय के रूप में तैनात किया जा सकता है और एमएसएमक्यू को तैनात करने के रखरखाव के सिरदर्द की आवश्यकता नहीं होती है।

आप के बारे में पढ़ सकते हैं कि यहाँ: http://ayende.com/Blog/archive/2008/08/01/Rhino.Queues.Storage.Disk.aspx

इसके अलावा, SQL सर्वर 2005 सुंदर ढंग से काफी कतार, एसक्यूएल सर्वर सेवा ब्रोकर का उपयोग कर का क्या करता है, लेकिन आप एसक्यूएल सर्वर प्रत्येक समाप्ति बिंदु पर स्थापित की आवश्यकता होगी, और मुझे नहीं पता पता है कि एसएसबी फ़ायरवॉल पार करता है या नहीं।

अंत में, यदि आपको उत्तर नहीं मिलता है तो आप यहां देख रहे हैं मैं अत्यधिक एनएसईआरवीइस चर्चा चर्चा मंच की सलाह देता हूं। उडी दहन संदेश के उन्मुख अनुयायियों के अपने छोटे बैंड के साथ इस तरह के प्रश्नों का उत्तर देते हैं, और यह अब तक का सबसे अच्छा संसाधन है जो मैंने पाया है कि मेरे कतार उन्मुख प्रश्नों को जल्दी और सक्षम तरीके से उत्तर दिया गया है। वह मंच यहां है: http://tech.groups.yahoo.com/group/nservicebus/

+0

एसएसबी एंडपॉइंट्स का उपयोग करता है जो यूडीपी पोर्ट का उपयोग करने के लिए कॉन्फ़िगर किए जाते हैं। तो फ़ायरवॉल –

1

एमएसएमक्यू को लेन-देन के साथ कतारबद्ध करने के लिए डिज़ाइन किया गया है। यदि यह आपके लिए काम नहीं करता है, तो SQL सर्वर की "सेवा ब्रोकर" सुविधा देखें - इसकी "SQL तालिका में कतार" है जो 'csmba' उनके उत्तर में वर्णित है, लेकिन यह एक एकीकृत SQL सर्वर घटक है, अच्छी तरह से पैक किया गया है और आपके उपयोग के लिए खुलासा किया।

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