A request route with a topic node incurs a 20 second wait and refers to the wrong MEP. --------------------------------------------------------------------------------------
Key: CAMEL-1461 URL: https://issues.apache.org/activemq/browse/CAMEL-1461 Project: Apache Camel Issue Type: Bug Components: camel-jms Affects Versions: 1.6.0 Environment: ActiveMQ/Camel Reporter: Michael Chen If a route contains a node that publishes to a topic, the route is incorrectly suspended for a default 20 seconds at the topic node. Further, JmsProducer.java checks the MEP of the original request Exchange and not the endpoint of the topic. For example, say I have a route built like this: {code} from("activemq:queue:request"). to("generate_news"). to("activemq:topic:news"). to("do_something_else"); {code} The original request is expecting a reply. However, after the "news" is pumped into the news topic, there is a default 20 second wait (requestTimeout). This wait always results in the exception: "The OUT message was not received within: 20000 millis on the exchange..." After reading the JmsProducer code, I changed the route to the following: {code} from("activemq:queue:request"). to("generate_news"). to("activemq:topic:news?exchangePattern=InOnly"). to("do_something_else"); {code} This reveals the root of the bug, which is in the first few lines of method org.apache.camel.component.jms.JmsProducer.process(Exchange): {code}// public void process(final Exchange exchange) { final org.apache.camel.Message in = exchange.getIn(); if (exchange.getPattern().isOutCapable()) { {code} The above if statement checks the MEP of the original request's Exchange and not the new endpoint of the news topic. This makes the above "?exchangePattern=InOnly" configuration useless, because the original request MEP is InOut. The result is that after that 20 second time-out, the temporary queue for the original request has expired, so the whole request failed. Note that the next node "do_something_else" is never reached due to the time-out exception. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.