2011-06-15 14 views
13

मेरे पास यह परिदृश्य है: एक क्लाइंट एक एमएसएमक्यू कतार उदाहरण में एक संदेश भेजता है और 3 प्रक्रियाएं हैं जो इस कतार को सुनती हैं। मैं उन सभी मामलों में से एक को एक अलग संदेश चुनने और इसे संसाधित करने में सक्षम होना चाहता हूं।कई (श्रोताओं) परिदृश्य के लिए एमएसएमक्यू एक (कतार)

मुझे पता है कि कतारों के लिए यह एक सामान्य उपयोग परिदृश्य है और मेरे पास एमएसएमक्यू, .NET और C# का उपयोग कर इसके लिए पहले से ही कोड है।

हालांकि मुझे आश्चर्य है कि एमएसएमक मेरा सबसे अच्छा विकल्प है - दस्तावेज़ीकरण स्पष्ट रूप से बताता है कि एमएसएमक्यू "एक से एक" संचार के लिए है, जिसका अर्थ है कि एक से अधिक श्रोता नहीं होना चाहिए।

इस तरह की मुझे आश्चर्यजनक छोड़ देता है, क्या मैं अपने उपयोग के मामले के लिए सही समाधान कर रहा हूं? या यह दूसरा रास्ता है, क्या मुझे प्रति श्रोता एक कतार बनाना है और वर्कफ़्लो के पहले भाग में संदेशों को वितरित करना है?

इस प्रकार के परिदृश्य में एमएसएमक्यू के उपयोग का प्रदर्शन करने वाले एक कामकाजी उदाहरण के लिए एक लिंक की सराहना की जाएगी।

धन्यवाद

उत्तर

8

जैसा कि मैं समझता हूं कि आप लोड श्रवण जैसे कुछ करने के लिए कई श्रोताओं का उपयोग कर रहे हैं। यह एक बिल्कुल मान्य परिदृश्य है और इसे अक्सर क्लस्टर वातावरण में या लोड संतुलन परिदृश्यों में उपयोग किया जाता है जहां एक एकल श्रोता सभी आने वाले संदेशों का उपभोग करने में सक्षम नहीं होता है। Btw। क्लस्टर्ड बिज़टॉक एमएसएमक्यू संदेशों को उसी तरह से उपभोग करता है।

एक-से-एक का मतलब है क्योंकि एक संदेश एक श्रोता को पास किया जाता है लेकिन इसका मतलब यह नहीं है कि प्रत्येक कतार में केवल एक श्रोता हो सकता है। यदि सभी श्रोताओं एक ही प्रसंस्करण करते हैं और यह निर्भर नहीं करता कि कौन सा संदेश उठाएगा, यह अभी भी एक-एक है।

एकाधिक श्रोताओं को एक संदेश देने के लिए एक कतार का उपयोग करना भी संभव है। एमएसएमक्यू के साथ इस परिदृश्य की अनुशंसा नहीं की जाती है, भले ही यह ट्रिगर्स के साथ तकनीकी रूप से संभव हो।

यदि आपके श्रोताओं केवल कुछ विशेष गुणों के साथ संदेशों के लिए सुनते हैं, तो यह पहचानने के लिए कि कौन सा श्रोता संदेश का उपभोग करना चाहिए (यानी आप कतार में संदेशों की खोज करते हैं), आपको निश्चित रूप से तीन कतारों का उपयोग करना चाहिए।

+3

मल्टीकास्ट एकाधिक कतारों के लिए एक संदेश है, एकाधिक श्रोताओं नहीं। –

+1

@ जॉन: धन्यवाद मैंने अपना जवाब संशोधित किया। –

1

यह आप की तरह लगता है एक सेवा बस की जरूरत है - लेकिन, वे कुछ हद तक हैवीवेट हो जाते हैं, तो यह overkill हो सकता है। एक सेवा बस के साथ, आप प्रकाशित-सदस्यता सदस्यता सेट अप कर सकते हैं जिसमें श्रोताओं की संख्या किसी भी संदेश की सदस्यता ले सकती है। NServiceBus एक सेवा बस है जो उपयोग करने के लिए कुछ आसान है (और यह एमएसएमक्यू के शीर्ष पर बनाया गया है); इसका एक मुफ्त संस्करण है जो प्रति सेकंड 30 संदेशों को कैप्चर किया गया है। Rhino ESB भी हल्के होने का दावा करता है।

4

"दस्तावेज़ीकरण स्पष्ट रूप से बताता है कि एमएसएमक्यू" एक से एक "संचार के लिए है, जिसका अर्थ है कि एक से अधिक श्रोता नहीं होना चाहिए।"

आपके पास इसके लिए एक लिंक है?
1-1: एक प्रेषक, एक गंतव्य कतार
1-एम: कई गंतव्य कतारों

इसके अलावा करने के लिए एक प्रेषक मल्टीकास्टिंग, आप एक कतार पर कई श्रोताओं हो सकता है

MSMQ दो वितरण तरीकों का उपयोग करता। श्रोताओं की संख्या आप पर निर्भर है। बेशक, एकाधिक श्रोताओं के बीच विवाद होगा ताकि अगर आप संदेशों को संसाधित करना चाहते हैं तो केवल उस समय कोड/कॉन्फ़िगर करने की आवश्यकता हो।

+0

मैं इस परिदृश्य को लागू करने के "सर्वोत्तम अभ्यास" का प्रदर्शन करने वाले कार्य कोड देखना चाहता हूं: "इसके अलावा, आपके पास कतार पर एकाधिक श्रोताओं हो सकते हैं। श्रोताओं की संख्या आपके ऊपर है। बेशक, एकाधिक के बीच विवाद होगा श्रोताओं को तो अगर आप संदेशों को संसाधित करना चाहते हैं तो केवल एक बार आपको इसके लिए कोड/कॉन्फ़िगर करने की आवश्यकता हो। " लिंक के लिए, मैं वर्तमान में खोज रहा हूं। – UrbanEsc

+0

अफसोस की बात है कि मैं एक एमएसएमक्यू इंफ्रास्ट्रक्चर विशेषज्ञ हूं जो कोड नहीं करता है। –

+0

मैं भी आपको उत्तर के रूप में चिह्नित करना चाहता हूं, क्योंकि यह Ladislav Mrnka उत्तर में जोड़ता है लेकिन दुर्भाग्य से यह काम नहीं करता है :(इसके अलावा मैंने msdn पर लिंक ढूंढने का प्रयास किया है जो मूल रूप से इस प्रश्न को ट्रिगर करने वाले 1-1 परिदृश्य का दावा करता है, दुर्भाग्य से मैं इसे और नहीं ढूंढ सकता। – UrbanEsc

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