private ZoneAwareLoadBalancer<RibbonServiceDefinition> createLoadBalancer(String serviceName) {
IClientConfig config = configuration.getClientName() != null
? IClientConfig.Builder.newBuilder(configuration.getClientName()).build()
: IClientConfig.Builder.newBuilder().build();
if (configuration.getProperties() != null) {
for (Map.Entry<String, String> entry : configuration.getProperties().entrySet()) {
IClientConfigKey key = CommonClientConfigKey.valueOf(entry.getKey());
String value = entry.getValue();
LOGGER.debug("RibbonClientConfig: {}={}", key.key(), value);
config.set(key, value);
}
}
ZoneAwareLoadBalancer<RibbonServiceDefinition> loadBalancer;
if (serviceDiscovery != null) {
loadBalancer = new ZoneAwareLoadBalancer<>(
config,
configuration.getRuleOrDefault(RoundRobinRule::new),
configuration.getPingOrDefault(DummyPing::new),
new RibbonServerList(serviceName, serviceDiscovery, serviceFilter),
null,
new PollingServerListUpdater(config));
} else {
loadBalancer = new ZoneAwareLoadBalancer<>(config);
}
return loadBalancer;
}