Repository: camel
Updated Branches:
  refs/heads/kube-lb a20216c98 -> 7bc0a15ba


CAMEL-9683: Started on camel-ribbon


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

Branch: refs/heads/kube-lb
Commit: 7bc0a15baf090e7eefe70d6d21f1d117ea564805
Parents: a20216c
Author: Claus Ibsen <davscl...@apache.org>
Authored: Mon May 16 14:50:01 2016 +0200
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Mon May 16 15:04:39 2016 +0200

----------------------------------------------------------------------
 .../component/ribbon/RibbonConfiguration.java   | 10 ++++++++++
 .../processor/RibbonServiceCallProcessor.java   | 18 +++++++++++++++++-
 ...bbonServiceCallStaticServerListStrategy.java | 20 ++++++++++++++++++++
 .../SpringRibbonServiceCallRouteTest.xml        |  2 +-
 4 files changed, 48 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/7bc0a15b/components/camel-ribbon/src/main/java/org/apache/camel/component/ribbon/RibbonConfiguration.java
----------------------------------------------------------------------
diff --git 
a/components/camel-ribbon/src/main/java/org/apache/camel/component/ribbon/RibbonConfiguration.java
 
b/components/camel-ribbon/src/main/java/org/apache/camel/component/ribbon/RibbonConfiguration.java
index ead659e..21c1fe9 100644
--- 
a/components/camel-ribbon/src/main/java/org/apache/camel/component/ribbon/RibbonConfiguration.java
+++ 
b/components/camel-ribbon/src/main/java/org/apache/camel/component/ribbon/RibbonConfiguration.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.component.ribbon;
 
+import com.netflix.loadbalancer.IPing;
 import com.netflix.loadbalancer.IRule;
 
 public class RibbonConfiguration {
@@ -24,6 +25,7 @@ public class RibbonConfiguration {
     private String username;
     private String password;
     private IRule rule;
+    private IPing ping;
 
     public String getNamespace() {
         return namespace;
@@ -56,4 +58,12 @@ public class RibbonConfiguration {
     public void setRule(IRule rule) {
         this.rule = rule;
     }
+
+    public IPing getPing() {
+        return ping;
+    }
+
+    public void setPing(IPing ping) {
+        this.ping = ping;
+    }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/7bc0a15b/components/camel-ribbon/src/main/java/org/apache/camel/component/ribbon/processor/RibbonServiceCallProcessor.java
----------------------------------------------------------------------
diff --git 
a/components/camel-ribbon/src/main/java/org/apache/camel/component/ribbon/processor/RibbonServiceCallProcessor.java
 
b/components/camel-ribbon/src/main/java/org/apache/camel/component/ribbon/processor/RibbonServiceCallProcessor.java
index 290149a..ef97054 100644
--- 
a/components/camel-ribbon/src/main/java/org/apache/camel/component/ribbon/processor/RibbonServiceCallProcessor.java
+++ 
b/components/camel-ribbon/src/main/java/org/apache/camel/component/ribbon/processor/RibbonServiceCallProcessor.java
@@ -22,6 +22,7 @@ import java.util.concurrent.RejectedExecutionException;
 import com.netflix.client.config.IClientConfig;
 import com.netflix.client.config.IClientConfigKey;
 import com.netflix.loadbalancer.DummyPing;
+import com.netflix.loadbalancer.IPing;
 import com.netflix.loadbalancer.IRule;
 import com.netflix.loadbalancer.PollingServerListUpdater;
 import com.netflix.loadbalancer.RoundRobinRule;
@@ -67,6 +68,7 @@ public class RibbonServiceCallProcessor extends 
ServiceSupport implements AsyncP
     private ServiceCallServerListStrategy<RibbonServer> serverListStrategy;
     private ZoneAwareLoadBalancer<RibbonServer> ribbonLoadBalancer;
     private IRule rule;
+    private IPing ping;
     private final RibbonServiceCallExpression serviceCallExpression;
     private Map<String, String> ribbonClientConfig;
     private SendDynamicProcessor processor;
@@ -96,6 +98,8 @@ public class RibbonServiceCallProcessor extends 
ServiceSupport implements AsyncP
         this.uri = uri;
         this.exchangePattern = exchangePattern;
         this.configuration = configuration;
+        this.rule = configuration.getRule();
+        this.ping = configuration.getPing();
         this.serviceCallExpression = new 
RibbonServiceCallExpression(this.name, this.scheme, this.contextPath, this.uri);
     }
 
@@ -175,6 +179,14 @@ public class RibbonServiceCallProcessor extends 
ServiceSupport implements AsyncP
         this.rule = rule;
     }
 
+    public IPing getPing() {
+        return ping;
+    }
+
+    public void setPing(IPing ping) {
+        this.ping = ping;
+    }
+
     public Map<String, String> getRibbonClientConfig() {
         return ribbonClientConfig;
     }
@@ -200,6 +212,10 @@ public class RibbonServiceCallProcessor extends 
ServiceSupport implements AsyncP
             // use round robin rule by default
             rule = new RoundRobinRule();
         }
+        if (ping == null) {
+            // use dummy ping by default
+            ping = new DummyPing();
+        }
 
         // setup client config
         IClientConfig config = IClientConfig.Builder.newBuilder().build();
@@ -213,7 +229,7 @@ public class RibbonServiceCallProcessor extends 
ServiceSupport implements AsyncP
         }
 
         ServerListUpdater updater = new PollingServerListUpdater(config);
-        ribbonLoadBalancer = new ZoneAwareLoadBalancer<>(config, rule, new 
DummyPing(), (ServerList<RibbonServer>) serverListStrategy, null, updater);
+        ribbonLoadBalancer = new ZoneAwareLoadBalancer<>(config, rule, ping, 
(ServerList<RibbonServer>) serverListStrategy, null, updater);
 
         LOG.info("RibbonServiceCall at namespace: {} with service name: {} is 
using load balancer: {} and server list: {}", namespace, name, 
ribbonLoadBalancer, serverListStrategy);
 

http://git-wip-us.apache.org/repos/asf/camel/blob/7bc0a15b/components/camel-ribbon/src/main/java/org/apache/camel/component/ribbon/processor/RibbonServiceCallStaticServerListStrategy.java
----------------------------------------------------------------------
diff --git 
a/components/camel-ribbon/src/main/java/org/apache/camel/component/ribbon/processor/RibbonServiceCallStaticServerListStrategy.java
 
b/components/camel-ribbon/src/main/java/org/apache/camel/component/ribbon/processor/RibbonServiceCallStaticServerListStrategy.java
index a836900..3630ac4 100644
--- 
a/components/camel-ribbon/src/main/java/org/apache/camel/component/ribbon/processor/RibbonServiceCallStaticServerListStrategy.java
+++ 
b/components/camel-ribbon/src/main/java/org/apache/camel/component/ribbon/processor/RibbonServiceCallStaticServerListStrategy.java
@@ -25,11 +25,22 @@ import com.netflix.loadbalancer.ServerList;
 import org.apache.camel.spi.ServiceCallServerListStrategy;
 import org.apache.camel.util.ObjectHelper;
 
+/**
+ * A static list of known servers to be used by the Ribbon load balancer with 
the Camel Service Call EIP.
+ * <p/>
+ * You can implement custom implementations by existing this class and 
override the {@link #getUpdatedListOfServers()} that is called by Ribbon to 
refresh the known list
+ * of servers. For example to periodically query a remote server registry for 
a list of active servers.
+ */
 public class RibbonServiceCallStaticServerListStrategy extends 
AbstractServerList<RibbonServer> implements ServerList<RibbonServer>, 
ServiceCallServerListStrategy<RibbonServer> {
 
     private IClientConfig clientConfig;
     private final List<RibbonServer> servers = new ArrayList<>();
 
+    /**
+     * Build a {@link RibbonServiceCallStaticServerListStrategy} with the 
initial list of servers
+     *
+     * @param servers servers separated by comma in the format: 
host:port,host2:port,host3:port and so on.
+     */
     public static RibbonServiceCallStaticServerListStrategy build(String 
servers) {
         RibbonServiceCallStaticServerListStrategy answer = new 
RibbonServiceCallStaticServerListStrategy();
         String[] parts = servers.split(",");
@@ -49,14 +60,23 @@ public class RibbonServiceCallStaticServerListStrategy 
extends AbstractServerLis
         this.servers.addAll(servers);
     }
 
+    /**
+     * Add a server to the known list of servers.
+     */
     public void addServer(RibbonServer server) {
         servers.add(server);
     }
 
+    /**
+     * Add a server to the known list of servers.
+     */
     public void addServer(String host, int port) {
         servers.add(new RibbonServer(host, port));
     }
 
+    /**
+     * Remove an existing server from the list of known servers.
+     */
     public void removeServer(String host, int port) {
         servers.remove(new RibbonServer(host, port));
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/7bc0a15b/components/camel-ribbon/src/test/resources/org/apache/camel/component/ribbon/processor/SpringRibbonServiceCallRouteTest.xml
----------------------------------------------------------------------
diff --git 
a/components/camel-ribbon/src/test/resources/org/apache/camel/component/ribbon/processor/SpringRibbonServiceCallRouteTest.xml
 
b/components/camel-ribbon/src/test/resources/org/apache/camel/component/ribbon/processor/SpringRibbonServiceCallRouteTest.xml
index 487fa0c..a06a670 100644
--- 
a/components/camel-ribbon/src/test/resources/org/apache/camel/component/ribbon/processor/SpringRibbonServiceCallRouteTest.xml
+++ 
b/components/camel-ribbon/src/test/resources/org/apache/camel/component/ribbon/processor/SpringRibbonServiceCallRouteTest.xml
@@ -36,7 +36,7 @@
 
     <route>
       <from uri="direct:start"/>
-      <serviceCall name="myService" serviceCallConfigurationRef="myConfig"/>
+      <serviceCall name="myService"/>
       <to uri="mock:result"/>
     </route>
 

Reply via email to