I am trying to make sure my application is resilient. It sends JMS messages to 
a remote ActiveMQ broker. Unfortunately when that broker goes down the client 
starts to block even though I am using the Camel asyncSendBody method. See 
below for the stack trace.

The ActiveMQ version is 5.3.0 although I have the same problem with the most 
recent stable release.

This is the argument I give to the asyncSendBody method:

    jms:queue:myQueue?jmsMessageType=Text&timeToLive=5000

My connection factory uses this URL:

    
failover:(tcp://my.ip:61613,tcp://my:ip:61613)?useExponentialBackOff=true&randomize=false&timeout=1000

As the broker starts to fail I see lots of the following errors in the log:

    org.apache.camel.processor.UnitOfWorkProcessor  - Caught unhandled 
exception while processing ExchangeId: 
ID-james-upcit-ds-upc-biz-64404-1334601186430-0-38
IOException: Failover timeout of 1000 ms reached

   org.apache.activemq.transport.failover.FailoverTransport  - Failover timed 
out after 29998ms

Then after attempting to send quite a few more messages the blocking starts. I 
can't go live with my application in this state and I really don't want to put 
another queue in place to decouple the JMS producer. Is there something I am 
doing wrong? If the broker is down I am quite happy for these messages to be 
lost - they lose their meaning if not delivered immediately.

Thanks
James

at java.lang.Object.wait(Native Method)
        at 
org.apache.activemq.transport.failover.FailoverTransport.oneway(FailoverTransport.java:433)
        at 
org.apache.activemq.transport.MutexTransport.oneway(MutexTransport.java:40)
        at 
org.apache.activemq.transport.ResponseCorrelator.asyncRequest(ResponseCorrelator.java:74)
        at 
org.apache.activemq.transport.ResponseCorrelator.request(ResponseCorrelator.java:79)
        at 
org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1244)
        at 
org.apache.activemq.ActiveMQConnection.ensureConnectionInfoSent(ActiveMQConnection.java:1350)
        at 
org.apache.activemq.ActiveMQConnection.createSession(ActiveMQConnection.java:300)
        at 
org.springframework.jms.support.JmsAccessor.createSession(JmsAccessor.java:196)
        at 
org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:457)
        at 
org.apache.camel.component.jms.JmsConfiguration$CamelJmsTemplate.send(JmsConfiguration.java:185)
        at 
org.apache.camel.component.jms.JmsProducer.doSend(JmsProducer.java:359)
        at 
org.apache.camel.component.jms.JmsProducer.processInOnly(JmsProducer.java:313)
        at 
org.apache.camel.component.jms.JmsProducer.process(JmsProducer.java:111)
        at 
org.apache.camel.processor.UnitOfWorkProcessor.processAsync(UnitOfWorkProcessor.java:150)
        at 
org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:117)
        at 
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:99)
        at 
org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:86)
        at 
org.apache.camel.processor.UnitOfWorkProducer.process(UnitOfWorkProducer.java:63)
        at 
org.apache.camel.impl.ProducerCache$2.doInProducer(ProducerCache.java:352)
        at 
org.apache.camel.impl.ProducerCache$2.doInProducer(ProducerCache.java:324)
        at 
org.apache.camel.impl.ProducerCache.doInProducer(ProducerCache.java:223)
        at 
org.apache.camel.impl.ProducerCache.sendExchange(ProducerCache.java:324)
        at org.apache.camel.impl.ProducerCache.send(ProducerCache.java:169)
        at 
org.apache.camel.impl.DefaultProducerTemplate.send(DefaultProducerTemplate.java:111)
        at 
org.apache.camel.impl.DefaultProducerTemplate.sendBody(DefaultProducerTemplate.java:124)
        at 
org.apache.camel.impl.DefaultProducerTemplate$14.call(DefaultProducerTemplate.java:596)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
        at java.util.concurrent.FutureTask.run(FutureTask.java:138)
        at 
java.util.concurrent.ThreadPoolExecutor$CallerRunsPolicy.rejectedExecution(ThreadPoolExecutor.java:1746)
        at 
java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:767)
        at 
java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:658)
        at 
java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:92)
        at 
org.apache.camel.impl.DefaultProducerTemplate.asyncSendBody(DefaultProducerTemplate.java:601)
        at 
org.apache.camel.impl.DefaultProducerTemplate.asyncSendBody(DefaultProducerTemplate.java:458)

Reply via email to