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;
}