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 2016/04/19 18:19:30 UTC

[11/24] camel git commit: CAMEL-9879: Circuit Breaker EIP - That is using hystrix

CAMEL-9879: Circuit Breaker EIP - That is using hystrix


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/f180fbeb
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/f180fbeb
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/f180fbeb

Branch: refs/heads/master
Commit: f180fbeb8e1344c7b7cd069fc97dff5fef3b73b7
Parents: 6f75174
Author: Claus Ibsen <da...@apache.org>
Authored: Tue Apr 19 08:49:34 2016 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Apr 19 18:16:45 2016 +0200

----------------------------------------------------------------------
 .../component/hystrix/HystrixProcessor.java     | 29 +-------------------
 .../hystrix/HystrixProcessorCommand.java        | 13 +++++----
 2 files changed, 9 insertions(+), 33 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/f180fbeb/components/camel-hystrix/src/main/java/org/apache/camel/component/hystrix/HystrixProcessor.java
----------------------------------------------------------------------
diff --git a/components/camel-hystrix/src/main/java/org/apache/camel/component/hystrix/HystrixProcessor.java b/components/camel-hystrix/src/main/java/org/apache/camel/component/hystrix/HystrixProcessor.java
index 495706f..22d48af 100644
--- a/components/camel-hystrix/src/main/java/org/apache/camel/component/hystrix/HystrixProcessor.java
+++ b/components/camel-hystrix/src/main/java/org/apache/camel/component/hystrix/HystrixProcessor.java
@@ -85,20 +85,13 @@ public class HystrixProcessor extends ServiceSupport implements AsyncProcessor,
 
     @Override
     public boolean process(Exchange exchange, AsyncCallback callback) {
-        // run this as if we run inside try .. catch so there is no regular Camel error handler
-        exchange.setProperty(Exchange.TRY_ROUTE_BLOCK, true);
-
-        // use our callback that does some cleanup when done
-        AsyncCallback hystrixCallback = new HystrixAsyncCallback(exchange, callback);
-
         HystrixCommandGroupKey key = HystrixCommandGroupKey.Factory.asKey(id);
-        HystrixProcessorCommand command = new HystrixProcessorCommand(key, exchange, hystrixCallback, processor, fallback);
+        HystrixProcessorCommand command = new HystrixProcessorCommand(key, exchange, callback, processor, fallback);
         try {
             command.queue();
         } catch (Throwable e) {
             // error adding to queue, so set as error and we are done
             exchange.setException(e);
-            exchange.removeProperty(Exchange.TRY_ROUTE_BLOCK);
             callback.done(true);
             return true;
         }
@@ -116,24 +109,4 @@ public class HystrixProcessor extends ServiceSupport implements AsyncProcessor,
         // noop
     }
 
-    private static final class HystrixAsyncCallback implements AsyncCallback {
-
-        private final Exchange exchange;
-        private final AsyncCallback delegate;
-
-        public HystrixAsyncCallback(Exchange exchange, AsyncCallback delegate) {
-            this.exchange = exchange;
-            this.delegate = delegate;
-        }
-
-        @Override
-        public void done(boolean doneSync) {
-            if (doneSync) {
-                return;
-            }
-            // we are only done when called with false
-            exchange.removeProperty(Exchange.TRY_ROUTE_BLOCK);
-            delegate.done(doneSync);
-        }
-    }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/f180fbeb/components/camel-hystrix/src/main/java/org/apache/camel/component/hystrix/HystrixProcessorCommand.java
----------------------------------------------------------------------
diff --git a/components/camel-hystrix/src/main/java/org/apache/camel/component/hystrix/HystrixProcessorCommand.java b/components/camel-hystrix/src/main/java/org/apache/camel/component/hystrix/HystrixProcessorCommand.java
index 299819e..1eec854 100644
--- a/components/camel-hystrix/src/main/java/org/apache/camel/component/hystrix/HystrixProcessorCommand.java
+++ b/components/camel-hystrix/src/main/java/org/apache/camel/component/hystrix/HystrixProcessorCommand.java
@@ -54,6 +54,7 @@ public class HystrixProcessorCommand extends HystrixCommand<Exchange> {
 
         try {
             if (fallback != null) {
+                LOG.debug("Error occurred processing. Will now run fallback. Exception class: {} message: {}.", exception.getClass().getName(), exception.getMessage());
                 // store the last to endpoint as the failure endpoint
                 if (exchange.getProperty(Exchange.FAILURE_ENDPOINT) == null) {
                     exchange.setProperty(Exchange.FAILURE_ENDPOINT, exchange.getProperty(Exchange.TO_ENDPOINT));
@@ -66,14 +67,15 @@ public class HystrixProcessorCommand extends HystrixCommand<Exchange> {
                 exchange.removeProperty(Exchange.REDELIVERY_EXHAUSTED);
                 // run the fallback processor
                 try {
-                    LOG.debug("Running fallback: {}", exchange);
+                    LOG.debug("Running fallback: {} with exchange: {}", fallback, exchange);
                     fallback.process(exchange, callback);
                 } catch (Exception e) {
                     exchange.setException(e);
                 }
             }
         } finally {
-            LOG.debug("Running fallback: {} success", exchange);
+            LOG.debug("Running fallback: {} with exchange: {} done", fallback, exchange);
+            exchange.removeProperty(Exchange.TRY_ROUTE_BLOCK);
             callback.done(false);
         }
 
@@ -82,9 +84,9 @@ public class HystrixProcessorCommand extends HystrixCommand<Exchange> {
 
     @Override
     protected Exchange run() throws Exception {
-        LOG.debug("Running processor: {}", exchange);
+        LOG.debug("Running processor: {} with exchange: {}", processor, exchange);
 
-        exchange.setProperty(Exchange.EXCEPTION_HANDLED, null);
+        // run this as if we run inside try .. catch so there is no regular Camel error handler
         exchange.setProperty(Exchange.TRY_ROUTE_BLOCK, true);
         try {
             processor.process(exchange, callback);
@@ -98,7 +100,8 @@ public class HystrixProcessorCommand extends HystrixCommand<Exchange> {
         }
         // no errors we are done
         try {
-            LOG.debug("Running processor: {} success", exchange);
+            LOG.debug("Running processor: {} with exchange: {} done", processor, exchange);
+            exchange.removeProperty(Exchange.TRY_ROUTE_BLOCK);
             callback.done(false);
         } catch (Throwable e) {
             exchange.setException(e);