2012-07-18 22 views
10

हम AMQपूलिंग के साथ ActiveMQ को कॉन्फ़िगर करने के लिए ठीक से कैसे करें?

<bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> 
    <property name="brokerURL" value="${brokerURL1}"/> 
</bean> 
<bean id="pooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory"> 
    <property name="maxConnections" value="10"/> 
    <property name="maximumActive" value="100"/> 
    <property name="connectionFactory" ref="jmsConnectionFactory"/> 
</bean> 
<bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration"> 
    <property name="connectionFactory" ref="pooledConnectionFactory"/> 
    <property name="transacted" value="false"/> 
    <property name="concurrentConsumers" value="5"/> 
    <property name="maxConcurrentConsumers" value="10"/> 
</bean> 

<bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent"> 
    <property name="configuration" ref="jmsConfig"/> 
</bean> 

के लिए निम्नलिखित विन्यास का उपयोग समय-समय पर मैं अजीब मुद्दा है - ढीला संदेश। असल में AMQ सब कुछ ठीक कहते हैं और संदेश dequeued है, लेकिन एप्लिकेशन पर कोई संदेश ...

मैं इसे कैशिंग उपभोक्ताओं के साथ मुद्दा हो सकता है पढ़ा है और इसके बजाय JmsConfiguration config

<bean id="jmsConfig" class="org.apache.activemq.camel.component.ActiveMQConfiguration"> 
    <property name="connectionFactory" ref="pooledConnectionFactory"/> 
    <property name="transacted" value="false"/> 
    <property name="concurrentConsumers" value="5"/> 
    <property name="maxConcurrentConsumers" value="10"/> 
    <property name="cacheLevelName" value="CACHE_CONSUMER"/> 
</bean> 

करता है निम्नलिखित इस्तेमाल किया जाना चाहिए है कोई भी Activemq को कॉन्फ़िगर करने के लिए ठीक से कैसे पता है? कौन सा मान सर्वोत्तम प्रदर्शन और अच्छी विश्वसनीयता के लिए सेट किया जाना चाहिए?

<property name="maxConnections" value="?"/> 
<property name="maximumActive" value="?"/> 
<property name="concurrentConsumers" value="?"/> 
<property name="maxConcurrentConsumers" value="?"/> 

मैं org.apache.activemq.pool.PooledConnectionFactory का उपयोग करना चाहिए या वहाँ बेहतर तरीका है?

उत्तर

5

ऐसा लगता है कि आप Apache Camel को ActiveMQ का उपयोग करने के तरीके को कॉन्फ़िगर करने के तरीके से अधिक पूछ रहे हैं।

पूलिंग को कॉन्फ़िगर करने के कई तरीके हैं। आप अपने सेटअप में कौन से उपयोग/लोड पैटर्न देखते हैं और आपकी आवश्यकताओं क्या हैं। उन सेटिंग्स जिन्हें आप maxConcurrentConsumers इत्यादि में रेफर कर रहे हैं, आपके कैमल मार्गों पर निर्भर होंगे और उदाहरण के लिए आप कितने उपभोक्ता सेट अप करेंगे।

बस, अनुकूलित करने के लिए दो परिदृश्य हैं: संदेश भेजना और प्राप्त करना (अनुरोध/उत्तर भी दिमाग में आता है, लेकिन यह एक अलग कहानी है)।

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

जब आप संदेश भेजते हैं, तो आप सक्रिय एमक्यू के कैमेल suggests the PooledConnectionFactory कहते हैं। आपके द्वारा पूछे जा रहे सेटिंग्स के लिए कुछ डिफ़ॉल्ट मान भी लिंक किए गए दस्तावेज़ों से संबंधित दस्तावेज भी सुझाते हैं।

<property name="maxConnections" value="8" /> 
    <property name="maximumActive" value="500" /> 
    <property name="transacted" value="false"/> 

अधिकतम विश्वसनीयता के लिए, आप लेन-देन सत्र का उपयोग करें और प्राप्त संदेश के लिए प्रतिबद्ध एक बार आप इसे सुरक्षित रूप से कार्रवाई की जानी चाहिए थी।

अजीब बात है कि आप कहते हैं कि आप संदेश खो देते हैं, आपकी सेटिंग्स में कुछ भी विशिष्ट नहीं है जो आपको संदेश खो देता है। आपको इसे थोड़ा सा ट्रैक करने या ऐप कार्यान्वयन पर कुछ जानकारी देने की आवश्यकता है।