क्या आप देख रहे हैं ActiveMQ message store व्यवहार और कहा कि durable subscriptions on topics के लिए के बीच एक बातचीत है।
जब आपके पास टिकाऊ सदस्यता होती है, तो प्रत्येक विषय के ग्राहक के लिए एक विषय कतार की तरह माना जाता है (Connection
पर सेट करें)। तर्क यह है कि क्लाइंट डिस्कनेक्ट होने पर किसी भी संदेश को याद नहीं करना चाहता है। इसलिए यदि वे डिस्कनेक्ट करते हैं, तो टिकाऊ सदस्यता आसपास लटकती है और संदेशों को जिंदा रखती है।
एएमक्यू संदेश स्टोर इसके संदेश पत्रिका के लिए डेटा लॉग का उपयोग करता है। ये अनुक्रमिक रूप से लिखे गए हैं, और वास्तव में कभी नहीं हटाए गए (जिसके लिए यादृच्छिक पहुंच की आवश्यकता होगी)। एक दूसरी फाइल है जो ट्रैक रखती है कि कौन से संदेश खपत किए गए हैं। एक बार डेटा फ़ाइल में सभी संदेशों का उपभोग हो जाने के बाद, वह फ़ाइल हटा दी जाती है।
तो आप जो देख रहे हैं वह यह है कि डेटा टिकाऊ सब्सक्रिप्शन द्वारा डेटा फ़ाइल में से कुछ संदेशों का उपभोग नहीं किया जा रहा है और बस चारों ओर लटका है। टिकाऊ ग्राहकों के लिए क्लाइंट आईडी लगातार इस्तेमाल नहीं किए जा रहे हैं इस मुद्दे का कारण बनेंगे। यह संभावना है कि सुविधा का उपयोग करने के तरीके में कुछ गड़बड़ है, यदि आप ब्रोकर पर सब्सक्रिप्शन का निरीक्षण करने के लिए जेएमएक्स का उपयोग करते हैं जो आपको रूट कारण को ट्रैक करने में मदद कर सकता है।
एक सामान्य नियम के रूप में, जब भी आपको लगता है कि आप एक टिकाऊ सदस्यता का उपयोग करना चाहते हैं, तो इसके बजाय virtual topics का उपयोग करें - वे संतुलन के बारे में तर्क, निरीक्षण और लोड करने के लिए बहुत आसान हैं। दूसरी तरफ यदि आप पिछले कुछ संदेशों को प्राप्त करना चाहते हैं, तो जब आप किसी भी संदेश ग्राहक को याद करते हैं, तो आप किसी संदेश ग्राहक को दोबारा जोड़ना चाहते हैं, तो retroactive consumers का उपयोग करें।
इस संदेश को हल करने का एक आसान तरीका हमेशा use a time to live होता है जब आप एक संदेश भेजते हैं - बहुत से उपयोग के मामले में एक समय सीमा होती है जब किसी संदेश को किसी भी तरह से खपत किया जाना चाहिए। ActiveMQ इस बिंदु से परे संदेशों की अवधि समाप्त कर देगा, और हटाए जाने के लिए डेटा फ़ाइलों में संदेशों को मुक्त कर देगा।
स्रोत
2011-12-02 10:43:21