Are you sending request/reply or fire and forget messaging over JMS?

When you get that 20 sec timeout then its because Camel uses InOut and
expects a reply being send back to JMSReplyTo.

See
http://camel.apache.org/event-message.html
http://camel.apache.org/request-reply.html

On Thu, Jun 3, 2010 at 10:28 AM, lekkie <lekkie.ay...@gmail.com> wrote:
>
> 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.
>
>



-- 
Claus Ibsen
Apache Camel Committer

Author of Camel in Action: http://www.manning.com/ibsen/
Open Source Integration: http://fusesource.com
Blog: http://davsclaus.blogspot.com/
Twitter: http://twitter.com/davsclaus

Reply via email to