Hi Guys,

I have this requirement where the source queue and destination queue are on
separate brokers. See the config below:

<bean id="requestJMSConnectionFactory"
class="org.apache.activemq.ActiveMQConnectionFactory">
                <property name="alwaysSessionAsync" value="false"/>
                <property name="alwaysSyncSend" value="true"/>
                <property 
name="brokerURL"><value>${request-queue-url}</value></property>
                <property name="clientID" value=""/>
                <property name="closeTimeout" value="15000"/>
                <property name="copyMessageOnSend" value="true"/>
                <property name="disableTimeStampsByDefault" value="false"/>
                <property name="dispatchAsync" value="false"/>
                <property name="objectMessageSerializationDefered" 
value="false"/>
                <property name="optimizeAcknowledge" value="false"/>
                <property name="optimizedMessageDispatch" value="true"/>
                <property name="password" value=""/>
                <property name="producerWindowSize" value="0"/>
                <property name="statsEnabled" value="false"/>
                <property name="useAsyncSend" value="false"/>
                <property name="useCompression" value="false"/>
                <property name="useRetroactiveConsumer" value="false"/>
                <property name="userName" value=""/>
                <property name="watchTopicAdvisories" value="true"/>
                <property name="sendTimeout" value="0"/>
                <property name="redeliveryPolicy" ref="redeliveryPolicy"/>
        </bean>
        
        <bean id="responseJMSConnectionFactory"
class="org.apache.activemq.ActiveMQConnectionFactory">
                <property name="alwaysSessionAsync" value="false"/>
                <property name="alwaysSyncSend" value="true"/>
                <property 
name="brokerURL"><value>${response-queue-url}</value></property>
                <property name="clientID" value=""/>
                <property name="closeTimeout" value="15000"/>
                <property name="copyMessageOnSend" value="true"/>
                <property name="disableTimeStampsByDefault" value="false"/>
                <property name="dispatchAsync" value="false"/>
                <property name="objectMessageSerializationDefered" 
value="false"/>
                <property name="optimizeAcknowledge" value="false"/>
                <property name="optimizedMessageDispatch" value="true"/>
                <property name="password" value=""/>
                <property name="producerWindowSize" value="0"/>
                <property name="statsEnabled" value="false"/>
                <property name="useAsyncSend" value="false"/>
                <property name="useCompression" value="false"/>
                <property name="useRetroactiveConsumer" value="false"/>
                <property name="userName" value=""/>
                <property name="watchTopicAdvisories" value="true"/>
                <property name="sendTimeout" value="0"/>
                <property name="redeliveryPolicy" ref="redeliveryPolicy"/>
        </bean>
        
        <bean id="requestJMSTransactionManager"
class="org.springframework.jms.connection.JmsTransactionManager">
            <property name="connectionFactory" 
ref="requestJMSConnectionFactory" />                 
        </bean>
        
        <bean id="responseJMSTransactionManager"
class="org.springframework.jms.connection.JmsTransactionManager">
            <property name="connectionFactory" 
ref="responseJMSConnectionFactory"
/>                  
        </bean>
        
        
        <bean id="requestJMSConfig"
class="org.apache.camel.component.jms.JmsConfiguration">
            <property name="connectionFactory" 
ref="requestJMSConnectionFactory"/>
            <property name="transactionManager"
ref="requestJMSTransactionManager"/>
            <property name="transacted" value="true"/>
            <property name="concurrentConsumers" value="2"/>
            <property name="timeToLive" value="86400000"/>
                <property name="deliveryPersistent" value="true"/>
                <property name="explicitQosEnabled" value="true"/>              
                <property name="priority" value="9"/>
                <property name="transactedInOut" value="true"/>         
        </bean>
        
        <bean id="responseJMSConfig"
class="org.apache.camel.component.jms.JmsConfiguration">
            <property name="connectionFactory" 
ref="responseJMSConnectionFactory"/>
            <property name="transactionManager"
ref="responseJMSTransactionManager"/>
            <property name="transacted" value="true"/>
            <property name="concurrentConsumers" value="2"/>
            <property name="timeToLive" value="86400000"/>
                <property name="deliveryPersistent" value="true"/>
                <property name="explicitQosEnabled" value="true"/>              
                <property name="priority" value="9"/>
                <property name="transactedInOut" value="true"/> 
        </bean>
        
        <bean id="REQUEST_PROPAGATION_REQUIRED"
class="org.apache.camel.spring.spi.SpringTransactionPolicy">
            <property name="transactionManager"
ref="requestJMSTransactionManager"/>
            <property name="propagationBehaviorName" 
value="PROPAGATION_REQUIRED"/>
        </bean>
        
        <bean id="RESPONSE_PROPAGATION_REQUIRED"
class="org.apache.camel.spring.spi.SpringTransactionPolicy">
            <property name="transactionManager"
ref="responseJMSTransactionManager"/>
            <property name="propagationBehaviorName" 
value="PROPAGATION_REQUIRED"/>
        </bean>
        
        <bean id="REQUEST_TEMPLATE_PROPAGATION_REQUIRED"
class="org.springframework.transaction.support.TransactionTemplate">
            <property name="transactionManager"
ref="requestJMSTransactionManager"/>
        </bean>

<bean id="requestJMS" class="org.apache.camel.component.jms.JmsComponent">
                <property name="configuration" ref="requestJMSConfig"/>         
        </bean>
        
        <bean id="responseJMS" 
class="org.apache.camel.component.jms.JmsComponent">
                <property name="configuration" ref="responseJMSConfig"/>        
        
        </bean>

<osgi:camelContext xmlns="http://camel.apache.org/schema/spring";
trace="true"> 
        <endpoint id="srcJMS" uri="requestJMS:${request-queue}"/>
        <endpoint id="dstJMS" uri="responseJMS:${response-queue}"/>             
    
    <route>
        <from ref="srcJMS"/>    
        <policy ref="REQUEST_PROPAGATION_REQUIRED"/>
        <to uri="nmr:router1"/>  
        <to ref="dstJMS"/>
    </route>
 </osgi:camelContext>

Each time the response is dropped into the responseQueue I get this message
and it tries to requeue the message into the response queue which makes it
enqueue multiple responses.

Here is the exception thrown:
org.apache.camel.ExchangeTimedOutException: The OUT message was not received
within: 20000 millis. Exchange[JmsMessage: 
at
org.apache.camel.component.jms.JmsProducer.processInOut(JmsProducer.java:265)
        at 
org.apache.camel.component.jms.JmsProducer.process(JmsProducer.java:147)
        at
org.apache.camel.processor.SendProcessor$1.doInProducer(SendProcessor.java:97)
        at
org.apache.camel.processor.SendProcessor$1.doInProducer(SendProcessor.java:95)
        at 
org.apache.camel.impl.ProducerCache.doInProducer(ProducerCache.java:146)
        at
org.apache.camel.processor.SendProcessor.doProcess(SendProcessor.java:94)
        at 
org.apache.camel.processor.SendProcessor.process(SendProcessor.java:82)
        at
org.apache.camel.processor.DelegateProcessor.processNext(DelegateProcessor.java:53)
        at
org.apache.camel.processor.DelegateProcessor.proceed(DelegateProcessor.java:82)
        at
org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:161)
        at
org.apache.camel.processor.RedeliveryErrorHandler.processExchange(RedeliveryErrorHandler.java:177)
        at
org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:143)
        at
org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:88)
        at
org.apache.camel.processor.DefaultErrorHandler.process(DefaultErrorHandler.java:49)
        at
org.apache.camel.processor.DefaultChannel.process(DefaultChannel.java:228)
        at org.apache.camel.processor.Pipeline.process(Pipeline.java:74)
        at
org.apache.camel.processor.RedeliveryErrorHandler.processExchange(RedeliveryErrorHandler.java:177)
        at
org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:143)
        at
org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:88)
        at
org.apache.camel.spring.spi.TransactionErrorHandler.access$001(TransactionErrorHandler.java:39)

Kind help out.

-- 
View this message in context: 
http://old.nabble.com/ExchangeTimedOutException%3A-The-OUT-message-was-not-received-within%3A-20000-millis.-tp28764712p28764712.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Reply via email to