private RoundRobinLoadBalancerFactory() { provider = checkNotNull( LoadBalancerRegistry.getDefaultRegistry().getProvider("round_robin"), "round_robin balancer not available"); }
/** * Register a provider. * * <p>If the provider's {@link LoadBalancerProvider#isAvailable isAvailable()} returns * {@code false}, this method will throw {@link IllegalArgumentException}. * * <p>If more than one provider with the same {@link LoadBalancerProvider#getPolicyName policy * name} are registered, the one with the highest {@link LoadBalancerProvider#getPriority * priority} will be effective. If there are more than one name-sake providers rank the highest * priority, the one registered first will be effective. */ public synchronized void register(LoadBalancerProvider provider) { addProvider(provider); refreshProviderMap(); }
AutoConfiguredLoadBalancer(Helper helper) { this.helper = helper; delegateProvider = registry.getProvider(defaultPolicy); if (delegateProvider == null) { throw new IllegalStateException("Could not find policy '" + defaultPolicy + "'. Make sure its implementation is either registered to LoadBalancerRegistry or" + " included in META-INF/services/io.grpc.LoadBalancerProvider from your jar files."); } delegate = delegateProvider.newLoadBalancer(helper); }
public AutoConfiguredLoadBalancerFactory(String defaultPolicy) { this(LoadBalancerRegistry.getDefaultRegistry(), defaultPolicy); }
/** * Returns the default registry that loads providers via the Java service loader mechanism. */ public static synchronized LoadBalancerRegistry getDefaultRegistry() { if (instance == null) { List<LoadBalancerProvider> providerList = ServiceProviders.loadAll( LoadBalancerProvider.class, HARDCODED_CLASSES, LoadBalancerProvider.class.getClassLoader(), new LoadBalancerPriorityAccessor()); instance = new LoadBalancerRegistry(); for (LoadBalancerProvider provider : providerList) { logger.fine("Service loader found " + provider); if (provider.isAvailable()) { instance.addProvider(provider); } } instance.refreshProviderMap(); } return instance; }
/** * Deregisters a provider. No-op if the provider is not in the registry. If there are more * than one providers with the same policy name as the deregistered one in the registry, one * of them will become the effective provider for that policy, per the rule documented in {@link * #register}. * * @param provider the provider that was added to the register via {@link #register}. */ public synchronized void deregister(LoadBalancerProvider provider) { allProviders.remove(provider); refreshProviderMap(); }
private LoadBalancerProvider getProviderOrThrow(String policy, String choiceReason) throws PolicyException { LoadBalancerProvider provider = registry.getProvider(policy); if (provider == null) { throw new PolicyException( "Trying to load '" + policy + "' because " + choiceReason + ", but it's unavailable"); } return provider; }
private PickFirstBalancerFactory() { provider = checkNotNull( LoadBalancerRegistry.getDefaultRegistry().getProvider("pick_first"), "pick_first balancer not available"); }
LoadBalancerProvider grpclbProvider = registry.getProvider("grpclb"); if (grpclbProvider == null) { if (backendAddrs.isEmpty()) { LoadBalancerProvider provider = registry.getProvider(policy); if (provider != null) { if (!policiesTried.isEmpty()) {
private GrpclbLoadBalancerFactory() { provider = checkNotNull( LoadBalancerRegistry.getDefaultRegistry().getProvider("grpclb"), "grpclb balancer not available"); }
.forTarget(connectString) .nameResolverFactory(new ControllerResolverFactory()) .loadBalancerFactory(LoadBalancerRegistry.getDefaultRegistry().getProvider("round_robin")) .usePlaintext() .build());
/** * Creates a new instance of the Controller client class. * * @param config The configuration for this client implementation. * @param executor The executor service to be used for handling retries. */ public ControllerImpl(final ControllerImplConfig config, final ScheduledExecutorService executor) { this(NettyChannelBuilder.forTarget(config.getClientConfig().getControllerURI().toString()) .nameResolverFactory(new ControllerResolverFactory()) .loadBalancerFactory(LoadBalancerRegistry.getDefaultRegistry().getProvider("round_robin")) .keepAliveTime(DEFAULT_KEEPALIVE_TIME_MINUTES, TimeUnit.MINUTES), config, executor); log.info("Controller client connecting to server at {}", config.getClientConfig().getControllerURI().getAuthority()); }