Concurrent consumers on seda endpoint can cause content routing to mismatch ---------------------------------------------------------------------------
Key: CAMEL-3188 URL: https://issues.apache.org/activemq/browse/CAMEL-3188 Project: Apache Camel Issue Type: Bug Components: camel-core Affects Versions: 2.4.0 Environment: Mac OS X 10.6.4 Java(TM) SE Runtime Environment (build 1.6.0_20-b02-279-10M3065) Reporter: Brian Feaver When consuming concurrently from a seda endpoint, when the route contains a content router based on the header, it will randomly route through the wrong choice. In my specific case, I was consuming from an activemq queue, which would receive messages with a header that would then determine which route it would follow. It would randomly send messages down the wrong path. When I turned on tracing, it would behave itself. It also behaved itself when I limited it to only a single consumer. I was, however, able to duplicate it with the unit test below. Due to the concurrency issue, the test can occasionally pass, but run it a couple times and it should fail. It'll either receive 2 messages when it should have only gotten 1, or it will get no messages when it should have gotten 1. {code:title=ConcurrencyTest.java|borderStyle=solid} import org.apache.camel.EndpointInject; import org.apache.camel.Produce; import org.apache.camel.ProducerTemplate; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; import org.apache.camel.test.CamelTestSupport; public class ConcurrencyTest extends CamelTestSupport { @EndpointInject(uri = "mock:result") protected MockEndpoint resultEndpoint; @EndpointInject(uri = "mock:otherResult") protected MockEndpoint otherResultEndpoint; @Produce(uri = "seda:start") protected ProducerTemplate template; public void testSendMatchingMessage() throws Exception { String expectedBody = "<matched/>"; resultEndpoint.expectedBodiesReceived(expectedBody); otherResultEndpoint.expectedBodiesReceived(expectedBody); template.sendBodyAndHeader(expectedBody, "myDirection", "send"); template.sendBodyAndHeader(expectedBody, "myDirection", "received"); resultEndpoint.assertIsSatisfied(); } @Override protected RouteBuilder createRouteBuilder() { return new RouteBuilder() { public void configure() { from("seda:start?concurrentConsumers=10") // from("seda:start?concurrentConsumers=1") .choice() .when(header("myDirection").isEqualTo("send")).to("mock:result") .when(header("myDirection").isEqualTo("received")).to("mock:otherResult"); } }; } } {code} -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.