2008-10-27 13 views
23

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

कुछ विवरण:

  • हमारे ग्राहक नेट 1.1 और 2.0 कोड है, यह वह जगह है जहां से संदेश भेजा जाएगा।
  • SQL सर्वर 2005 उदाहरण में लक्ष्य। सभी संदेश डेटाबेस अपडेट या आवेषण होते हैं।
  • हम कई अपडेट भेज देंगे जिन्हें लेनदेन के रूप में माना जाना चाहिए।
  • हमें सही संदेश पुनर्प्राप्ति होना है; कोई संदेश खोया नहीं जा सकता है।
  • लक्ष्य एसक्यूएल सर्वर डाउन होने पर भी हमें अतुल्यकालिक और संदेशों को स्वीकार करने में सक्षम होना चाहिए।
  • अपना खुद का क्यूइंग समाधान विकसित करना एक विकल्प नहीं है; हम एक छोटी टीम हैं।

चीजें मैं अब तक की खोज की है:

  • दोनों MSMQ और SQL सेवा ब्रोकर काम कर सकते हैं।
  • ऐसा प्रतीत होता है कि सेवा दलाल लेनदेन संबंधी संदेशों के लिए तेज़ है।
  • सेवा ब्रोकर को कहीं भी चल रहे SQL सर्वर की आवश्यकता होती है, जबकि एमएसएमक्यू को कहीं भी चल रहे किसी भी कॉन्फ़िगर किए गए विंडोज मशीन की आवश्यकता होती है।
  • क्लस्टर में स्थापित/चलाने के लिए एमएसएमक्यू बेहतर/तेज़/आसान प्रतीत होता है।

Am मैं कुछ याद आ रही? क्या यहां एक स्पष्ट विजेता है? किसी भी विचार, अनुभव, या लिंक का मूल्य निर्धारण किया जाएगा। धन्यवाद!

संपादित करें: हम सेवा दलाल के साथ चिपके हुए है क्योंकि हम अपने ग्राहक कोड के कुछ में इस्तेमाल एक कस्टम डीबी रूपरेखा है समाप्त हो गया (हम लेनदेन बेहतर संभाल)। उस कोड ने लेनदेन के लिए एसक्यूएल पर कब्जा कर लिया, लेकिन नहीं। क्लाइंट कोड .NET के सभी संस्करण 1.1 भी था, इसलिए हमें सभी क्लाइंट कोड को अपग्रेड करना होगा। आपकी सहायताके लिए धन्यवाद!

+3

यदि आपका क्लाइंट कोड डेटाबेस सर्वर के अलावा किसी मशीन पर चलता है, तो सुनिश्चित करें कि आप रोलबैक परिदृश्य का परीक्षण करें। मैं उन मुद्दों में भाग गया जहां मैं कतार को संसाधित करता था और मुझे दूरस्थ अंतराल के कारण कुछ विफल करने की आवश्यकता होती थी, मैं सेवा ब्रोकर में कतार को समाप्त कर दूंगा क्योंकि यह ऑफ़लाइन होने से पहले 5 विफलताओं को ही संभाल सकता है। इस के आसपास पहुंचने के लिए मुझे सेवा ब्रोकर के लिए लेनदेन को अक्षम करना पड़ा और कोड में अपवाद हैंडलिंग पर भरोसा करना पड़ा, जिसका अर्थ है कि कुछ विफलताओं के तहत मैं पूरी तरह से संदेश खो देता हूं। –

+0

अंतिम विकल्प क्या था? ऐसा है कि पूछने में बहुत देर हो चुकी है :)। –

+1

@the coon: हम एसक्यूएल सेवा ब्रोकर का उपयोग कर समाप्त हो गए, और यह ठीक काम किया (जैसा कि मैंने उपरोक्त संपादन में उल्लेख किया है)।उस समय हमारे लिए यह बेहतर विकल्प था, हालांकि मुझे लगता है कि (इन दोनों के बीच) मैं एमएसएमक्यू का उपयोग करता हूं अगर मैं सिस्टम को खरोंच से पुनर्निर्माण करना चाहता हूं। –

उत्तर

31

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

  • यदि डेटाबेस में प्रसंस्करण किया जाता है? सेवा ब्रोकर
  • यदि यह केवल डेटा चाल है?सेवा ब्रोकर
  • क्या .NET/COM कोड में प्रसंस्करण किया जा रहा है? एमएसएमक्यू
  • क्या आपको दूरस्थ वितरित लेनदेन की आवश्यकता है (उदाहरण के लिए, एसक्यूएल से अलग बॉक्स पर प्रसंस्करण)? एमएसएमक्यू
  • क्या गंतव्य नीचे होने पर आपको संदेश भेजने में सक्षम होना चाहिए? एमएसएमक्यू
  • क्या आप nServiceBus, MassTransit, Rhino-ESB इत्यादि का उपयोग करना चाहते हैं? MSMQ

हालात चाहे आप कुछ भी चुन

  • आप अपने कतार के स्वास्थ्य कैसे पता चलेगा कि विचार करने के लिए? दोनों विकल्प अलग-अलग विफलता संभालते हैं। उदाहरण के लिए सेवा ब्रोकर कुछ परिदृश्यों में आपकी कतार को अक्षम कर देगा जो आपके आवेदन को कम कर सकता है।
  • आप रिपोर्टिंग कैसे करेंगे? यदि आप पहले से ही अपनी रिपोर्ट में SQL टेबल्स का उपयोग करते हैं, तो सेवा ब्रोकर आसानी से फिट हो सकता है क्योंकि यह एक और गतिशील तालिका है। यदि आप पहले से ही प्रदर्शन मॉनिटर का उपयोग कर रहे हैं तो MSMQ अच्छी तरह से फिट हो सकता है। सेवा ब्रोकर में बहुत सारे प्रदर्शन काउंटर हैं, इसलिए इसे अपना एकमात्र कारक न होने दें।
  • आप अपटाइम को कैसे मापते हैं? क्या यह केवल यह सुनिश्चित कर रहा है कि आप लेनदेन न खोएं, या आपको समकालिक रूप से प्रतिक्रिया देने की आवश्यकता है? मुझे लगता है कि की वितरित प्रकृति MSMQ उच्च अपटाइम की अनुमति देती है क्योंकि मुख्य कतार ऑफ़लाइन जा सकती है और कुछ भी नहीं खो सकती है। जबकि सेवा ब्रोकर के साथ आपका डेटाबेस ऑनलाइन होना चाहिए या अन्यथा आप हार जाएंगे।
  • क्या आपके पास पहले से ही इनमें से किसी एक तकनीक के साथ अनुभव है? दोनों में बहुत सारे कार्यान्वयन विवरण हैं जो वापस आ सकते हैं और आपको काट सकते हैं।
  • कोई माटर आप क्या पसंद करते हैं, अंतर्निहित क्यूइंग तकनीक को स्विच करना कितना आसान है? मैं एक सामान्य IQueue इंटरफ़ेस रखने की अनुशंसा करता हूं कि आप इसके खिलाफ एक ठोस कार्यान्वयन लिखते हैं। इस तरह यदि आप पाते हैं कि आपने गलत किया है तो इस तरह की पसंद आसानी से बदल दी जा सकती है। आखिरकार, एक कतार सिर्फ एक कतार है और आपको एक विशिष्ट कार्यान्वयन में बंद नहीं करना चाहिए।
+1

"क्या गंतव्य नीचे होने पर आपको संदेश भेजने में सक्षम होना चाहिए? एमएसएमक्यू" - आप इसे सेवा ब्रोकर के साथ कर सकते हैं, आपको बस भेजने के लिए स्थानीय डेटाबेस होना चाहिए। –

+0

मुझे पता है कि यह उत्तर 4 साल पहले से है ... लेकिन आप हमेशा सेवा ब्रोकर के साथ दूरस्थ रूप से और पारस्परिक रूप से कतारों को संसाधित करने में सक्षम रहे हैं। (और जब तक आप रूटिंग का उपयोग नहीं कर रहे हैं, तो आप इसे एसक्यूएल एक्सप्रेस के साथ मुफ्त में कर सकते हैं।) हाँ, माइक्रोसॉफ्ट से नेट क्लाइंट रैपर थोडा बेकार है लेकिन एसक्यूएल कमांड को एडीओ.Net या एंटिटी फ्रेमवर्क के साथ लपेटना वाकई आसान है । 5 रोलबैक के बाद बंद कतार आसानी से आपके मुख्य लूप के शीर्ष पर "सक्षम कतार" कथन डालकर हल हो सकती है। –

4

मैंने पहले एमएसएमक्यू का उपयोग किया है और केवल एक ही आइटम जो मैं आपकी सूची में जोड़ूंगा वह संस्करण के लिए एक पूर्व शर्त है। मैं एक ऐसे मुद्दे में भाग गया जहां एक साइट के पास विन 2000 सर्वर था और इसलिए एमएसएमक्यू वी 2, बनाम विन 2003 सर्वर और एमएसएमक्यू वी 3। मेरे सभी .NET कोड लक्षित v.3 और वे संगत नहीं हैं ... या कम से कम आसानी से नहीं।

यदि आप एमएसएमक्यू रूट पर जाते हैं तो बस एक विचार करें।

3

MSMQ में संदेश आकार सीमा उस दिशा में मेरी खुदाई को रोक दिया है। मैं परियोजना के लिए सेवा ब्रोकर सीख रहा हूं।

1

क्या गंतव्य नीचे होने पर आपको संदेश भेजने में सक्षम होना चाहिए? एमएसएमक्यू

मुझे समझ में नहीं आता क्यों? एसएसबी बिना किसी समस्या के डिस्कनेक्ट किए गए गंतव्य पर संदेश भेज सकता है। ये सभी संदेश ट्रांसमिशन कतार में जा रहे हैं और गंतव्य पहुंचने पर पहुंच जाएगा।

+2

क्या होगा यदि एसएसबी नीचे है? या एक नेटवर्क कनेक्शन चला जाता है? एमएसएमक्यू के साथ यह अभी भी स्थानीय रूप से लिखेगा और कनेक्शन बहाल होने के बाद सार्वजनिक कतार में उपलब्ध होगा। यदि नेटवर्क कनेक्शन नीचे चला जाता है, तो आप एसएसबी कतार में संदेश नहीं जोड़ सकते हैं। –

+1

नेटवर्क समस्या को हल करने का तरीका यह है कि सभी संचार सर्वरों का अपना डेटाबेस सर्वर हो। चूंकि सेवा ब्रोकर को SQL सर्वर एक्सप्रेस द्वारा समर्थित किया जाता है, इसलिए इसकी आवश्यकता अधिक नहीं होती है। –

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

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