All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.netflix.discovery.shared.resolver.LegacyClusterResolver Maven / Gradle / Ivy

There is a newer version: 0.40.13
Show newest version
/*
 * Copyright 2015 Netflix, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.netflix.discovery.shared.resolver;

import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;

import com.netflix.discovery.EurekaClientConfig;
import com.netflix.discovery.endpoint.EndpointUtils;
import com.netflix.discovery.shared.resolver.aws.AwsEndpoint;
import com.netflix.discovery.shared.resolver.aws.DnsTxtRecordClusterResolver;
import com.netflix.discovery.shared.resolver.aws.ZoneAffinityClusterResolver;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @deprecated as of 2016-02-11. Will be deleted in an upcoming release.
 * See {@link com.netflix.discovery.shared.resolver.aws.ConfigClusterResolver} for replacement.
 *
 * Server resolver that mimics the behavior of the original implementation. Either DNS or server
 * list resolvers are instantiated, and they can be swapped in runtime because of the dynamic configuration
 * change.
 * 

Failures

* If there is configuration change (from DNS to server list or reverse), and the new resolver cannot be instantiated, * it will be retried with exponential back-off (see {@link ReloadingClusterResolver}). * * @author Tomasz Bak */ @Deprecated public class LegacyClusterResolver implements ClusterResolver { private static final Logger logger = LoggerFactory.getLogger(LegacyClusterResolver.class); private final ClusterResolver delegate; public LegacyClusterResolver(EurekaClientConfig clientConfig, String myZone) { this.delegate = new ReloadingClusterResolver<>( new LegacyClusterResolverFactory(clientConfig, myZone), clientConfig.getEurekaServiceUrlPollIntervalSeconds() * 1000 ); } @Override public String getRegion() { return delegate.getRegion(); } @Override public List getClusterEndpoints() { return delegate.getClusterEndpoints(); } static class LegacyClusterResolverFactory implements ClusterResolverFactory { private final EurekaClientConfig clientConfig; private final String myRegion; private final String myZone; LegacyClusterResolverFactory(EurekaClientConfig clientConfig, String myZone) { this.clientConfig = clientConfig; this.myRegion = clientConfig.getRegion(); this.myZone = myZone; } @Override public ClusterResolver createClusterResolver() { ClusterResolver newResolver; if (clientConfig.shouldUseDnsForFetchingServiceUrls()) { String discoveryDnsName = "txt." + myRegion + '.' + clientConfig.getEurekaServerDNSName(); newResolver = new DnsTxtRecordClusterResolver( myRegion, discoveryDnsName, true, Integer.parseInt(clientConfig.getEurekaServerPort()), false, clientConfig.getEurekaServerURLContext() ); newResolver = new ZoneAffinityClusterResolver(newResolver, myZone, clientConfig.shouldPreferSameZoneEureka()); } else { // FIXME Not randomized in the EndpointUtils.getServiceUrlsFromConfig, and no zone info to do this here newResolver = new StaticClusterResolver<>(myRegion, createEurekaEndpointsFromConfig()); } return newResolver; } private List createEurekaEndpointsFromConfig() { List serviceUrls = EndpointUtils.getServiceUrlsFromConfig(clientConfig, myZone, clientConfig.shouldPreferSameZoneEureka()); List endpoints = new ArrayList<>(serviceUrls.size()); for (String serviceUrl : serviceUrls) { try { URI serviceURI = new URI(serviceUrl); endpoints.add(new AwsEndpoint( serviceURI.getHost(), serviceURI.getPort(), "https".equalsIgnoreCase(serviceURI.getSchemeSpecificPart()), serviceURI.getPath(), myRegion, myZone )); } catch (URISyntaxException ignore) { logger.warn("Invalid eureka server URI: {}; removing from the server pool", serviceUrl); } } return endpoints; } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy