[ https://issues.apache.org/activemq/browse/CAMEL-1366?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=49964#action_49964 ]
Claus Ibsen commented on CAMEL-1366: ------------------------------------ @Michael The last one is not a bug. inOnly, inOut is used to affect/change the MEP on route. What you are asking for is on the consumer side (jms consumer, the from node) to set it to request only, or request-reply. However the jms spec has this JMSReplyTo that we should honor. So if someone sends a JMS message to a queue with a JMSReplyTo header then that caller would expect a reply on that destination and thus Camel should honor this and return a reply. So today you can do what you want: {code} from("activemq:my_queue").to("predict_weather://?reply_later=true"); {code} If the message sent to my_queue does NOT contain a JMSReplyTo then its a request only. However what we could consider is to also test for exchange.isOutCapable() and send a "null" body if the test fails to signal no/empty reply. > EndpointMessageListener should respect ExchangePattern > ------------------------------------------------------ > > Key: CAMEL-1366 > URL: https://issues.apache.org/activemq/browse/CAMEL-1366 > Project: Apache Camel > Issue Type: Bug > Components: camel-jms > Affects Versions: 1.6.0 > Environment: ActiveMQ/Camel > Reporter: Michael Chen > > In all current releases, > org.apache.camel.component.jms.EndpointMessageListener.onMessage() has the > following logic (line 90 in 1.6.0 code): > {code} > // send the reply > if (rce == null && body != null && !disableReplyTo) { > sendReply(replyDestination, message, exchange, body); > } > {code} > This logic should also respect ExchangePattern of the exchange, so I propose > a change to: > {code} > // send the reply > if (rce == null && body != null && exchange.isOutCapable()) { > sendReply(replyDestination, message, exchange, body); > } > {code} > This change allows a processing pattern where the route may change the > ExchangePattern using methods like RouteBuilder.inOnly() to switch the MEP at > will so that the reply is send at a later time (true asynchronous exchange). > This processing pattern is particularly useful for integrating long running > services. For example, > {code} > // Java DSL > from("activemq:my_queue?exchangePattern=InOnly").to("predict_weather://?reply_later=true"); > // or > from("activemq:my_queue2").inOnly().to("predict_weather://?reply_later=true"); > {code} > The flaw of the current logic makes it impossible to do true asynchronous > exchange, because 1) it does not respect the ExchangePattern; 2) if property > "disableReplyTo" is used, the "org.apache.camel.jms.replyDestination" > property will not be set (see method createExchange in the same file), thus > downstream cannot find the reply destination. > The proposed change can also deprecate the disableReplyTo property and put > the MEP concept into good use. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.