[ 
https://issues.apache.org/activemq/browse/CAMEL-1366?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Michael Chen updated CAMEL-1366:
--------------------------------

    Description: 
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.


  was:
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");
{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.



> EndpointMessageListener should respect ExchangePattern
> ------------------------------------------------------
>
>                 Key: CAMEL-1366
>                 URL: https://issues.apache.org/activemq/browse/CAMEL-1366
>             Project: Apache Camel
>          Issue Type: Bug
>    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.

Reply via email to