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:42 UTC

[23/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/62bbf9b2
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/62bbf9b2
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/62bbf9b2

Branch: refs/heads/master
Commit: 62bbf9b2393a450b97fb2782dcdf905bf029a6a2
Parents: d14dfbd
Author: Claus Ibsen <da...@apache.org>
Authored: Tue Apr 19 16:38:59 2016 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Apr 19 18:16:45 2016 +0200

----------------------------------------------------------------------
 .../model/HystrixConfigurationDefinition.java   | 39 +++++++++++++++++++-
 .../apache/camel/model/HystrixDefinition.java   | 28 +-------------
 .../processor/HystrixProcessorFactory.java      | 37 +++++++++++++------
 .../processor/HystrixRouteConfigTest.java       |  2 +-
 .../processor/SpringHystrixRouteConfigTest.xml  |  2 +-
 5 files changed, 67 insertions(+), 41 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/62bbf9b2/camel-core/src/main/java/org/apache/camel/model/HystrixConfigurationDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/HystrixConfigurationDefinition.java b/camel-core/src/main/java/org/apache/camel/model/HystrixConfigurationDefinition.java
index a47b347..d4e9f52 100644
--- a/camel-core/src/main/java/org/apache/camel/model/HystrixConfigurationDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/HystrixConfigurationDefinition.java
@@ -33,9 +33,14 @@ import org.apache.camel.spi.Metadata;
 @XmlAccessorType(XmlAccessType.FIELD)
 public class HystrixConfigurationDefinition extends IdentifiedType {
 
+    public static final String DEFAULT_GROUP_KEY = "CamelHystrix";
+
     @XmlTransient
     private HystrixDefinition parent;
-
+    @XmlAttribute @Metadata(defaultValue = "CamelHystrix")
+    private String groupKey;
+    @XmlAttribute @Metadata(defaultValue = "CamelHystrix")
+    private String threadPoolKey;
     @XmlAttribute
     @Metadata(label = "command", defaultValue = "true")
     private Boolean circuitBreakerEnabled;
@@ -134,6 +139,22 @@ public class HystrixConfigurationDefinition extends IdentifiedType {
     // Getter/Setter
     // -------------------------------------------------------------------------
 
+    public String getGroupKey() {
+        return groupKey;
+    }
+
+    public void setGroupKey(String groupKey) {
+        this.groupKey = groupKey;
+    }
+
+    public String getThreadPoolKey() {
+        return threadPoolKey;
+    }
+
+    public void setThreadPoolKey(String threadPoolKey) {
+        this.threadPoolKey = threadPoolKey;
+    }
+
     public Boolean getCircuitBreakerEnabled() {
         return circuitBreakerEnabled;
     }
@@ -363,6 +384,22 @@ public class HystrixConfigurationDefinition extends IdentifiedType {
     // -------------------------------------------------------------------------
 
     /**
+     * Sets the group key to use. The default value is CamelHystrix.
+     */
+    public HystrixConfigurationDefinition groupKey(String groupKey) {
+        setGroupKey(groupKey);
+        return this;
+    }
+
+    /**
+     * Sets the thread pool key to use. Will by default use the same value as groupKey has been configured to use.
+     */
+    public HystrixConfigurationDefinition threadPoolKey(String threadPoolKey) {
+        setThreadPoolKey(threadPoolKey);
+        return this;
+    }
+
+    /**
      * Whether to use a HystrixCircuitBreaker or not. If false no circuit-breaker logic will be used and all requests permitted.
      * <p>
      * This is similar in effect to circuitBreakerForceClosed() except that continues tracking metrics and knowing whether it

http://git-wip-us.apache.org/repos/asf/camel/blob/62bbf9b2/camel-core/src/main/java/org/apache/camel/model/HystrixDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/HystrixDefinition.java b/camel-core/src/main/java/org/apache/camel/model/HystrixDefinition.java
index b5fc6a8..3ca72f5 100644
--- a/camel-core/src/main/java/org/apache/camel/model/HystrixDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/HystrixDefinition.java
@@ -36,13 +36,6 @@ import org.apache.camel.spi.RouteContext;
 @XmlAccessorType(XmlAccessType.FIELD)
 public class HystrixDefinition extends ProcessorDefinition<HystrixDefinition> {
 
-    public static final String DEFAULT_GROUP_KEY = "CamelHystrix";
-    public static final String DEFAULT_THREAD_POOL_KEY = "CamelHystrix";
-
-    @XmlAttribute @Metadata(defaultValue = "CamelHystrix")
-    private String groupKey;
-    @XmlAttribute @Metadata(defaultValue = "CamelHystrix")
-    private String threadPoolKey;
     @XmlElement
     private HystrixConfigurationDefinition hystrixConfiguration;
     @XmlElement
@@ -127,23 +120,6 @@ public class HystrixDefinition extends ProcessorDefinition<HystrixDefinition> {
     // Getter/Setter
     // -------------------------------------------------------------------------
 
-
-    public String getGroupKey() {
-        return groupKey;
-    }
-
-    public void setGroupKey(String groupKey) {
-        this.groupKey = groupKey;
-    }
-
-    public String getThreadPoolKey() {
-        return threadPoolKey;
-    }
-
-    public void setThreadPoolKey(String threadPoolKey) {
-        this.threadPoolKey = threadPoolKey;
-    }
-
     public HystrixConfigurationDefinition getHystrixConfiguration() {
         return hystrixConfiguration;
     }
@@ -183,7 +159,7 @@ public class HystrixDefinition extends ProcessorDefinition<HystrixDefinition> {
      * Sets the group key to use. The default value is CamelHystrix.
      */
     public HystrixDefinition groupKey(String groupKey) {
-        setGroupKey(groupKey);
+        configure().groupKey(groupKey);
         return this;
     }
 
@@ -191,7 +167,7 @@ public class HystrixDefinition extends ProcessorDefinition<HystrixDefinition> {
      * Sets the thread pool key to use. The default value is CamelHystrix.
      */
     public HystrixDefinition threadPoolKey(String threadPoolKey) {
-        setThreadPoolKey(threadPoolKey);
+        configure().threadPoolKey(threadPoolKey);
         return this;
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/62bbf9b2/components/camel-hystrix/src/main/java/org/apache/camel/component/hystrix/processor/HystrixProcessorFactory.java
----------------------------------------------------------------------
diff --git a/components/camel-hystrix/src/main/java/org/apache/camel/component/hystrix/processor/HystrixProcessorFactory.java b/components/camel-hystrix/src/main/java/org/apache/camel/component/hystrix/processor/HystrixProcessorFactory.java
index 5317db0..26ea912 100644
--- a/components/camel-hystrix/src/main/java/org/apache/camel/component/hystrix/processor/HystrixProcessorFactory.java
+++ b/components/camel-hystrix/src/main/java/org/apache/camel/component/hystrix/processor/HystrixProcessorFactory.java
@@ -53,14 +53,29 @@ public class HystrixProcessorFactory implements ProcessorFactory {
                 fallback = cb.getFallback().createProcessor(routeContext);
             }
 
-            // group and thread pool keys to use
-            String groupKey = HystrixDefinition.DEFAULT_GROUP_KEY;
-            String threadPoolKey = HystrixDefinition.DEFAULT_THREAD_POOL_KEY;
-            if (cb.getGroupKey() != null) {
-                groupKey = cb.getGroupKey();
+            HystrixConfigurationDefinition config = cb.getHystrixConfiguration();
+            HystrixConfigurationDefinition configRef = null;
+            if (cb.getHystrixConfigurationRef() != null) {
+                configRef = CamelContextHelper.mandatoryLookup(routeContext.getCamelContext(), cb.getHystrixConfigurationRef(), HystrixConfigurationDefinition.class);
+            }
+
+            // group and thread pool keys to use they can be configured on configRef and config, so look there first, and if none then use default
+            String groupKey = null;
+            String threadPoolKey = null;
+            if (configRef != null) {
+                groupKey = configRef.getGroupKey();
+                threadPoolKey = configRef.getThreadPoolKey();
+            }
+            if (config != null && config.getGroupKey() != null) {
+                groupKey = config.getGroupKey();
+                threadPoolKey = config.getThreadPoolKey();
             }
-            if (cb.getThreadPoolKey() != null) {
-                threadPoolKey = cb.getThreadPoolKey();
+            if (groupKey == null) {
+                groupKey = HystrixConfigurationDefinition.DEFAULT_GROUP_KEY;
+            }
+            if (threadPoolKey == null) {
+                // thread pool key should use same as group key as default
+                threadPoolKey = groupKey;
             }
 
             // create setter using the default options
@@ -73,13 +88,11 @@ public class HystrixProcessorFactory implements ProcessorFactory {
             setter.andThreadPoolPropertiesDefaults(threadPool);
 
             // at first configure any shared options
-            if (cb.getHystrixConfigurationRef() != null) {
-                HystrixConfigurationDefinition config = CamelContextHelper.mandatoryLookup(routeContext.getCamelContext(), cb.getHystrixConfigurationRef(), HystrixConfigurationDefinition.class);
-                configureHystrix(command, threadPool, config);
+            if (configRef != null) {
+                configureHystrix(command, threadPool, configRef);
             }
             // then any local configured can override
-            if (cb.getHystrixConfiguration() != null) {
-                HystrixConfigurationDefinition config = cb.getHystrixConfiguration();
+            if (config != null) {
                 configureHystrix(command, threadPool, config);
             }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/62bbf9b2/components/camel-hystrix/src/test/java/org/apache/camel/component/hystrix/processor/HystrixRouteConfigTest.java
----------------------------------------------------------------------
diff --git a/components/camel-hystrix/src/test/java/org/apache/camel/component/hystrix/processor/HystrixRouteConfigTest.java b/components/camel-hystrix/src/test/java/org/apache/camel/component/hystrix/processor/HystrixRouteConfigTest.java
index 5faefb9..ebfa660 100644
--- a/components/camel-hystrix/src/test/java/org/apache/camel/component/hystrix/processor/HystrixRouteConfigTest.java
+++ b/components/camel-hystrix/src/test/java/org/apache/camel/component/hystrix/processor/HystrixRouteConfigTest.java
@@ -37,7 +37,7 @@ public class HystrixRouteConfigTest extends CamelTestSupport {
             @Override
             public void configure() throws Exception {
                 from("direct:start")
-                    .hystrix().configure().requestCacheEnabled(false).corePoolSize(5).end()
+                    .hystrix().configure().groupKey("myCamelApp").requestCacheEnabled(false).corePoolSize(5).end()
                         .to("direct:foo")
                     .fallback()
                         .transform().constant("Fallback message")

http://git-wip-us.apache.org/repos/asf/camel/blob/62bbf9b2/components/camel-hystrix/src/test/resources/org/apache/camel/component/hystrix/processor/SpringHystrixRouteConfigTest.xml
----------------------------------------------------------------------
diff --git a/components/camel-hystrix/src/test/resources/org/apache/camel/component/hystrix/processor/SpringHystrixRouteConfigTest.xml b/components/camel-hystrix/src/test/resources/org/apache/camel/component/hystrix/processor/SpringHystrixRouteConfigTest.xml
index e7e964a..40a8ccb 100644
--- a/components/camel-hystrix/src/test/resources/org/apache/camel/component/hystrix/processor/SpringHystrixRouteConfigTest.xml
+++ b/components/camel-hystrix/src/test/resources/org/apache/camel/component/hystrix/processor/SpringHystrixRouteConfigTest.xml
@@ -25,7 +25,7 @@
     <route>
       <from uri="direct:start"/>
       <hystrix>
-        <hystrixConfiguration requestCacheEnabled="false" corePoolSize="5"/>
+        <hystrixConfiguration groupKey="myCamelApp" requestCacheEnabled="false" corePoolSize="5"/>
         <to uri="direct:foo"/>
         <fallback>
           <transform>