You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by wheleph <wh...@gmail.com> on 2014/06/19 17:20:44 UTC

Apache Camel blocking on multicast

I have an application that consists of many modules deployed in several JBoss
instances. Those modules broadcast their version numbers via JMS to each
other.

It works in the following way. Each module periodically broadcasts its
versions like this:

camelTemplate.asyncSendBody(moduleVersionsOutputChannel, new
ArrayList<>(moduleVersions));

Here's the definition of moduleVersionsOutputChannel:

<endpoint id="moduleVersionsOutputChannel"
uri="direct:module.versions.output.channel"/>

Then there's a route that consumes messages from moduleVersionsOutputChannel
(referred as source below) and posts the messages into topics:

from(source).multicast()
       
.parallelProcessing().timeout(moduleVersionsMonitoringConfig.getMulticastTimeout())
        .to(moduleVersionsMonitoringConfig.getChannels())
        .id(moduleVersionsService.getCurrentModuleId() + "-outbound");

At the beginning everything works fine, but after some time (hours or days)
the threads that do multicast are blocked. I observe blocks at 2 different
points.

The first block happens in the thread where asyncSendBody is called:

"moduleVersionsBroadcastScheduler-1@57542" prio=5 tid=0x423 nid=NA waiting
  java.lang.Thread.State: WAITING
      at sun.misc.Unsafe.park(Unsafe.java:-1)
      at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
      at
java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:834)
      at
java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:994)
      at
java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1303)
      at java.util.concurrent.CountDownLatch.await(CountDownLatch.java:236)
      at
org.apache.camel.processor.MulticastProcessor.doProcessParallel(MulticastProcessor.java:328)
      at
org.apache.camel.processor.MulticastProcessor.process(MulticastProcessor.java:214)
      at
org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:72)
      at
org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:163)
      at
org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
      at
org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
      at
org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:51)
      at
org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
      at
org.apache.camel.processor.UnitOfWorkProducer.process(UnitOfWorkProducer.java:73)
      at
org.apache.camel.impl.ProducerCache$2.doInProducer(ProducerCache.java:378)
      at
org.apache.camel.impl.ProducerCache$2.doInProducer(ProducerCache.java:346)
      at
org.apache.camel.impl.ProducerCache.doInProducer(ProducerCache.java:242)
      at
org.apache.camel.impl.ProducerCache.sendExchange(ProducerCache.java:346)
      at org.apache.camel.impl.ProducerCache.send(ProducerCache.java:184)
      at
org.apache.camel.impl.DefaultProducerTemplate.send(DefaultProducerTemplate.java:124)
      at
org.apache.camel.impl.DefaultProducerTemplate.sendBody(DefaultProducerTemplate.java:137)
      at
org.apache.camel.impl.DefaultProducerTemplate$14.call(DefaultProducerTemplate.java:621)
      at java.util.concurrent.FutureTask.run(FutureTask.java:262)
      at
java.util.concurrent.ThreadPoolExecutor$CallerRunsPolicy.rejectedExecution(ThreadPoolExecutor.java:2025)
      at
java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:821)
      at
java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1372)
      at
java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:132)
      at
org.apache.camel.impl.DefaultProducerTemplate.asyncSendBody(DefaultProducerTemplate.java:626)
      at ...

Another time the execution blocks at the later point when it actually tries
to post a message to JMS topics:

"Camel (moduleVersionsContext) thread #1044 - Multicast@52031" daemon prio=5
tid=0xa16 nid=NA waiting
  java.lang.Thread.State: WAITING
      at sun.misc.Unsafe.park(Unsafe.java:-1)
      at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
      at
java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:834)
      at
java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:994)
      at
java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1303)
      at java.util.concurrent.Semaphore.acquire(Semaphore.java:472)
      at
org.hornetq.core.client.impl.ClientProducerCreditsImpl.acquireCredits(ClientProducerCreditsImpl.java:90)
      at
org.hornetq.core.client.impl.ClientProducerImpl.sendRegularMessage(ClientProducerImpl.java:307)
      at
org.hornetq.core.client.impl.ClientProducerImpl.doSend(ClientProducerImpl.java:288)
      at
org.hornetq.core.client.impl.ClientProducerImpl.send(ClientProducerImpl.java:140)
      at
org.hornetq.jms.client.HornetQMessageProducer.doSend(HornetQMessageProducer.java:438)
      at
org.hornetq.jms.client.HornetQMessageProducer.send(HornetQMessageProducer.java:205)
      at
org.springframework.jms.core.JmsTemplate.doSend(JmsTemplate.java:589)
      at
org.apache.camel.component.jms.JmsConfiguration$CamelJmsTemplate.doSend(JmsConfiguration.java:336)
      at
org.apache.camel.component.jms.JmsConfiguration$CamelJmsTemplate.doSendToDestination(JmsConfiguration.java:275)
      at
org.apache.camel.component.jms.JmsConfiguration$CamelJmsTemplate.access$100(JmsConfiguration.java:217)
      at
org.apache.camel.component.jms.JmsConfiguration$CamelJmsTemplate$1.doInJms(JmsConfiguration.java:231)
      at
org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:466)
      at
org.apache.camel.component.jms.JmsConfiguration$CamelJmsTemplate.send(JmsConfiguration.java:228)
      at
org.apache.camel.component.jms.JmsProducer.doSend(JmsProducer.java:431)
      at
org.apache.camel.component.jms.JmsProducer.processInOnly(JmsProducer.java:385)
      at
org.apache.camel.component.jms.JmsProducer.process(JmsProducer.java:153)
      at
org.apache.camel.processor.SendProcessor.process(SendProcessor.java:110)
      at
org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:72)
      at
org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:163)
      at
org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
      at
org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:398)
      at
org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
      at
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:105)
      at
org.apache.camel.processor.MulticastProcessor.doProcessParallel(MulticastProcessor.java:712)
      at
org.apache.camel.processor.MulticastProcessor.access$200(MulticastProcessor.java:83)
      at
org.apache.camel.processor.MulticastProcessor$1.call(MulticastProcessor.java:293)
      at
org.apache.camel.processor.MulticastProcessor$1.call(MulticastProcessor.java:278)
      at java.util.concurrent.FutureTask.run(FutureTask.java:262)
      at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
      at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
      at java.lang.Thread.run(Thread.java:744)

Can you tell me whether I have a bug in my Camel configuration or it's a
know Camel issue and there's some workaround?

Environment:

    Apache Camel 2.12.3
    JBoss 6.1 EAP
    OpenJDK 1.7.0_55
    Ubuntu Linux 12.04 LTS




--
View this message in context: http://camel.465427.n5.nabble.com/Apache-Camel-blocking-on-multicast-tp5752585.html
Sent from the Camel - Users mailing list archive at Nabble.com.