2011-10-27 19 views
7

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

संदेशों में किसी भी प्रकार का अनुक्रम संख्या नहीं है (क्योंकि यह अप्रासंगिक है) और हम नहीं जानते कि समूह में पहला या आखिरी संदेश क्या है (वहां समूह में सैद्धांतिक रूप से "कभी भी अंतिम संदेश नहीं हो सकता है) । हम चाहते हैं कि उपभोक्ता उन्हें प्राप्त करने में सक्षम होने के तुरंत बाद उन्हें वितरित किया जाए।

ActiveMQ बस JMSXGroupID सेट करके इस सटीक सुविधा (http://activemq.apache.org/message-groups.html) प्रदान करता है। हालांकि, हम वेबस्पेयर एमक्यू के लिए बाध्य हैं। मुझे अब तक पता चला है कि कतार में एक ही समूह के संदेश एकत्र करना और http://www.ibm.com/developerworks/websphere/library/techarticles/0602_currie/0602_currie.html में वर्णित संदेश "समूह में अंतिम संदेश" प्राप्त करने के लिए संदेश चयनकर्ता का उपयोग करना संभव है। हालांकि हम एक क्लीनर तरीका पसंद करेंगे (जैसे ActiveMQ में)। क्या किसी को पता है कि वेबस्पेयर में उस व्यवहार को कैसे प्राप्त किया जाए?

धन्यवाद!

उत्तर

2

आम तौर पर आप जेएमएस के आईबीएम उत्पाद कार्यान्वयन (दोनों वेबस्पेयर एमक्यू और एसआईबीस कार्यान्वयन) में संदेश चयनकर्ताओं का उपयोग करते हैं। ये एक फ़िल्टर के बराबर हैं जो वेब-आधारित प्रोटोकॉल के लिए HTTP या SOAP संदेश के शीर्षलेख को स्कैन करेगा।

हालांकि यह वही नहीं हो सकता है जो आप चाहते हैं, यह वास्तव में डिजाइन के माध्यम से एक साफ और अच्छी तरह से सोचा जाता है।

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

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

//assume we have created a JMS Connection and Session object already. 
//and looked up the Queue we want already. 
MessageConsumer consumerWithSelector = session.createConsumer(queue, groupId); 

यह सभी शुद्ध जेएमएस एपीआई आपको देता है। और कुछ विशुद्ध रूप से संदेश-सेवा तकनीकी है, जो तब उनके क्रियान्वयन और नहीं पोर्टेबल कोड के स्वामित्व की है के implementer पर निर्भर है।

+0

धन्यवाद, यही मेरी अपेक्षा है। – ftr