2011-05-06 14 views
5

के साथ Autoreconnect समस्या मुझे ActiveMQ और Spring's CachingConnectionFactory में कोई समस्या है। मैं उन्हें सेट कर रहा हूं इस तरह:ActiveMQ और CachingConnectionFactory

<!-- A connection to ActiveMQ --> 
<bean id="myConnectionFactory" 
    class="org.apache.activemq.ActiveMQConnectionFactory"> 
    <property name="brokerURL" value="${jms.url}"/> 
    <property name="userName" value="${jms.username}"/> 
    <property name="password" value="${jms.password}"/> 
</bean> 

<!-- A cached connection to wrap the ActiveMQ connection --> 
<bean id="myCachedConnectionFactory" 
    class="org.springframework.jms.connection.CachingConnectionFactory"> 
    <property name="targetConnectionFactory" ref="myConnectionFactory"/> 
    <property name="sessionCacheSize" value="10"/> 
    <property name="reconnectOnException" value="true"/> 
</bean> 

<!-- A destination in ActiveMQ --> 
<bean id="myDestination" 
    class="org.apache.activemq.command.ActiveMQQueue"> 
    <constructor-arg value="${jms.queue}" /> 
</bean> 

<!-- A JmsTemplate instance that uses the cached connection and destination --> 
<bean id="myProducerTemplate" 
    class="org.springframework.jms.core.JmsTemplate"> 
    <property name="connectionFactory" ref="myCachedConnectionFactory"/> 
    <property name="defaultDestination" ref="myDestination"/> 
</bean> 

jms.url विफलता परिवहन का उपयोग कर रहा है:

failover:(tcp://firstbox:6166,tcp://secondbox:6166)?timeout=3000 

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

मेरे समझ के साथ कि ActiveMQConnectionFactory ही ठीक करना चाहिए (एक नया बॉक्स से पुन: कनेक्ट), और JmsTemplate एक नया कनेक्शन हर बार का अनुरोध किया जाना चाहिए, ताकि ठीक होना चाहिए। मुझे आश्चर्य है कि CachingConnectionFactory कुछ खराब कर रहा है (एक निर्माता को कैश करना जो पुराने सर्वर से बात करता है?)।

क्या मुझे कुछ याद आ रहा है जो मुझे यहां करने की ज़रूरत है? मेरा सेटअप काफी सामान्य लगता है, लेकिन मुझे इस समस्या से कोई और नहीं मिल रहा है।

उत्तर

5

मेरी समस्या यह थी कि सक्रिय एमक्यू CachingConnectionFactory को फिर से कनेक्ट होने पर नहीं बता रहा था, इसलिए कैश किए गए कनेक्शन का अभी भी उपयोग किया जा रहा था। मैंने इसे ActiveMQ के PooledConnectionFactory के साथ बदल दिया और समस्या दूर हो गई।

3

FYI करें, मैं सिर्फ दो स्थानीय AMQ दलालों और विफलता के बीच इस परिदृश्य (दोनों निर्माता/उपभोक्ता कनेक्शन के लिए CachingConnectionFactory का प्रयोग करके) का परीक्षण किया ठीक काम किया ...

कहा जा रहा है कि ... मैं अन्य उपभोक्ता दिखाई दे रही है एक मतदान उपभोक्ता पैटर्न का उपयोग करते समय कनेक्शन समस्याएं ... कनेक्शन या कुछ मैन्युअल रूप से बंद करने की आवश्यकता होनी चाहिए।

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