Hi

I have a camel route that consumes from a topic and sends to a queue. 

from("activemq:topic:mytopic?transacted=true&lazyCreateTransactionManager=true")
.log("${body}")
.to("activemq:queue:myqueue");

I've written some unit tests around it and sometimes it passes and on rare 
occasions it fails. Unit tests simply just publishes to mytopic and then checks 
myqueue to see if the message is there.

        @Test
        public void testSend() throws JMSException {
                logger.debug("unit test start");
                producerTemplate.sendBody("hello world");
                TextMessage mesg = (TextMessage) jmsTemplate.receive("myqueue");
                assertEquals("hello world", mesg.getText());
        }
 
Now when I look at the logs, I notice that even though Camel reports the route 
has started, it doesn't actually consume from the topic until after this. This 
means that potentially the unit test could publish the message to the topic 
before the route had registered its own consumer to it. 

Here's a snippet of the logs showing the consumer being created after the route 
has declared it has started.

2014-04-11 12:12:46,522 [main] INFO  org.apache.camel.spring.SpringCamelContext 
- Route: route1 started and consuming from: 
Endpoint[activemq://topic:mytopic?lazyCreateTransactionManager=true&transacted=true]
2014-04-11 12:12:46,522 [main] INFO  org.apache.camel.spring.SpringCamelContext 
- Total 1 routes, of which 1 is started.
2014-04-11 12:12:46,537 [main] DEBUG au.com.winning.camule.route.JmsTopicTest - 
unit test start
<snip>
2014-04-11 12:12:46,982 [ActiveMQ VMTransport: vm://localhost#1-1] DEBUG 
org.apache.activemq.broker.region.AbstractRegion - localhost adding consumer: 
ID:imacporky.local-57940-1397182366748-3:2:1:1 for destination: topic://mytopic

Important thing to note is that the consumer is created AFTER the route has 
started and AFTER the unit test has already begun. This is the cause of the 
race condition. Is this expected behaviour of routes? Shouldn't the consumer be 
created before declaring the route has started? Btw, this problem only occurs 
with topics, queues won't see this problem.

I'm using 2.13.0. Thanks.

Reply via email to