2013-03-08 7 views
5

तो नीचे मैं ऊंट (स्प्रिंग डीएसएल के माध्यम से) सफलतापूर्वक ActiveMQ कतारों के साथ अपने सेम को एकीकृत है:ऊंट मार्ग से ActiveMQ पर सॉकेट टाइमआउट लागू करें?

<!-- Note: this code is just a snippet; if you need to see more, please let me know! --> 
<camelContext id="my-camel-context" xmlns="http://camel.apache.org/schema/spring"> 
    <route> 
     <from uri="activemq-myinstance:queue:myqueue" /> 
     <onException> 
      <exception>java.lang.Exception</exception> 
      <redeliveryPolicy maximumRedeliveries="2" /> 
      <to uri="activemq-myinstance:queue_failures" /> 
     </onException> 
     <to uri="bean:myBean?method=doCommand" />   
    </route> 
</camelContext> 

<bean id="jmsConnectionFactory-myqueue" class="org.apache.activemq.ActiveMQConnectionFactory"> 
    <property name="brokerURL" value="${activemq.instance.url}" /> 
</bean> 

<bean id="pooledConnectionFactory-myqueue" class="org.apache.activemq.pool.PooledConnectionFactory"> 
    <property name="maxConnections" value="64" /> 
    <property name="maximumActive" value="${max.active.consumers}" /> 
    <property name="connectionFactory" ref="jmsConnectionFactory-myqueue" /> 
</bean> 

<bean id="jmsConfig-myqueue" class="org.apache.camel.component.jms.JmsConfiguration"> 
    <property name="connectionFactory" ref="pooledConnectionFactory-myqueue"/> 
    <property name="concurrentConsumers" value="${max.active.consumers}"/> 
</bean> 

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

मैं स्पष्ट रूप से एक सॉकेट टाइमआउट (Socket.read() पर) को लागू करना चाहते हैं - के बीच ऊंट और ActiveMQ - की 25 सेकंड इस प्रकार, जब कैमल ActiveMQ से/से संदेश को रूट करने का प्रयास करता है, यदि ActiveMQ को उस प्रतिक्रिया को पूरा करने के लिए 25 सेकंड से अधिक समय लगता है, तो मैं थ्रेड को शानदार तरीके से बाहर निकलना चाहता हूं। जाहिर है, अगर किसी प्रकार का फेलओवर भी स्थापित करना संभव है (ताकि अनुरोध है कि समय-समय पर उस समय के समय को फिर से चलाया जा सके) जो संदेश को खोने पर बहुत पसंद है!

मैं यह कैसे पूरा कर सकते हैं? अग्रिम में धन्यवाद!

अद्यतन: अगर कैमल/JMS/ActiveMQ बॉक्स से बाहर इस का समर्थन नहीं करता, मैं लिख कोई आपत्ति नहीं है मेरे अपने "ThreadManager" कि व्यवधान/25-सेकंड के बाद बंद हो जाता है धागे, लेकिन मैं नहीं कर रहा हूँ सुनिश्चित करें कि इंटरफ़ेस/कक्षाओं को कार्यान्वित/विस्तारित करने के लिए, और बाद में मेरे वसंत सेम में तार।

+0

शायद अगर मैंने अपने 'PooledConnectionFactory' पर 'expiryTimeout' सेट किया है? – IAmYourFaja

उत्तर

1

डिफ़ॉल्ट रूप से Camel activemq अनुरोध 20 सेकंड के बाद अनुरोध समय।

टाइमआउट भेजने के लिए org.apache.activemq.ActiveMQConnectionFactory पर एक SendTimeout प्रॉपर्टी है। JMSConfiguraiton के लिए requesttimeout विकल्प भी देखें।

विफलता के लिए आप ब्रोकर यूआरएल में फेलओवर ट्रांसपोर्ट सेट कर सकते हैं।

+0

धन्यवाद @ उपयोगकर्ता-सोमा (+1) - 20-सेकंड ActiveMQ टाइमआउट का नाम क्या है? और इस टाइमआउट और "टाइमआउट भेजें" के बीच क्या अंतर है जिसका आपने उल्लेख किया है? एक बार फिर धन्यवाद! – IAmYourFaja

+0

@DirtyMikeAndTheBoys - मेरी समझ यह है कि ऊंट jms अनुरोध टाइमआउट और ActiveMQConnectionFactory sendtimeout टाइमआउट के निर्माता को सूचित करने के लिए, एक ही उद्देश्य, यानी, एक ही उद्देश्य प्रदान करता है। संदेश समाप्ति एक संदेश की समय प्रासंगिकता इंगित करता है। यह ब्रोकर को संकेत देता है कि उपभोक्ता को समय-समय पर संदेश न भेजें। समय jmsconfiguration पर रहने के लिए यह इंगित करता है। – techuser

1

सिर्फ अपने brokerURL

failover:(tcp\://localhost\:61616)?timeout=25000 

पर timeout गुण सेट इस ताकि आप इसे यह बस हमेशा के लिए धागा अवरुद्ध होने के बजाय संभाल कर सकते हैं अपने निर्माता को वापस एक त्रुटि का प्रचार करेंगे ...

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