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 2020/10/12 07:03:11 UTC
[camel] branch master updated: CAMEL-15669: Fixed camel-cloud may
hang if service registry is empty during service call EIP.
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
The following commit(s) were added to refs/heads/master by this push:
new e03054d CAMEL-15669: Fixed camel-cloud may hang if service registry is empty during service call EIP.
e03054d is described below
commit e03054d49e9b5a8a149ba658692e8938f6023479
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Mon Oct 12 09:01:05 2020 +0200
CAMEL-15669: Fixed camel-cloud may hang if service registry is empty during service call EIP.
---
.../impl/cloud/DefaultServiceCallProcessor.java | 39 ++++++++++------------
1 file changed, 18 insertions(+), 21 deletions(-)
diff --git a/core/camel-cloud/src/main/java/org/apache/camel/impl/cloud/DefaultServiceCallProcessor.java b/core/camel-cloud/src/main/java/org/apache/camel/impl/cloud/DefaultServiceCallProcessor.java
index b00bd4b..0e756db 100644
--- a/core/camel-cloud/src/main/java/org/apache/camel/impl/cloud/DefaultServiceCallProcessor.java
+++ b/core/camel-cloud/src/main/java/org/apache/camel/impl/cloud/DefaultServiceCallProcessor.java
@@ -54,8 +54,12 @@ public class DefaultServiceCallProcessor extends AsyncProcessorSupport {
private final Expression expression;
private AsyncProcessor processor;
- public DefaultServiceCallProcessor(
- CamelContext camelContext, String name, String scheme, String uri,
+ private Expression serviceNameExp;
+ private Expression serviceUriExp;
+ private Expression servicePathExp;
+ private Expression serviceSchemeExp;
+
+ public DefaultServiceCallProcessor(CamelContext camelContext, String name, String scheme, String uri,
ExchangePattern exchangePattern,
ServiceLoadBalancer loadBalancer, Expression expression) {
@@ -138,6 +142,13 @@ public class DefaultServiceCallProcessor extends AsyncProcessorSupport {
Processor send = camelContext.adapt(ExtendedCamelContext.class).getProcessorFactory().createProcessor(camelContext,
"SendDynamicProcessor", args);
processor = AsyncProcessorConverterHelper.convert(send);
+
+ // optimize and build expressions that are static ahead of time
+ Language simple = camelContext.resolveLanguage("simple");
+ serviceNameExp = simple.createExpression(name);
+ serviceUriExp = uri != null ? simple.createExpression(uri) : null;
+ servicePathExp = contextPath != null ? simple.createExpression(contextPath) : null;
+ serviceSchemeExp = scheme != null ? simple.createExpression(scheme) : null;
}
@Override
@@ -163,10 +174,10 @@ public class DefaultServiceCallProcessor extends AsyncProcessorSupport {
final Message message = exchange.getIn();
// the values can be dynamic using simple language so compute those
- final String serviceName = applySimpleLanguage(name, exchange);
- final String serviceUri = applySimpleLanguage(uri, exchange);
- final String servicePath = applySimpleLanguage(contextPath, exchange);
- final String serviceScheme = applySimpleLanguage(scheme, exchange);
+ final String serviceName = serviceNameExp.evaluate(exchange, String.class);
+ final String serviceUri = serviceUriExp != null ? serviceUriExp.evaluate(exchange, String.class) : null;
+ final String servicePath = servicePathExp != null ? servicePathExp.evaluate(exchange, String.class) : null;
+ final String serviceScheme = serviceSchemeExp != null ? serviceSchemeExp.evaluate(exchange, String.class) : null;
message.setHeader(ServiceCallConstants.SERVICE_CALL_URI, serviceUri);
message.setHeader(ServiceCallConstants.SERVICE_CALL_CONTEXT_PATH, servicePath);
@@ -177,6 +188,7 @@ public class DefaultServiceCallProcessor extends AsyncProcessorSupport {
return loadBalancer.process(serviceName, server -> execute(server, exchange, callback));
} catch (Exception e) {
exchange.setException(e);
+ callback.done(true);
return true;
}
}
@@ -209,19 +221,4 @@ public class DefaultServiceCallProcessor extends AsyncProcessorSupport {
return processor.process(exchange, callback);
}
- /**
- * This function applies the simple language to the given expression.
- *
- * @param expression the expression
- * @param exchange the exchange
- * @return the computed expression
- */
- private static String applySimpleLanguage(String expression, Exchange exchange) {
- if (expression != null) {
- Language simple = exchange.getContext().resolveLanguage("simple");
- return simple.createExpression(expression).evaluate(exchange, String.class);
- } else {
- return null;
- }
- }
}