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.

Reply via email to