[ https://issues.apache.org/activemq/browse/CAMEL-1461?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=51030#action_51030 ]
Marat Bedretdinov commented on CAMEL-1461: ------------------------------------------ Claus, Yes I did manage to get all of the tests to pass before I restarted this thread, but as you said my use case is now quite cumbersome and I think it really does not have to be. Please take a look at the patch attached. I think this will keep all happy. I also show how the use case you described could be implemented. That is when one wants to have a request/reply over a queue and then also send a message (notification) over a topic and then collect correlated acknowledgement message(s) that those notification have been received. source app -> queue:request -> target app -> queue:reply -> source app -> topic:notification topic:notification -> notification subscriber app 1 -> queue:notificationAck topic:notification -> notification subscriber app 2 -> queue:notificationAck queue:notificationAck -> source app correlates ack using original request correlationID or a unique selector The usual use case for topics are one way messages, so if the user really wants to reply to destination that came with a message received over a topic then the receiver should be ready to accept more than one reply correlated on the same source message. Since a request/reply pattern is 1 request 1 reply, then the reply destination embedded in the message that came over a topic should really be decoupled from the destination used to receive a reply from request/reply pattern. > 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 > > Attachments: CAMEL-1461-2009-04-05-01-58.patch > > > 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.