2011-11-29 19 views
5

मैं संदेश स्टोर के रूप में KahaDB के साथ ActiveMQ 5.4 का उपयोग कर रहा हूं। प्रकाशन संदेश (दृढ़ता से सत्य) के साथ एक विषय पर, जिसमें टिकाऊ ग्राहक है, दृढ़ता स्टोर बढ़ रहा है संदेश भी सब्स्क्राइबर को भेजे जाते हैं। तो यह एक मुद्दा पैदा कर रहा है क्योंकि संदेश स्टोर भर रहा है और किसी और संदेश को स्वीकार नहीं कर रहा है।ActiveMQ KahaDB पर्सिस्टेंस स्टोर पूर्ण

तो मेरा सवाल यह है कि दृढ़ता स्टोर काहाडीबी में संदेशों को नहीं हटा रहा है, यहां तक ​​कि संदेश प्रेषित किए जा रहे हैं?

सादर,

श्रीनिवास

उत्तर

8

क्या आप देख रहे हैं ActiveMQ message store व्यवहार और कहा कि durable subscriptions on topics के लिए के बीच एक बातचीत है।

जब आपके पास टिकाऊ सदस्यता होती है, तो प्रत्येक विषय के ग्राहक के लिए एक विषय कतार की तरह माना जाता है (Connection पर सेट करें)। तर्क यह है कि क्लाइंट डिस्कनेक्ट होने पर किसी भी संदेश को याद नहीं करना चाहता है। इसलिए यदि वे डिस्कनेक्ट करते हैं, तो टिकाऊ सदस्यता आसपास लटकती है और संदेशों को जिंदा रखती है।

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

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

एक सामान्य नियम के रूप में, जब भी आपको लगता है कि आप एक टिकाऊ सदस्यता का उपयोग करना चाहते हैं, तो इसके बजाय virtual topics का उपयोग करें - वे संतुलन के बारे में तर्क, निरीक्षण और लोड करने के लिए बहुत आसान हैं। दूसरी तरफ यदि आप पिछले कुछ संदेशों को प्राप्त करना चाहते हैं, तो जब आप किसी भी संदेश ग्राहक को याद करते हैं, तो आप किसी संदेश ग्राहक को दोबारा जोड़ना चाहते हैं, तो retroactive consumers का उपयोग करें।

इस संदेश को हल करने का एक आसान तरीका हमेशा use a time to live होता है जब आप एक संदेश भेजते हैं - बहुत से उपयोग के मामले में एक समय सीमा होती है जब किसी संदेश को किसी भी तरह से खपत किया जाना चाहिए। ActiveMQ इस बिंदु से परे संदेशों की अवधि समाप्त कर देगा, और हटाए जाने के लिए डेटा फ़ाइलों में संदेशों को मुक्त कर देगा।

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