2012-05-27 13 views
5

ऐपहार्बर पर एमवीसी 4 पर चलने वाला एक वेब ऐप बनाने में लग रहा है। प्रतिक्रिया और प्रदर्शन के हित में, थोड़ा अधिक चलने वाले कार्यों (आमतौर पर, ईमेल उत्पन्न करना/भेजना, छवियों का आकार बदलना, भुगतान लेनदेन प्रसंस्करण इत्यादि) को संदेश कतार पर एक संदेश डालकर संभाला जाएगा।एएसपी.नेट एमवीसी और वर्कर एप्स से खरगोश एमक्यू का उपयोग करने के लिए एक अच्छा इंटरफ़ेस डिज़ाइन करना

वहां एक या अधिक श्रमिक भी होंगे, कहीं बाहर, संदेशों को हटाने और परिणामस्वरूप संसाधित होने की प्रक्रिया को संसाधित करने की आवश्यकता होगी। केंद्रीय क्यूइंग तंत्र RabbitMQ होगा, विशेष रूप से होस्टेड क्लाउडएएमपीपी सेवा AppHarbor के माध्यम से उपलब्ध है। सिद्धांत रूप में, यह वास्तुकला अधिक श्रमिकों को जोड़कर "अनंत" स्केलेबिलिटी की अनुमति देगा।

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

  • जब तक मुझे कोई भुगतान करने वाला उपयोगकर्ता नहीं मिलता है, मैं मुफ्त क्लाउडएएमपीपी पेशकश तक ही सीमित हूं। इसका मतलब है कि अधिकतम तीन एक साथ कनेक्शन।
  • पिछली बाधा को देखते हुए, मैं प्रति आवेदन एक कनेक्शन में खुद को सीमित करने की कोशिश करना चाहता हूं। एमवीसी ऐप के लिए एक, प्रति कार्यकर्ता एक। बस।
  • खरगोश एमक्यू में कनेक्शन लंबे समय तक रहने के लिए डिज़ाइन किए गए हैं। फिर भी, कई उदाहरण कोड दिखाते हैं जो स्पष्ट रूप से एक कनेक्शन (फिर एक चैनल) खोलता है, एक संदेश भेजता है, फिर इसे बंद कर देता है।
  • मल्टीथ्रेडिंग के लिए, कोई एक ही कनेक्शन का उपयोग कर सकता है, लेकिन एक ही चैनल नहीं। जहां तक ​​मैं समझता हूं, मल्टीथ्रेड किए गए ऐप में कनेक्शन साझा करना ठीक है, फिर कई चैनल खोलें, उदाहरण के लिए प्रति थ्रेड।
  • मेरा एमवीसी ऐप आमतौर पर केवल प्रकाशक होगा। कार्यकर्ता ऐप एक उपभोक्ता और प्रकाशक दोनों होगा - उदाहरण के लिए, कार्यकर्ता को भुगतान संसाधित करने के लिए एक संदेश प्राप्त हो सकता है, जिसके परिणामस्वरूप यह सफलता या विफलता को इंगित करने वाले उपयोगकर्ता को ईमेल संदेश का आह्वान करने के लिए एक संदेश प्रकाशित करेगा।
  • एमवीसी ऐप के लिए, आमतौर पर कनेक्शन को क्विक करने के लिए कनेक्शन बहुत ही कम समय के लिए उपयोग किया जाएगा।
  • श्रमिकों के लिए, मैं लंबे समय से चलने वाले कनेक्शन सोच रहा हूं, कार्यकर्ता के जीवनकाल के लिए कम से कम स्थायी रूप से खुला रहता हूं।

ठीक है, तो यह बहुत सारी चीज़ें है। इस परियोजना से पहले RabbitMQ के साथ कोई अनुभव नहीं है, मैं कुछ अतिरिक्त बुलेट बिंदुओं से प्रेतवाधित हूं।

  • इंटरफेस पृथक्करण सिद्धांत। क्या मुझे इसे दो अलग-अलग इंटरफेस में विभाजित करना चाहिए - जैसे IQueueServiceConsumer और IQueueServiceProducer - या क्या चीजें बहुत दूर ले रही हैं? मुझे लगता है कि मैं हमेशा अधिक परमाणु इकाइयों में चीजों को विभाजित करने के लिए एसआरपी इत्यादि का उपयोग कर सकता हूं, और मैं नहीं चाहता कि चाचा बॉब मुझे शिकार कर रहा है (इंटरफ़ेस नामों में से अधिक के लिए), लेकिन मुझे आश्चर्य है कि मुझे कितना दूर करना है इसे लो।
  • यह देखते हुए कि मेरे पास केवल एक ही वेबसर्वर होगा, कम से कम पहले, क्या यह वास्तव में वेब ऐप में कतार में लंबे समय से रहने वाला कनेक्शन होना चाहिए? उन्हें खोलना और बंद करना एक बार में कई घटित होने का सैद्धांतिक मौका देता है, जिसका अर्थ है संघर्ष और संभावित संदेश खो गए हैं। खो गए संदेश स्वीकार्य नहीं हैं।
  • मैं इस मामले में कनेक्शन के जीवनकाल को कैसे संभालेगा? इसे मेरे निनजेक्ट मॉड्यूल के अंदर खोलें (जहां मेरा इंटरफ़ेस वास्तव में खरगोश एमक्यू-विशिष्ट कार्यान्वयन से जुड़ा हुआ है), और एप्लिकेशन को किसी भी तरह से डिस्कनेक्ट करें ... पुनर्नवीनीकरण? मैं ऐसा कुछ कैसे कर सकता था?
  • श्रमिकों के लिए, जीवन आसान लगता है।कनेक्शन खोलने के लिए इंटरफ़ेस पर एक विधि डालें, फिर संदेश प्राप्त करने के लिए थ्रेड को चैनलों की सेवा करें। सुनिश्चित करें कि क्लोजकनेक्शन को उचित रूप से कॉल करके एप्लिकेशन अच्छा खेलता है। या IDISposable लागू करें।
  • हालांकि एक मौका है - हालांकि छोटे - कि खरगोश एमक्यू को भविष्य में किसी और चीज से बदला जा सकता है, इस प्रकार मैं नहीं चाहता कि मेरे इंटरफेस उस विशेष सेवा बस के लिए बहुत विशिष्ट हों (इस अर्थ में कि मैं कैसे हूं इसका उपयोग) कार्यान्वयन।

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

यदि यह महत्वपूर्ण है, तो मेरी वर्तमान संदेश आवश्यकताओं को एक तरफा संदेश से ढंक दिया जाता है, किसी भी प्रक्रिया को पूरा करने के बाद प्राप्त संदेशों को स्वीकार करने के अलावा किसी भी प्रतिक्रिया की आवश्यकता नहीं होती है।

किसी भी अंतर्दृष्टि के लिए धन्यवाद!

उत्तर

1

Masstransit यह सब आपके लिए करेगा। या तो एमटी का उपयोग करें या देखें कि उनके पास done

+0

दिलचस्प, इस पर एक नज़र डालेंगे, धन्यवाद! –

1

आप NServiceBus का भी उपयोग कर सकते हैं लेकिन खरगोशएमक परिवहन में हुक करने की आवश्यकता है। transport वर्तमान में एनएसबी 3.2 में अपडेट नहीं किया गया है, लेकिन यह आपके पक्ष से एक अच्छा अभ्यास और सामुदायिक समर्थन भी होगा।