2014-04-10 10 views
5

मैं वर्तमान में ActiveMQ 5.7.0 और KahaDB का उपयोग कर रहा हूं लेकिन यदि आवश्यक हो तो अपग्रेड करने के लिए खुला हूं। मैं एक एम्बेडेड ब्रोकर का उपयोग करता हूं और प्लगइन बनाने और प्रोग्रामर के ब्रोकर कॉन्फ़िगरेशन को नियंत्रित करने में अनुभवी हूं।ActiveMQ में क्या खुले उपभोक्ता लेनदेन के लिए आवश्यक स्मृति को सीमित करना संभव है?

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

मेरे वर्तमान एल्गोरिथ्म है:

  • संदेश प्राप्त होता है
  • संदेश का अनुवाद और उपभोक्ता साइड स्थान बचाने के लिए शरीर को साफ (msg.clearBody())
  • भेजने संदेश सेवा के लिए
  • समय-समय पर कतार मेमोरी उपयोग की जाँच
  • यदि ब्रोकर मेमोरी महत्वपूर्ण है,

मैं ऐसा करने में सक्षम होना चाहते हैं क्या है:

  • संदेश प्राप्त होता है
  • संदेश का अनुवाद करने और शरीर को साफ उपभोक्ता साइड स्थान बचाने के लिए (msg.clearBody())
  • भेजने की सेवा के लिए
  • संदेश समय-समय पर कतार डिस्क उपयोग
  • अगर दलाल डिस्क उपयोग महत्वपूर्ण है, के लिए प्रतिबद्ध

मैंने File based cursor पर देखा है और ऐसा लगता है कि यह मेरी ज़रूरत के अनुसार कर सकता है, लेकिन जब मैंने इसका उपयोग करने की कोशिश की, तो ऐसा वांछित प्रभाव प्रतीत नहीं हुआ। एक similar question को अतीत में ActiveMQ उपयोगकर्ता के चर्चा समूह पर भी पूछा गया है।

अद्यतन
एक स्पष्टीकरण। हमारा मुद्दा खुले लेनदेन में संदेशों की संख्या के साथ नहीं बल्कि संदेशों के आकार के साथ है। हमारे आवेदन को अक्सर बड़े संदेशों (> 50 एमबी) से निपटना पड़ता है। इस मुद्दे के अलावा, ActiveMQ इस आकार के संदेशों के साथ काफी अच्छी तरह से काम कर रहा है। जो हम खोज रहे हैं वह ब्रोकर पर msg.clearBody() जैसे कुछ ट्रिगर करने का एक तरीका है जब स्मृति संसाधन समाप्त हो जाते हैं। फिर यदि संदेश सामग्री की आवश्यकता होती है तो ब्रोकर उन्हें डिस्क-समर्थित स्टोर से पुनः लोड कर सकता है। हम इसे प्राप्त करने के लिए प्लगइन या एक्सटेंशन के विकास के लिए खुले हैं।

उत्तर

4

जैसा कि मैंने ActiveMQ संदेश बोर्डों पर बताया है ... http://activemq.2283324.n4.nabble.com/Transactions-and-memory-consumption-td4224862.html

लेनदेन चल रहा है, जबकि स्मृति संदेशों से स्मृति को साफ़ करने के लिए ActiveMQ में कोई रास्ता नहीं है। लेनदेन के लिए डेटा संरचना संदेश संदर्भ रखती है।

संदेश
  • संदेश की समय सीमा समाप्ति
  • एक के पूरा होने की
    • पावती:

      एक पंक्ति के लिए स्मृति में

      एक बार, संदेश ही उपलब्ध JVM जीसी करने के लिए निम्न में से एक द्वारा किया जाता है लेन-देन संदेश लेने वाली

    • प्रशासनिक कतार

    शुद्ध करने के लिए इस्तेमाल किया उपकरण मैं बहुत Curi हूँ उपयोग के मामले के बारे में ous ब्रोकर मेमोरी में बहुत अधिक संदेश रख सकता है, एक अच्छा आकार JVM ढेर आकार दिया गया है। संख्याओं को बढ़ाकर किस प्रकार की प्रदर्शन संख्या देखी जाती है और कितनी सुधार की उम्मीद है? गैर-लेनदेन वाली कतार खपत का उपयोग करके, समय-समय पर जोड़े गए Session.commit() कॉल के साथ परीक्षण करके, या एक्सए-लेनदेन के लिए परीक्षण करके समग्र सुधार को गेज करना संभव होना चाहिए।

    अगर वहाँ नीचे की ओर है, शायद एक समानांतर प्रसंस्करण का उपयोग कर काम कर सकते हैं प्रवाह क्षमता में सुधार करने के रणनीति करने पर एक लंबे समय से देरी है:

    • एक सौदे भरें
    • प्रारंभ प्रतिबद्ध
    • इसी समय, उपभोक्ता के लिए जारी अगले लेनदेन में आने वाले संदेश
    • दूसरा लेनदेन भरें
    • को पूरा करने के लिए पहले लेनदेन प्रतिबद्धता की प्रतीक्षा करें
    • पहले लेनदेन में विफल होते हैं तो पहले लेनदेन सफल रहा, दूसरा
    • रोल बैक, दूसरे के लिए प्रतिबद्ध है और एक ही

    बेशक की अगले चरण आरंभ किया है, लंबे समय में, यदि नीचे की ओर प्रणाली नहीं रख सकते हैं आने वाले संदेशों की दर के साथ, ब्रोकर को ओवरलोड करने से धीमी खपत की समस्याओं को रोकना असंभव होगा।

  • +0

    आपके लिंक को इस प्रश्न के साथ कुछ भी नहीं लगता है। –

    +0

    अच्छी पकड़ - धन्यवाद। मैंने यूआरएल को सही किया। – ash

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