1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package io.wcm.caravan.io.http.impl.ribbon;
21
22 import org.apache.felix.scr.annotations.Component;
23 import org.apache.felix.scr.annotations.Property;
24 import org.apache.felix.scr.annotations.Service;
25
26 import com.netflix.client.ClientFactory;
27 import com.netflix.client.config.CommonClientConfigKey;
28 import com.netflix.client.config.DefaultClientConfigImpl;
29 import com.netflix.client.config.IClientConfig;
30 import com.netflix.loadbalancer.ILoadBalancer;
31
32 import io.wcm.caravan.io.http.RequestInstantiationRuntimeException;
33
34
35
36
37 @Component
38 @Service(LoadBalancerFactory.class)
39 @Property(name = "type", value = LoadBalancerFactory.SIMPLE)
40 public class SimpleLoadBalancerFactory implements LoadBalancerFactory {
41
42 @Override
43 public ILoadBalancer getLoadBalancer(String serviceId) {
44
45 try {
46 IClientConfig clientConfig = ClientFactory.getNamedConfig(serviceId, DefaultClientConfigImpl.class);
47 String loadBalancerClassName = clientConfig.get(CommonClientConfigKey.NFLoadBalancerClassName);
48 return (ILoadBalancer)ClientFactory.instantiateInstanceWithClientConfig(loadBalancerClassName, clientConfig);
49 }
50 catch (NullPointerException | InstantiationException | IllegalAccessException | ClassNotFoundException ex) {
51 throw new RequestInstantiationRuntimeException("Can't create LoadBalancer for " + serviceId, ex);
52 }
53 }
54
55 }