2011-09-15 13 views
14

मैं एंटरप्राइज़ जावा विकास के लिए नया हूं, हालांकि मुझे यकीन है कि यह प्रश्न किसी भी भाषा या प्लेटफ़ॉर्म पर समान रूप से लागू होता है, जैसे .NET।कब, कहां और कैसे कतारों का उपयोग किया जाना चाहिए?

पहली बार अब मैं संदेश कतार के साथ काम कर रहा हूँ, और मैं बहुत उनके द्वारा intrigued रहा हूँ। (विशेष रूप से, हम ActiveMQ का उपयोग कर रहे हैं)। मेरा तकनीकी नेतृत्व चाहता है कि ActiveMQ कतार हमारे सभी डेटाबेस और आंतरिक वेब सेवाओं के लिए अग्रणी धावक हों; इस प्रकार क्लाइंट से डेटाबेस डेटाबेस को निकाल दिया जा रहा है और सीधे डेटाबेस पर जा रहा है, यह पहले कतारबद्ध हो जाता है।

मेरा प्रश्न यह है: प्रत्येक प्रमुख प्रसंस्करण घटक के साथ जाने का तरीका कतार है? क्या सर्वोत्तम प्रथाओं को उन सिस्टम घटकों के सामने रखने का निर्देश दिया जाता है जो आमतौर पर बड़ी मात्रा में अनुरोधों के साथ हिट हो जाते हैं? क्या ऐसी परिस्थितियां हैं जहां कतारों का उपयोग नहीं किया जाना चाहिए?

यहां किसी भी जानकारी के लिए धन्यवाद! समस्याओं की उन तरह हल करने के लिए जंगल में वहाँ

http://code.google.com/p/disruptor/

केवल नहीं कतारों हैं:

उत्तर

8

यहाँ कुछ उदाहरण हैं, जहां एक संदेश कतार उपयोगी हो सकता है कर रहे हैं।

लिमिटेड संसाधनों
चलें कहते हैं कि तुम एक सेवा का अनुरोध करने की उपयोगकर्ताओं की एक बड़ी संख्या है। यदि सेवा केवल एक साथ छोटी संख्या में अनुरोधों को संभाल सकती है तो आप एक कतार का उपयोग बफर के रूप में कर सकते हैं।

सेवा decoupling
एक प्रमुख उद्यम एकीकरण अवधारणा जैसे एक कार्यप्रवाह के लिए में प्रणालियों के decoupling है। सिस्टम को एक-दूसरे से सीधे बात करने के बजाय, वे असुरक्षित रूप से संदेशों को कतार में पोस्ट करते हैं। एकीकरण घटक तब रूट करता है और उचित प्रणाली को संदेश भेजता है।

संदेश पुनरावृत्ति
ऊपर के उदाहरण कतारों में भी अनुरोधों की विश्वसनीय वितरण और प्रसंस्करण प्रदान कर सकते हैं। यदि वर्कफ़्लो ब्रेक का एक घटक टूट जाता है, तो अन्य अप्रभावित होते हैं और अभी भी टूटे हुए घटक को संदेश संचालित और पोस्ट कर सकते हैं। जब टूटा घटक ठीक हो जाता है तो यह सभी कतारबद्ध संदेशों को संसाधित कर सकता है।

वे यहाँ मुख्य अवधारणाओं लोड थ्रॉटलिंग, ढीला संयोजन, विश्वसनीयता और async आपरेशन कर रहे हैं।

चाहे वे प्रत्येक प्रमुख घटक के लिए जाने का तरीका हैं, मैं नहीं कहूंगा, यह स्वचालित विकल्प नहीं है, आपको प्रत्येक घटक को अलग-अलग विचार करना चाहिए।

0

बाहर इस की जांच करें।

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

5

कतार वास्तव में एक बहुत शक्तिशाली और उपयोगी उपकरण हैं, लेकिन हर उपकरण आपको केवल काम यह करना है के लिए उपयोग करना चाहिए पसंद है।

IMO वे नहीं हर प्रमुख प्रसंस्करण घटक के लिए जाने के लिए दूरी पर हैं।

एक सामान्य नियम के रूप में मैं एक कतार का उपयोग करता हूं जहां अनुरोध करने वाले संसाधन को तत्काल, तुल्यकालिक प्रतिक्रिया की आवश्यकता नहीं होती है। मैं एक कतार का उपयोग नहीं करता जहां प्रसंस्करण की समयबद्धता और व्यवस्था महत्वपूर्ण है।

जहां एसिंक्रोनस प्रोसेसिंग स्वीकार्य है और आप किसी सेवा में यातायात की मात्रा को विनियमित करना चाहते हैं तो एक कतार जा सकता है।

@ क्वर्की का जवाब भी देखें, वह (या वह) कुछ अच्छे अंक बनाता है।

0

संदेश कतार मूल रूप से असीमित संचार प्रणाली हैं। इस मामले में, इसका मतलब है कि प्रेषक और रिसीवर को जोड़ने वाली कतार के अलावा, प्रेषक और रिसीवर दोनों स्वतंत्र रूप से काम करते हैं; किसी संदेश का रिसीवर प्रेषक के साथ बातचीत की आवश्यकता नहीं है (और नहीं)। इसी प्रकार, किसी संदेश के प्रेषक को रिसीवर के साथ बातचीत की आवश्यकता नहीं होती है (और नहीं)।

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

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