2013-02-07 31 views
19

मैं बैकएंड को एक नए जावा वेब ऐप के लिए डिज़ाइन कर रहा हूं और यह तय करने का प्रयास कर रहा हूं कि इवेंट बस का उपयोग करना है या नहीं; विशेष रूप से Guava EventBusइवेंट बस का उपयोग कब करें?

अधिकांश सर्वर-साइड अनुरोध तुल्यकालिक होंगे: यानी, उपयोगकर्ता डेटा का अनुरोध कर रहा है और कुछ सेकंड के भीतर प्रतिक्रिया की आवश्यकता है। हालांकि, वहां कुछ अनुरोध हैं जो असीमित हो सकते हैं और क्लाइंट-साइड पर "आग और भूल" हैं। जब तक वे अंततः संसाधित होते हैं, तो क्लाइंट प्रक्रिया में 2 सेकंड या 2 घंटे लगने पर कम ख्याल रख सकता है।

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

मैं यह कहना चाहूंगा कि मैंने अपाचे कैमल का उपयोग करके पहले ही खोज की है, और मुझे विश्वास है कि यहां काम के लिए कैमल का सही टूल है। अफसोस की बात है, इस प्रश्न के दायरे से बाहर के कारणों के लिए, मैं इसका उपयोग नहीं कर रहा हूं। इसलिए मैंने ऊंट की तरह समाधानों को अपनाना शुरू कर दिया, इस तरह मैं गुवा के EventBus पर पहुंचा। लेकिन यह शायद एक उपयुक्त प्रतिस्थापन नहीं हो सकता है।

मुझे लगता है कि मैं समस्या वर्गीकरण की तलाश कर रहा हूं कि Event Bus पैटर्न हल हो जाता है, और फिर मुझे यह निर्धारित करने की आवश्यकता है कि यह मेरे उपयोग के मामले से मेल खाता है या नहीं।

उत्तर

35

यहाँ समस्या बयान है कि EventBus संक्षेप में हल करती है:

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

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

+1

धन्यवाद @ कॉलिनडी (+1) - हाँ मुझे लगता है कि मैं सोच रहा था कि प्रत्येक ग्राहक/प्रोसेसर एक पिनबॉल मशीन के अंदर पिनबॉल की तरह ईवेंट बस के आसपास एक घटना को उछाल सकता है। प्रत्येक ग्राहक पर, कार्यक्रम को संशोधित किया जाएगा, जिस तरह से 'संदेश'/'एक्सचेंज' कैमल प्रोसेसर के अंदर संशोधित हो जाता है। मैं अभी भी इसका उपयोग कर रहा हूं या मैन्युअल रूप से मैन्युअल वायरिंग प्रोसेसर के बीच फाड़ा हूं। यह डिकूप्लिंग है जिसमें मुझे रूचि है, लेकिन 'EventBus' अभी भी सर्वश्रेष्ठ (गैर-ऊंट) समाधान की तरह महसूस नहीं करता है। मैं आपको हरा चेक दे रहा हूं और अपने निर्णय और परिणामों के साथ वापस रिपोर्ट करूंगा। एक बार फिर धन्यवाद! – IAmYourFaja

+0

यह मध्यस्थ का प्रकार है। – zgulser