2013-08-29 10 views
6

रहने के लिए मैं कुछ मॉड्यूल से युक्त एक आवेदन पर काम कर रहा हूं। उन मॉड्यूल में से किसी एक ने एक विषय निर्माता बनाया जो किसी विषय पर संदेश प्रकाशित करता है, लेकिन इस मॉड्यूल में संदेश को अस्वीकार करने के लिए कोई विषय उपभोक्ता नहीं है। विषय निर्माता setTimeToLive() का उपयोग कर 300000 मिलीसेकंड तक समय-समय पर लाइव संपत्ति सेट करता है।जीएमएस विषय समय

मुझे उम्मीद है कि यदि कोई उपभोक्ता नहीं है, तो संदेश 300000 मिलीसेकंड के भीतर समाप्त हो जाते हैं और उन्हें हटा दिया जाता है।

एप्लिकेशन टॉमकैट 6.0.36 पर तैनात किया गया है और यह कतारों और विषयों को संभालने के लिए बाहरी ActiveMQ सर्वर का उपयोग करता है।

विषय सेटिंग्स के तहत एमबीन टैब में जावा विजुअलVM के साथ सक्रिय ActiveQQ मैं देखता हूं कि चर "एनक्यू गणना" बढ़ता है, लेकिन मुझे समझ में नहीं आता कि समय-समय पर लाइव सेटिंग्स इन संदेशों पर प्रभाव डालती हैं या नहीं। मुझे बढ़ने के लिए काउंटर "एक्सपर्डकाउंट" काउंटर देखने की उम्मीद है, लेकिन यह अभी भी 0

क्या यह समझने का कोई तरीका है कि क्या वे संदेश अभी भी स्मृति में रहते हैं या यदि उन्हें हटा दिया जाता है?

बहुत बहुत धन्यवाद!

संपादित करें:

मैं कुछ NetBeans 7.3 आंतरिक glassfish 3.1 सर्वर के रूप में उपयोग करते हुए, jvisualvm के साथ निगरानी पर J2EE ट्यूटोरियल उदाहरण का उपयोग करते हुए परीक्षण और सभी कार्यों एपीआई का कहना था कि के रूप में:

JMS एपीआई किसी विषय को ब्राउज़ करने के लिए कोई तंत्र प्रदान नहीं करता है। संदेशों को आमतौर पर विषय से गायब होने पर गायब हो जाता है: यदि उपभोक्ताओं को उपभोग करने के लिए कोई संदेश नहीं है, तो JMS प्रदाता उन्हें हटा देता है। हालांकि टिकाऊ सदस्यता संदेश को किसी विषय पर रहने की अनुमति देती है> जबकि संदेश उपभोक्ता सक्रिय नहीं है, उनकी जांच के लिए कोई सुविधा मौजूद नहीं है।

मैंने पढ़ा कि ग्लासफ़िश सक्रिय एमक्यू के अंदर उपयोग करता है, इसलिए मुझे उम्मीद है कि यह एक स्टैंडअलोन ActiveMQ सर्वर के लिए भी मान्य है।

अंत संपादित करें।

+0

विषय टिकाऊ है? – Beryllium

+0

मैं इस सेटिंग को कहां/कैसे देख सकता हूं? –

+0

क्या आप 'topicSession.createSubscriber (...)' या 'topicSession.createDurableSubscriber (...)' का उपयोग कर रहे हैं? – Beryllium

उत्तर

4

Creating Robust JMS Applications से एक उद्धरण:

5.1.4 अनुमति दे संदेश समाप्त करने के लिए
[...]
जब संदेश , निर्दिष्ट timeToLive प्रकाशित है वर्तमान में जोड़ा जाता है समाप्ति समय देने का समय। निर्दिष्ट समाप्ति समय से पहले वितरित कोई भी संदेश नष्ट नहीं होता है।

javax.jms.Message#getJMSExpiration() के स्रोत से एक और बोली:

जब कोई संदेश की समाप्ति समय तक पहुँच जाता है, एक प्रदाता इसे त्यागने चाहिए। [...]
ग्राहक को समाप्त होने वाले संदेशों को प्राप्त नहीं करना चाहिए; हालांकि, जेएमएस एपीआई की गारंटी नहीं देता है कि ऐसा नहीं होगा।

तो गैर टिकाऊ ग्राहकों के मामले में:

  1. सर्वर प्रत्येक जुड़े ग्राहक को संदेश भेजता है। संदेश में समाप्ति मान "वर्तमान समय + टीटीएल" पर सेट है। डिस्कनेक्ट किए गए ग्राहकों को कुछ भी प्राप्त नहीं होगा।
  2. एक कनेक्टेड क्लाइंट सामान्य रूप से संदेश प्राप्त करता है, अगर यह अभी तक समाप्त नहीं हुआ है।
  3. यदि कोई कनेक्टेड क्लाइंट संदेश प्राप्त करने से पहले बहुत लंबा समय लेता है (संदेश समाप्त हो गया है), तो इसे सर्वर द्वारा छोड़ा जा सकता है (संभवतः यदि सर्वर ने इसे अभी तक क्लाइंट के बफर में धक्का नहीं दिया है) या इसे प्राप्त किया जा सकता है (संभावित रूप से संदेश पहले से ही ग्राहक के बफर में है)।

तो आपके मामले में, यदि कोई उपभोक्ता नहीं है, तो संदेश शायद बिल्कुल संग्रहीत नहीं होता है। एनक्यू गिनती बढ़ी है, और की समय सीमा पर बनी हुई है केवल कनेक्ट किए गए (लेकिन निष्क्रिय) ग्राहक के मामले में बढ़ाना चाहिए।

How do I find the Size of a Queue से एक उद्धरण

को कतारबद्ध गणना - पिछले पुनः आरंभ
समय सीमा समाप्त गणना के बाद से कतार भेजे गए संदेशों की कुल संख्या - संदेशों की संख्या वितरित नहीं किया गया क्योंकि वे समय सीमा समाप्त हो गया

नोट: जेबॉस 7 का उपयोग करके एक परीक्षण से पता चलता है कि इस मामले में संदेश क्लाइंट में नहीं बदलता है।

+0

क्या आपको पता है कि वास्तव में संदेश संग्रहीत नहीं किया गया है, तो मैं एक तरीका जान सकता हूं? –

+1

आप एक परीक्षण प्रोग्राम स्थापित कर सकते हैं जो किसी विषय पर किसी भी संदेश (बिना किसी उपभोक्ता के) भेजता रहता है। काउंटर, और ढेर आकार को देखो। यह अभी भी "सही" नहीं है; अन्यथा आपको कोड में देखना होगा। – Beryllium

+0

मुझे समाप्त होने वाले संदेश मिल रहे हैं। क्या कोई शरीर मदद कर सकता है? – anon

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