2016-05-10 9 views
5

पृष्ठभूमिएक एकल NServiceBus एंडपॉइंट कैसे बनाएं जो विभिन्न ट्रांसपोर्ट का उपयोग करता है?

हम अपनी कंपनी में एक नया वास्तुकला पैटर्न पेश करने की कोशिश कर रहे हैं और सेवा बस का उपयोग कर इवेंट सोर्सिंग के साथ सीक्यूआरएस पर विचार कर रहे हैं। जिन प्रौद्योगिकियों में हम वर्तमान में हमारे पीओसी विकसित कर रहे हैं वे NServiceBus, Event Store, और MSMQ हैं। हम एनएस सर्विसबस में एक अलग एंडपॉइंट करना चाहते हैं, जिसमें दो अलग-अलग ट्रांसपोर्ट, एमएसएमक्यू हमारे आदेशों और इवेंट स्टोर के लिए हमारी घटनाओं के लिए परिभाषित किया गया है। हमारे एंटरप्राइज़ की वर्तमान स्थिति हमें इवेंट स्टोर में आसानी से सबकुछ स्विच करने की अनुमति नहीं देती है क्योंकि हमारे पास एमएसएमक्यू का उपयोग करके हमारे विरासत ऐप्स में महत्वपूर्ण निवेश है, यही कारण है कि हम हाइब्रिड दृष्टिकोण पर विचार कर रहे हैं।

प्रश्न

यह एक एकल NServiceBus endpoint विभिन्न परिवहन का उपयोग करता है बनाने के लिए संभव है? यदि हां, तो कैसे? यदि नहीं, तो क्या विकल्प हैं?

उत्तर

3

हारून,

मुझे लगता है कि सबसे अच्छा विकल्प NServiceBus में एक परिवहन के रूप में MSMQ उपयोग करने के लिए किया जाएगा।

  • एक आदेश हैंडलर (री) एक समग्र जो आदेश का लक्ष्य
  • आह्वान संचालन
  • दुकान जिसके परिणामस्वरूप बनाने में MSMQ
  • के माध्यम से एक आदेश भेजने: यहाँ यह की तरह लग सकता है कि कैसे है इवेंटस्टोर में घटनाओं के संदेश आईडी के साथ idempotence सुनिश्चित करने के लिए घटनाओं। कुल अपने आप में एक अलग घटक (घटना प्रोसेसर) में आदेश इसे पहले ही संसाधित
  • जानने के लिए जिम्मेदार होगा सभी घटनाओं को हुक करने धारा EventStore लगातार सदस्यता एपीआई का उपयोग करें। इनमें से कुछ संसाधित घटनाओं को कमांड भेजने का कारण होना चाहिए। इस तरह के कमांड को इवेंट प्रोसेसर के अंदर होस्ट किए गए NServiceBus send-only endpoint के माध्यम से भेजा जा सकता है।
  • उस ईवेंट प्रोसेसर में आप NServiceBus और MSMQ के माध्यम से सभी ईवेंट को फिर से प्रकाशित भी कर सकते हैं। ऐसी घटनाओं को अन्य सेवाओं द्वारा सब्सक्राइब नहीं किया जाना चाहिए (नीचे स्वायत्तता पर नोट देखें)
  • NServiceBus Sagas (प्रक्रिया प्रबंधक) आपकी सेवा सीमा के अंदर रहना चाहिए और इन ईवेंट प्रोसेसर द्वारा भेजे गए या फिर से प्रकाशित आदेशों और/या घटनाओं पर प्रतिक्रिया देना चाहिए एमएसएमक्यू पर। * कमजोर है, जहां सेवाओं सीधे अन्य सेवा इवेंट स्ट्रीम की सदस्यता ले सकते हैं: सेवा सीमाओं के बारे में

एक टिप्पणी आप सेवा स्वायत्तता का स्तर क्या आप सूट तय करने के लिए होता है। इस डिजाइन घटनाओं में जो सेवा सीमा पार करते हैं, स्पष्ट रूप से डेटा ले जाने की अनुमति है। * मजबूत, जहां सेवाएं संचार के लिए उच्च स्तरीय घटनाओं का उपयोग करती हैं और इन घटनाओं में केवल चीजों की पहचान होती है और कोई डेटा नहीं है। यदि आप ऐसा कुछ चाहते हैं, तो आप ईएस घटनाओं से इन "उच्च स्तर" घटनाओं में मैप करने के लिए अपने ईवेंट प्रोसेसर का उपयोग कर सकते हैं।

+0

हम अपने कार्यान्वयन में NServiceBus Sagas का उपयोग करने की कोशिश कर रहे हैं। आप अपने जवाब में सागा कैसे शामिल करेंगे? –

+0

मैंने सागा को शामिल करने के लिए अपना जवाब संपादित कर लिया है। –

+0

धन्यवाद Szymon। हमारा आदर्श कार्यान्वयन NServiceBus के लिए सीक्यूआरएस पैटर्न का ज्ञान रखने के लिए होगा और कमांड (एमएसएमक्यू) और इवेंट (इवेंट स्टोर) के आधार पर ट्रांसपोर्ट को विभाजित करने में सक्षम होगा।इवेंट स्टोर से उच्च स्तर की घटनाओं में मैप करने के लिए इवेंट प्रोसेसर का उपयोग करने का आपका विचार एक संभावना है, लेकिन ऐसा लगता है कि यह हमारे आदर्श परिदृश्य को बहुत अच्छी तरह फिट नहीं करता है। हमने एनसीक्यूआरएस को NServiceBus के संभावित विकल्प के रूप में भी माना है, लेकिन यह परियोजना अच्छी तरह से बनाए रखी नहीं है। हम अपना खुद का कार्यान्वयन समाप्त कर सकते हैं। =) –

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