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)