[ 
https://issues.apache.org/activemq/browse/CAMEL-1461?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=51029#action_51029
 ] 

Claus Ibsen commented on CAMEL-1461:
------------------------------------

> So I think we can address both of the use cases if we were to still propagate 
> replyTo and correlationID but honor the inOnly pattern of the to() endpoints 
> even
> if the endpoint prior to it in the chain was an  in-out
Yeah, that should be our goal. We agree here.

That should already be possible if you set the *preserveMessageQos=true* option 
in the *to*. That instructs Camel JMSProducer to _not_ drop the 
JMSReplyTo/JMSCorrelationID. See JMSProducer.java around codeline 275.

Eg we kinda have reverse the problem between your bridge and Michaels use-case, 
for which must configure the JMS endpoints with special options.
Before Michael had to se the disableReplyTo=true on his from route. This was in 
fact quite wrong as the consumer could have been a non Camel one.
Well never the less its fixed now.

Now its your situation that has to set the special *preserveMessageQos=true* on 
the to endpoint, eg when sending.

So dont we have the solution now?

> 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
>             Fix For: 2.0.0, 1.6.1
>
>
> 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