[ https://issues.apache.org/activemq/browse/CAMEL-1461?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=50769#action_50769 ]
Claus Ibsen commented on CAMEL-1461: ------------------------------------ Okay I got this boiled down to - when you sent an inOnly to the jms topic the JMSReplyTo is still there from the original JMS Message. This one needs to be cleared so Camel wont try to send a reply from the topic. This can however be disabled on the endpoint with {{"activemq:topic:news?disableReplyTo=true"}}. > 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 > Assignee: Claus Ibsen > > 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.