You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2021/03/19 13:57:03 UTC

[camel] 02/03: CAMEL-16339: camel-seda - Optimize to avoid unnesssary exchange copy

This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git

commit ec642cdcff1cbaecb7e9cfc9986d80e25d614956
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Mar 19 14:39:46 2021 +0100

    CAMEL-16339: camel-seda - Optimize to avoid unnesssary exchange copy
---
 .../apache/camel/component/seda/SedaConsumer.java    | 20 +++++++++-----------
 .../apache/camel/component/seda/SedaProducer.java    |  3 ---
 .../org/apache/camel/component/vm/VmConsumer.java    |  6 ++++--
 3 files changed, 13 insertions(+), 16 deletions(-)

diff --git a/components/camel-seda/src/main/java/org/apache/camel/component/seda/SedaConsumer.java b/components/camel-seda/src/main/java/org/apache/camel/component/seda/SedaConsumer.java
index 1d0966b..731d69a 100644
--- a/components/camel-seda/src/main/java/org/apache/camel/component/seda/SedaConsumer.java
+++ b/components/camel-seda/src/main/java/org/apache/camel/component/seda/SedaConsumer.java
@@ -33,6 +33,7 @@ import org.apache.camel.spi.ShutdownAware;
 import org.apache.camel.spi.Synchronization;
 import org.apache.camel.support.DefaultConsumer;
 import org.apache.camel.support.EmptyAsyncCallback;
+import org.apache.camel.support.ExchangeHelper;
 import org.apache.camel.support.UnitOfWorkHelper;
 import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
@@ -180,19 +181,14 @@ public class SedaConsumer extends DefaultConsumer implements Runnable, ShutdownA
                 }
                 if (exchange != null) {
                     try {
-                        // send a new copied exchange with new camel context
+                        // prepare the exchange before sending to consumer
                         Exchange newExchange = prepareExchange(exchange);
                         // process the exchange
                         sendToConsumers(newExchange);
-                        // copy the message back
-                        if (newExchange.hasOut()) {
-                            exchange.setOut(newExchange.getOut().copy());
-                        } else {
-                            exchange.setIn(newExchange.getIn());
-                        }
+                        // copy result back
+                        ExchangeHelper.copyResults(exchange, newExchange);
                         // log exception if an exception occurred and was not handled
-                        if (newExchange.getException() != null) {
-                            exchange.setException(newExchange.getException());
+                        if (exchange.getException() != null) {
                             getExceptionHandler().handleException("Error processing exchange", exchange,
                                     exchange.getException());
                         }
@@ -224,8 +220,10 @@ public class SedaConsumer extends DefaultConsumer implements Runnable, ShutdownA
      * @return          the exchange to process by this consumer.
      */
     protected Exchange prepareExchange(Exchange exchange) {
-        // this consumer grabbed the exchange so mark its from this route
-        exchange.adapt(ExtendedExchange.class).setFromRouteId(getRouteId());
+        // this consumer grabbed the exchange so mark its from this route/endpoint
+        ExtendedExchange ee = exchange.adapt(ExtendedExchange.class);
+        ee.setFromEndpoint(getEndpoint());
+        ee.setFromRouteId(getRouteId());
         return exchange;
     }
 
diff --git a/components/camel-seda/src/main/java/org/apache/camel/component/seda/SedaProducer.java b/components/camel-seda/src/main/java/org/apache/camel/component/seda/SedaProducer.java
index 2293e79..e3294a3 100644
--- a/components/camel-seda/src/main/java/org/apache/camel/component/seda/SedaProducer.java
+++ b/components/camel-seda/src/main/java/org/apache/camel/component/seda/SedaProducer.java
@@ -162,13 +162,10 @@ public class SedaProducer extends DefaultAsyncProducer {
 
     protected Exchange prepareCopy(Exchange exchange, boolean handover) {
         // use a new copy of the exchange to route async (and use same message id)
-
         // if handover we need to do special handover to avoid handing over
         // RestBindingMarshalOnCompletion as it should not be handed over with SEDA
         Exchange copy = ExchangeHelper.createCorrelatedCopy(exchange, handover, true,
                 synchronization -> !synchronization.getClass().getName().contains("RestBindingMarshalOnCompletion"));
-        // set a new from endpoint to be the seda queue
-        copy.adapt(ExtendedExchange.class).setFromEndpoint(endpoint);
         return copy;
     }
 
diff --git a/components/camel-vm/src/main/java/org/apache/camel/component/vm/VmConsumer.java b/components/camel-vm/src/main/java/org/apache/camel/component/vm/VmConsumer.java
index 9f36dbb..66f8228 100644
--- a/components/camel-vm/src/main/java/org/apache/camel/component/vm/VmConsumer.java
+++ b/components/camel-vm/src/main/java/org/apache/camel/component/vm/VmConsumer.java
@@ -52,8 +52,10 @@ public class VmConsumer extends SedaConsumer implements CamelContextAware {
     protected Exchange prepareExchange(Exchange exchange) {
         // send a new copied exchange with the camel context from this consumer
         Exchange newExchange = ExchangeHelper.copyExchangeAndSetCamelContext(exchange, getCamelContext());
-        // set the from endpoint
-        newExchange.adapt(ExtendedExchange.class).setFromEndpoint(getEndpoint());
+        // this consumer grabbed the exchange so mark its from this route/endpoint
+        ExtendedExchange ee = newExchange.adapt(ExtendedExchange.class);
+        ee.setFromEndpoint(getEndpoint());
+        ee.setFromRouteId(getRouteId());
         return newExchange;
     }