2010-08-18 17 views
5

मैं NServiceBus और MSMQ के बारे में सीख रहा हूं। मुझे बताया गया था कि एमएसएमक्यू में लेनदेन कतार बीएडी हैं और उनका उपयोग प्रदर्शन के लिए वास्तव में खराब है। क्या किसी को पता है क्यों? मुझे लगता है कि यह धारणा से आता है कि यह डीटीसी का उपयोग करता है और हर कोई जानता है कि डीटीसी वास्तव में एक स्केलेबल समाधान नहीं है। ऐसा लगता है कि कुछ कारण हैं कि एनएस सर्विसबस के साथ एमएसएमक्यू इतना बुरा नहीं है, लेकिन मुझे नहीं पता कि मैं समझता हूं कि यह पूरी तरह से कैसे काम करता है। तार्किक रूप से इस को देखते हुए, मैं 3 स्थानों के बारे में सोच NServiceBus क्रम में लेन-देन का उपयोग कर सकते हैं जहां गारंटी वितरण प्राप्त करने के लिए कर सकते हैं:NServiceBus: एमएसएमक्यू लेनदेन बीएडी नहीं हैं?

  1. जब नेटवर्क भर में एक संदेश भेजने के लिए, आप संदेश है कि यह सुनिश्चित करने के एक सौदे का उपयोग करना चाहें इससे पहले कि आप इसे छोड़ दें रिमोट कतार में पहुंचे।
  2. स्थानीय कतार से संदेश पढ़ने पर, आप यह सुनिश्चित करना चाहते हैं कि इसे हटाने से पहले इसे सफलतापूर्वक संभाला जा सके।
  3. एकाधिक ग्राहकों को एक संदेश प्रकाशित करते समय, आप यह सुनिश्चित करना चाहते हैं कि यह उन सभी को छोड़ने से पहले पहुंच जाए। (मुझे उम्मीद है कि यह एनएस सर्विसबस नहीं करता है)

क्या कोई मुझे सीधे सेट कर सकता है कि NServiceBus यह कैसे करता है?

+1

वे एक टैड प्रदर्शन-चुनौतीपूर्ण हो सकते हैं - लेकिन मैं उन्हें बीएडी नहीं कहूंगा - एक ऑपरेशन होने पर आमतौर पर एक "अच्छी बात" (टीएम) –

+0

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

उत्तर

12

एमएसएमक लेनदेन गारंटी नहीं देता है कि रिसीवर को संदेश प्राप्त हुआ है। लेनदेन गारंटी देता है कि संदेश आपकी मशीन पर एमएसएमक बुनियादी ढांचे द्वारा प्राप्त किया गया है, और यदि संदेश टिकाऊ है (एनएसबी में डिफ़ॉल्ट) इसका मतलब है कि यह डिस्क पर जारी रहा है और पुनरारंभ होगा। संदेश को कॉलर को अवरुद्ध किए बिना एमएसएमक द्वारा वितरित किया जाएगा। इसे "स्टोर और फॉरवर्ड" के रूप में जाना जाता है

  1. डिफ़ॉल्ट रूप से एमएसएमक्यू केवल गारंटी देता है कि आपके स्थानीय एमएसएमक बुनियादी ढांचे को संदेश प्राप्त हुआ है। कोई आवश्यकता नहीं है कि प्राप्तकर्ता सर्वर ऑनलाइन हैं। हालांकि इसे सक्षम किया जा सकता है (नीचे जॉन से जवाब देखें)

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

  3. # 1 के समान। एकमात्र गारंटी यह है कि प्रत्येक ग्राहक को अंततः प्रकाशित संदेश प्राप्त होगा। कोई अवरुद्ध कॉल नहीं किया जाता है, जब तक आपके पास खाली डिस्क स्थान हो और प्रकाशन सर्वर कॉल तुरंत लौट आएगा।

आशा है कि इससे मदद मिलती है!

1

प्वाइंट # 2 सही है। आप एक संदेश को त्रुटि का कारण नहीं बनना चाहते हैं और फिर दरारों के माध्यम से गिरना चाहते हैं। आप संदेश हैंडलर को सफल होने के लिए चाहते हैं, इस मामले में इसे कतार से हटा दिया गया है, या असफल हो गया है और वापस लुढ़काया जा सकता है, ताकि इसे या तो पुन: प्रयास किया जा सके या एक कॉन्फ़िगर करने योग्य संख्या में पुनः प्राप्त होने के बाद विश्लेषण के लिए त्रुटि कतार में भेजा जा सके ।

0

प्वाइंट 1 - अपूर्ण। लेनदेन संबंधी संदेश आपको यह देते हैं यदि आप मृत पत्र कतारों और टीटीआरक्यू/टीटीबीआर टाइमर के साथ नकारात्मक और पोस्टिव स्रोत जर्नलिंग का उपयोग करते हैं। फिर आप यह निर्धारित कर सकते हैं कि किसी संदेश के साथ क्या हुआ है - अगर इसे अस्वीकार कर दिया गया था, अगर इसे डिलीवर किया गया था, तो इसे संसाधित किया गया था।

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