diff --git a/dubbo-bootstrap/pom.xml b/dubbo-bootstrap/pom.xml index 7cac06182a6..ba6d8cfa2de 100644 --- a/dubbo-bootstrap/pom.xml +++ b/dubbo-bootstrap/pom.xml @@ -39,6 +39,12 @@ ${project.parent.version} test + + org.apache.dubbo + dubbo-registry-eureka + ${project.parent.version} + test + com.google.guava guava diff --git a/dubbo-bootstrap/src/test/java/org/apache/dubbo/bootstrap/DubboServiceConsumerBootstrap.java b/dubbo-bootstrap/src/test/java/org/apache/dubbo/bootstrap/DubboServiceConsumerBootstrap.java index 732ac6f7bdc..4b5fd4b5f1e 100644 --- a/dubbo-bootstrap/src/test/java/org/apache/dubbo/bootstrap/DubboServiceConsumerBootstrap.java +++ b/dubbo-bootstrap/src/test/java/org/apache/dubbo/bootstrap/DubboServiceConsumerBootstrap.java @@ -17,7 +17,6 @@ package org.apache.dubbo.bootstrap; import org.apache.dubbo.bootstrap.rest.UserService; -import org.apache.dubbo.config.MetadataReportConfig; import org.apache.dubbo.config.ReferenceConfig; import org.apache.dubbo.config.context.ConfigManager; @@ -33,12 +32,18 @@ public static void main(String[] args) throws Exception { new DubboBootstrap() .application("dubbo-consumer-demo") .protocol(builder -> builder.port(20887).name("dubbo")) + // Eureka + .registry(builder -> builder.address("eureka://127.0.0.1:8761?registry-type=service&subscribed-services=dubbo-provider-demo")) + // Zookeeper - .registry("zookeeper", builder -> builder.address("zookeeper://127.0.0.1:2181?registry.type=service&subscribed.services=dubbo-provider-demo")) - .metadataReport(new MetadataReportConfig("zookeeper://127.0.0.1:2181")) + // .registry("zookeeper", builder -> builder.address("zookeeper://127.0.0.1:2181?registry-type=service&subscribed-services=dubbo-provider-demo")) + // .metadataReport(new MetadataReportConfig("zookeeper://127.0.0.1:2181")) + // Nacos -// .registry("nacos", builder -> builder.address("nacos://127.0.0.1:8848?registry.type=service&subscribed.services=dubbo-provider-demo")) -// .registry("consul", builder -> builder.address("consul://127.0.0.1:8500?registry.type=service&subscribed.services=dubbo-provider-demo").group("namespace1")) + // .registry("nacos", builder -> builder.address("nacos://127.0.0.1:8848?registry.type=service&subscribed.services=dubbo-provider-demo")) + + // Consul + // .registry("consul", builder -> builder.address("consul://127.0.0.1:8500?registry.type=service&subscribed.services=dubbo-provider-demo").group("namespace1")) .reference("echo", builder -> builder.interfaceClass(EchoService.class).protocol("dubbo")) .reference("user", builder -> builder.interfaceClass(UserService.class).protocol("rest")) .start() diff --git a/dubbo-bootstrap/src/test/java/org/apache/dubbo/bootstrap/DubboServiceProviderBootstrap.java b/dubbo-bootstrap/src/test/java/org/apache/dubbo/bootstrap/DubboServiceProviderBootstrap.java index 15abaa5bab2..ba3ddd683de 100644 --- a/dubbo-bootstrap/src/test/java/org/apache/dubbo/bootstrap/DubboServiceProviderBootstrap.java +++ b/dubbo-bootstrap/src/test/java/org/apache/dubbo/bootstrap/DubboServiceProviderBootstrap.java @@ -49,7 +49,7 @@ private static void multipleRegistries() { RegistryConfig serviceRegistry = new RegistryConfig(); serviceRegistry.setId("serviceRegistry"); - serviceRegistry.setAddress("zookeeper://127.0.0.1:2181?registry.type=service"); + serviceRegistry.setAddress("zookeeper://127.0.0.1:2181?registry-type=service"); ServiceConfig echoService = new ServiceConfig<>(); echoService.setInterface(EchoService.class.getName()); diff --git a/dubbo-bootstrap/src/test/java/org/apache/dubbo/bootstrap/DubboServiceProviderMinimumBootstrap.java b/dubbo-bootstrap/src/test/java/org/apache/dubbo/bootstrap/DubboServiceProviderMinimumBootstrap.java index c0764e8f609..4e1958bb142 100644 --- a/dubbo-bootstrap/src/test/java/org/apache/dubbo/bootstrap/DubboServiceProviderMinimumBootstrap.java +++ b/dubbo-bootstrap/src/test/java/org/apache/dubbo/bootstrap/DubboServiceProviderMinimumBootstrap.java @@ -25,7 +25,7 @@ public static void main(String[] args) { new DubboBootstrap() .application("dubbo-provider-demo") // .registry(builder -> builder.address("zookeeper://127.0.0.1:2181?registry.type=service")) - .registry(builder -> builder.address("file://?registry.type=service")) + .registry(builder -> builder.address("eureka://127.0.0.1:8761?registry-type=service")) .protocol(builder -> builder.port(-1).name("dubbo")) .service(builder -> builder.interfaceClass(EchoService.class).ref(new EchoServiceImpl())) .start() diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/constants/RegistryConstants.java b/dubbo-common/src/main/java/org/apache/dubbo/common/constants/RegistryConstants.java index e7e604c7d1f..86523219317 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/constants/RegistryConstants.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/constants/RegistryConstants.java @@ -58,7 +58,7 @@ public interface RegistryConstants { * * @since 2.7.4 */ - String REGISTRY_TYPE_KEY = "registry.type"; + String REGISTRY_TYPE_KEY = "registry-type"; /** * The parameter value of Service-Oriented Registry type @@ -67,6 +67,11 @@ public interface RegistryConstants { */ String SERVICE_REGISTRY_TYPE = "service"; + /** + * The protocol for Service Discovery + * + * @since 2.7.4 + */ String SERVICE_REGISTRY_PROTOCOL = "service-discovery-registry"; /** @@ -74,7 +79,7 @@ public interface RegistryConstants { * * @since 2.7.4 */ - String SUBSCRIBED_SERVICE_NAMES_KEY = "subscribed.services"; + String SUBSCRIBED_SERVICE_NAMES_KEY = "subscribed-services"; /** diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/DefaultServiceInstance.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/DefaultServiceInstance.java index b9f5da7be98..608ee868029 100644 --- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/DefaultServiceInstance.java +++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/DefaultServiceInstance.java @@ -59,7 +59,7 @@ public DefaultServiceInstance(String id, String serviceName, String host, Intege } public DefaultServiceInstance(String serviceName, String host, Integer port) { - this(null, serviceName, host, port); + this(host + ":" + port, serviceName, host, port); } public void setId(String id) { diff --git a/dubbo-registry/dubbo-registry-eureka/src/main/java/org/apache/dubbo/registry/eureka/MutableEurekaInstanceConfig.java b/dubbo-registry/dubbo-registry-eureka/src/main/java/org/apache/dubbo/registry/eureka/ConfigurableEurekaInstanceConfig.java similarity index 67% rename from dubbo-registry/dubbo-registry-eureka/src/main/java/org/apache/dubbo/registry/eureka/MutableEurekaInstanceConfig.java rename to dubbo-registry/dubbo-registry-eureka/src/main/java/org/apache/dubbo/registry/eureka/ConfigurableEurekaInstanceConfig.java index 7cebd9087ed..8e0324d76c6 100644 --- a/dubbo-registry/dubbo-registry-eureka/src/main/java/org/apache/dubbo/registry/eureka/MutableEurekaInstanceConfig.java +++ b/dubbo-registry/dubbo-registry-eureka/src/main/java/org/apache/dubbo/registry/eureka/ConfigurableEurekaInstanceConfig.java @@ -25,9 +25,9 @@ import java.util.Map; /** - * Mutable {@link EurekaInstanceConfig} implementation + * Configurable {@link EurekaInstanceConfig} implementation */ -class MutableEurekaInstanceConfig implements EurekaInstanceConfig { +class ConfigurableEurekaInstanceConfig implements EurekaInstanceConfig { private String appname; @@ -90,8 +90,9 @@ public String getAppname() { return appname; } - public void setAppname(String appname) { + public ConfigurableEurekaInstanceConfig setAppname(String appname) { this.appname = appname; + return this; } @Override @@ -99,8 +100,9 @@ public String getAppGroupName() { return appGroupName; } - public void setAppGroupName(String appGroupName) { + public ConfigurableEurekaInstanceConfig setAppGroupName(String appGroupName) { this.appGroupName = appGroupName; + return this; } @Override @@ -108,8 +110,9 @@ public boolean isInstanceEnabledOnit() { return instanceEnabledOnit; } - public void setInstanceEnabledOnit(boolean instanceEnabledOnit) { + public ConfigurableEurekaInstanceConfig setInstanceEnabledOnit(boolean instanceEnabledOnit) { this.instanceEnabledOnit = instanceEnabledOnit; + return this; } @Override @@ -117,8 +120,9 @@ public int getNonSecurePort() { return nonSecurePort; } - public void setNonSecurePort(int nonSecurePort) { + public ConfigurableEurekaInstanceConfig setNonSecurePort(int nonSecurePort) { this.nonSecurePort = nonSecurePort; + return this; } @Override @@ -126,8 +130,9 @@ public int getSecurePort() { return securePort; } - public void setSecurePort(int securePort) { + public ConfigurableEurekaInstanceConfig setSecurePort(int securePort) { this.securePort = securePort; + return this; } @Override @@ -140,12 +145,14 @@ public boolean getSecurePortEnabled() { return securePortEnabled; } - public void setNonSecurePortEnabled(boolean nonSecurePortEnabled) { + public ConfigurableEurekaInstanceConfig setNonSecurePortEnabled(boolean nonSecurePortEnabled) { this.nonSecurePortEnabled = nonSecurePortEnabled; + return this; } - public void setSecurePortEnabled(boolean securePortEnabled) { + public ConfigurableEurekaInstanceConfig setSecurePortEnabled(boolean securePortEnabled) { this.securePortEnabled = securePortEnabled; + return this; } @Override @@ -153,8 +160,9 @@ public int getLeaseRenewalIntervalInSeconds() { return leaseRenewalIntervalInSeconds; } - public void setLeaseRenewalIntervalInSeconds(int leaseRenewalIntervalInSeconds) { + public ConfigurableEurekaInstanceConfig setLeaseRenewalIntervalInSeconds(int leaseRenewalIntervalInSeconds) { this.leaseRenewalIntervalInSeconds = leaseRenewalIntervalInSeconds; + return this; } @Override @@ -162,8 +170,9 @@ public int getLeaseExpirationDurationInSeconds() { return leaseExpirationDurationInSeconds; } - public void setLeaseExpirationDurationInSeconds(int leaseExpirationDurationInSeconds) { + public ConfigurableEurekaInstanceConfig setLeaseExpirationDurationInSeconds(int leaseExpirationDurationInSeconds) { this.leaseExpirationDurationInSeconds = leaseExpirationDurationInSeconds; + return this; } @Override @@ -171,8 +180,9 @@ public String getVirtualHostName() { return virtualHostName; } - public void setVirtualHostName(String virtualHostName) { + public ConfigurableEurekaInstanceConfig setVirtualHostName(String virtualHostName) { this.virtualHostName = virtualHostName; + return this; } @Override @@ -180,8 +190,9 @@ public String getInstanceId() { return instanceId; } - public void setInstanceId(String instanceId) { + public ConfigurableEurekaInstanceConfig setInstanceId(String instanceId) { this.instanceId = instanceId; + return this; } @Override @@ -199,12 +210,14 @@ public String getHostName(boolean refresh) { return null; } - public void setSecureVirtualHostName(String secureVirtualHostName) { + public ConfigurableEurekaInstanceConfig setSecureVirtualHostName(String secureVirtualHostName) { this.secureVirtualHostName = secureVirtualHostName; + return this; } - public void setASGName(String aSGName) { + public ConfigurableEurekaInstanceConfig setASGName(String aSGName) { this.aSGName = aSGName; + return this; } @Override @@ -212,8 +225,9 @@ public Map getMetadataMap() { return metadataMap; } - public void setMetadataMap(Map metadataMap) { + public ConfigurableEurekaInstanceConfig setMetadataMap(Map metadataMap) { this.metadataMap = metadataMap; + return this; } @Override @@ -221,8 +235,9 @@ public DataCenterInfo getDataCenterInfo() { return dataCenterInfo; } - public void setDataCenterInfo(DataCenterInfo dataCenterInfo) { + public ConfigurableEurekaInstanceConfig setDataCenterInfo(DataCenterInfo dataCenterInfo) { this.dataCenterInfo = dataCenterInfo; + return this; } @Override @@ -230,8 +245,9 @@ public String getIpAddress() { return ipAddress; } - public void setIpAddress(String ipAddress) { + public ConfigurableEurekaInstanceConfig setIpAddress(String ipAddress) { this.ipAddress = ipAddress; + return this; } @Override @@ -239,8 +255,9 @@ public String getStatusPageUrlPath() { return statusPageUrlPath; } - public void setStatusPageUrlPath(String statusPageUrlPath) { + public ConfigurableEurekaInstanceConfig setStatusPageUrlPath(String statusPageUrlPath) { this.statusPageUrlPath = statusPageUrlPath; + return this; } @Override @@ -248,8 +265,9 @@ public String getStatusPageUrl() { return statusPageUrl; } - public void setStatusPageUrl(String statusPageUrl) { + public ConfigurableEurekaInstanceConfig setStatusPageUrl(String statusPageUrl) { this.statusPageUrl = statusPageUrl; + return this; } @Override @@ -257,8 +275,9 @@ public String getHomePageUrlPath() { return homePageUrlPath; } - public void setHomePageUrlPath(String homePageUrlPath) { + public ConfigurableEurekaInstanceConfig setHomePageUrlPath(String homePageUrlPath) { this.homePageUrlPath = homePageUrlPath; + return this; } @Override @@ -266,8 +285,9 @@ public String getHomePageUrl() { return homePageUrl; } - public void setHomePageUrl(String homePageUrl) { + public ConfigurableEurekaInstanceConfig setHomePageUrl(String homePageUrl) { this.homePageUrl = homePageUrl; + return this; } @Override @@ -275,8 +295,9 @@ public String getHealthCheckUrlPath() { return healthCheckUrlPath; } - public void setHealthCheckUrlPath(String healthCheckUrlPath) { + public ConfigurableEurekaInstanceConfig setHealthCheckUrlPath(String healthCheckUrlPath) { this.healthCheckUrlPath = healthCheckUrlPath; + return this; } @Override @@ -284,8 +305,9 @@ public String getHealthCheckUrl() { return healthCheckUrl; } - public void setHealthCheckUrl(String healthCheckUrl) { + public ConfigurableEurekaInstanceConfig setHealthCheckUrl(String healthCheckUrl) { this.healthCheckUrl = healthCheckUrl; + return this; } @Override @@ -293,8 +315,9 @@ public String getSecureHealthCheckUrl() { return secureHealthCheckUrl; } - public void setSecureHealthCheckUrl(String secureHealthCheckUrl) { + public ConfigurableEurekaInstanceConfig setSecureHealthCheckUrl(String secureHealthCheckUrl) { this.secureHealthCheckUrl = secureHealthCheckUrl; + return this; } @Override @@ -302,32 +325,36 @@ public String getNamespace() { return namespace; } - public void setNamespace(String namespace) { + public ConfigurableEurekaInstanceConfig setNamespace(String namespace) { this.namespace = namespace; + return this; } public String getHostname() { return hostname; } - public void setHostname(String hostname) { + public ConfigurableEurekaInstanceConfig setHostname(String hostname) { this.hostname = hostname; + return this; } public boolean isPreferIpAddress() { return preferIpAddress; } - public void setPreferIpAddress(boolean preferIpAddress) { + public ConfigurableEurekaInstanceConfig setPreferIpAddress(boolean preferIpAddress) { this.preferIpAddress = preferIpAddress; + return this; } public InstanceInfo.InstanceStatus getInitialStatus() { return initialStatus; } - public void setInitialStatus(InstanceInfo.InstanceStatus initialStatus) { + public ConfigurableEurekaInstanceConfig setInitialStatus(InstanceInfo.InstanceStatus initialStatus) { this.initialStatus = initialStatus; + return this; } @Override @@ -335,7 +362,8 @@ public String[] getDefaultAddressResolutionOrder() { return defaultAddressResolutionOrder; } - public void setDefaultAddressResolutionOrder(String[] defaultAddressResolutionOrder) { + public ConfigurableEurekaInstanceConfig setDefaultAddressResolutionOrder(String[] defaultAddressResolutionOrder) { this.defaultAddressResolutionOrder = defaultAddressResolutionOrder; + return this; } } diff --git a/dubbo-registry/dubbo-registry-eureka/src/main/java/org/apache/dubbo/registry/eureka/EurekaServiceDiscovery.java b/dubbo-registry/dubbo-registry-eureka/src/main/java/org/apache/dubbo/registry/eureka/EurekaServiceDiscovery.java index 4ffc423d57d..ea482e4b558 100644 --- a/dubbo-registry/dubbo-registry-eureka/src/main/java/org/apache/dubbo/registry/eureka/EurekaServiceDiscovery.java +++ b/dubbo-registry/dubbo-registry-eureka/src/main/java/org/apache/dubbo/registry/eureka/EurekaServiceDiscovery.java @@ -17,7 +17,6 @@ package org.apache.dubbo.registry.eureka; import org.apache.dubbo.common.URL; -import org.apache.dubbo.common.utils.StringUtils; import org.apache.dubbo.registry.client.DefaultServiceInstance; import org.apache.dubbo.registry.client.ServiceDiscovery; import org.apache.dubbo.registry.client.ServiceInstance; @@ -25,7 +24,6 @@ import com.netflix.appinfo.ApplicationInfoManager; import com.netflix.appinfo.EurekaInstanceConfig; import com.netflix.appinfo.InstanceInfo; -import com.netflix.appinfo.MyDataCenterInstanceConfig; import com.netflix.config.ConfigurationManager; import com.netflix.discovery.DefaultEurekaClientConfig; import com.netflix.discovery.DiscoveryClient; @@ -42,37 +40,21 @@ import java.util.Properties; import java.util.Set; +import static java.util.Collections.emptyList; + /** * Eureka {@link ServiceDiscovery} implementation based on Eureka API */ public class EurekaServiceDiscovery implements ServiceDiscovery { - /** - * The namespace for {@link EurekaInstanceConfig} is compatible with Spring Cloud - */ - public static final String EUREKA_INSTANCE_NAMESPACE = "eureka.instance."; - - /** - * The namespace for {@link EurekaClient} is compatible with Spring Cloud - */ - public static final String EUREKA_CLIENT_NAMESPACE = "eureka.client."; - - private EurekaInstanceConfig eurekaInstanceConfig; - private ApplicationInfoManager applicationInfoManager; - private EurekaClientConfig eurekaClientConfig; - private EurekaClient eurekaClient; @Override public void initialize(URL registryURL) throws Exception { Properties eurekaConfigProperties = buildEurekaConfigProperties(registryURL); initConfigurationManager(eurekaConfigProperties); - initEurekaInstanceConfig(); - initApplicationInfoManager(); - initEurekaClientConfig(); - initEurekaClient(); } /** @@ -89,15 +71,19 @@ private Properties buildEurekaConfigProperties(URL registryURL) { parameters.entrySet().stream() .filter(this::filterEurekaProperty) .forEach(propertyEntry -> { - String rawPropertyName = propertyEntry.getKey(); - String propertyValue = propertyEntry.getValue(); - properties.setProperty(normalizePropertyName(rawPropertyName), propertyValue); + properties.setProperty(propertyEntry.getKey(), propertyEntry.getValue()); }); return properties; } + private boolean filterEurekaProperty(Map.Entry propertyEntry) { + String propertyName = propertyEntry.getKey(); + return propertyName.startsWith("eureka."); + } + private void setDefaultProperties(URL registryURL, Properties properties) { setDefaultServiceURL(registryURL, properties); + setDefaultInitialInstanceInfoReplicationIntervalSeconds(properties); } private void setDefaultServiceURL(URL registryURL, Properties properties) { @@ -105,19 +91,18 @@ private void setDefaultServiceURL(URL registryURL, Properties properties) { .append(registryURL.getHost()) .append(":") .append(registryURL.getPort()) - .append("/") - .append(registryURL.getPath()); - properties.setProperty(EUREKA_CLIENT_NAMESPACE + "serviceUrl.default", defaultServiceURLBuilder.toString()); - } - - private boolean filterEurekaProperty(Map.Entry propertyEntry) { - String propertyName = propertyEntry.getKey(); - return propertyName.startsWith(EUREKA_INSTANCE_NAMESPACE) || - propertyName.startsWith(EUREKA_CLIENT_NAMESPACE); + .append("/eureka"); + properties.setProperty("eureka.serviceUrl.default", defaultServiceURLBuilder.toString()); } - private String normalizePropertyName(String rawPropertyName) { - return StringUtils.replace(rawPropertyName, "-", "."); + /** + * Set the default property for {@link EurekaClientConfig#getInitialInstanceInfoReplicationIntervalSeconds()} + * which means do register immediately + * + * @param properties {@link Properties} + */ + private void setDefaultInitialInstanceInfoReplicationIntervalSeconds(Properties properties) { + properties.setProperty("eureka.appinfo.initial.replicate.time", "0"); } /** @@ -129,55 +114,53 @@ private void initConfigurationManager(Properties eurekaConfigProperties) { ConfigurationManager.loadProperties(eurekaConfigProperties); } - /** - * Initialize {@link #eurekaInstanceConfig} property - */ - private void initEurekaInstanceConfig() { - this.eurekaInstanceConfig = new MyDataCenterInstanceConfig(EUREKA_INSTANCE_NAMESPACE); - } - - /** - * Initialize {@link #applicationInfoManager} property - */ - private void initApplicationInfoManager() { + private void initApplicationInfoManager(ServiceInstance serviceInstance) { + EurekaInstanceConfig eurekaInstanceConfig = buildEurekaInstanceConfig(serviceInstance); this.applicationInfoManager = new ApplicationInfoManager(eurekaInstanceConfig, (ApplicationInfoManager.OptionalArgs) null); } /** * Initialize {@link #eurekaClient} property + * + * @param serviceInstance {@link ServiceInstance} */ - private void initEurekaClientConfig() { - this.eurekaClientConfig = new DefaultEurekaClientConfig(EUREKA_CLIENT_NAMESPACE); - } - - /** - * Initialize {@link #eurekaClient} property - */ - private void initEurekaClient() { + private void initEurekaClient(ServiceInstance serviceInstance) { + if (eurekaClient != null) { + return; + } + initApplicationInfoManager(serviceInstance); + EurekaClientConfig eurekaClientConfig = new DefaultEurekaClientConfig(); this.eurekaClient = new DiscoveryClient(applicationInfoManager, eurekaClientConfig); } @Override public void destroy() throws Exception { - this.eurekaInstanceConfig = null; - this.applicationInfoManager = null; - this.eurekaClientConfig = null; - this.eurekaClient = null; + if (eurekaClient != null) { + this.eurekaClient.shutdown(); + } } @Override public void register(ServiceInstance serviceInstance) throws RuntimeException { - EurekaInstanceConfig eurekaInstanceConfig = buildEurekaInstanceConfig(serviceInstance); + initEurekaClient(serviceInstance); + setInstanceStatus(InstanceInfo.InstanceStatus.UP); + } + + private void setInstanceStatus(InstanceInfo.InstanceStatus status) { + if (applicationInfoManager != null) { + this.applicationInfoManager.setInstanceStatus(status); + } } @Override public void update(ServiceInstance serviceInstance) throws RuntimeException { - + setInstanceStatus(serviceInstance.isHealthy() ? InstanceInfo.InstanceStatus.UP : + InstanceInfo.InstanceStatus.UNKNOWN); } @Override public void unregister(ServiceInstance serviceInstance) throws RuntimeException { - + setInstanceStatus(InstanceInfo.InstanceStatus.UP); } @Override @@ -199,7 +182,13 @@ public Set getServices() { @Override public List getInstances(String serviceName) throws NullPointerException { - List infos = this.eurekaClient.getInstancesByVipAddress(serviceName, false); + Application application = this.eurekaClient.getApplication(serviceName); + + if (application == null) { + return emptyList(); + } + + List infos = application.getInstances(); List instances = new ArrayList<>(); for (InstanceInfo info : infos) { instances.add(buildServiceInstance(info)); @@ -216,13 +205,12 @@ private ServiceInstance buildServiceInstance(InstanceInfo instance) { } private EurekaInstanceConfig buildEurekaInstanceConfig(ServiceInstance serviceInstance) { - MutableEurekaInstanceConfig eurekaInstanceConfig = new MutableEurekaInstanceConfig(); - eurekaInstanceConfig.setInstanceId(serviceInstance.getId()); - eurekaInstanceConfig.setAppname(serviceInstance.getServiceName()); - eurekaInstanceConfig.setIpAddress(serviceInstance.getHost()); - eurekaInstanceConfig.setNonSecurePort(serviceInstance.getPort()); - eurekaInstanceConfig.setInitialStatus(serviceInstance.isHealthy() ? InstanceInfo.InstanceStatus.UP : - InstanceInfo.InstanceStatus.UNKNOWN); + ConfigurableEurekaInstanceConfig eurekaInstanceConfig = new ConfigurableEurekaInstanceConfig() + .setInstanceId(serviceInstance.getId()) + .setAppname(serviceInstance.getServiceName()) + .setIpAddress(serviceInstance.getHost()) + .setNonSecurePort(serviceInstance.getPort()) + .setMetadataMap(serviceInstance.getMetadata()); return eurekaInstanceConfig; } } diff --git a/dubbo-registry/dubbo-registry-eureka/src/main/java/org/apache/dubbo/registry/eureka/EurekaServiceInstanceBuilder.java b/dubbo-registry/dubbo-registry-eureka/src/main/java/org/apache/dubbo/registry/eureka/EurekaServiceInstanceBuilder.java deleted file mode 100644 index ada55814090..00000000000 --- a/dubbo-registry/dubbo-registry-eureka/src/main/java/org/apache/dubbo/registry/eureka/EurekaServiceInstanceBuilder.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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 org.apache.dubbo.registry.eureka; - -import org.apache.dubbo.registry.client.DefaultServiceInstance; -import org.apache.dubbo.registry.client.ServiceInstance; - -import com.netflix.appinfo.InstanceInfo; - -/** - * The Eureka {@link ServiceInstance} Builder - * - * @since 2.7.4 - */ -public class EurekaServiceInstanceBuilder { - - public ServiceInstance build(InstanceInfo instance) { - DefaultServiceInstance serviceInstance = new DefaultServiceInstance(instance.getId(), instance.getAppName(), - instance.getHostName(), - instance.isPortEnabled(InstanceInfo.PortType.SECURE) ? instance.getSecurePort() : instance.getPort()); - serviceInstance.setMetadata(instance.getMetadata()); - return serviceInstance; - } - - -} diff --git a/dubbo-registry/dubbo-registry-eureka/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.registry.client.ServiceDiscovery b/dubbo-registry/dubbo-registry-eureka/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.registry.client.ServiceDiscovery new file mode 100644 index 00000000000..51be37ccc1f --- /dev/null +++ b/dubbo-registry/dubbo-registry-eureka/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.registry.client.ServiceDiscovery @@ -0,0 +1 @@ +eureka=org.apache.dubbo.registry.eureka.EurekaServiceDiscovery \ No newline at end of file diff --git a/dubbo-registry/dubbo-registry-eureka/src/test/java/org/apache/dubbo/registry/eureka/EurekaServiceDiscoveryTest.java b/dubbo-registry/dubbo-registry-eureka/src/test/java/org/apache/dubbo/registry/eureka/EurekaServiceDiscoveryTest.java index 7e4f802f664..80230f28e9d 100644 --- a/dubbo-registry/dubbo-registry-eureka/src/test/java/org/apache/dubbo/registry/eureka/EurekaServiceDiscoveryTest.java +++ b/dubbo-registry/dubbo-registry-eureka/src/test/java/org/apache/dubbo/registry/eureka/EurekaServiceDiscoveryTest.java @@ -17,6 +17,8 @@ package org.apache.dubbo.registry.eureka; import org.apache.dubbo.common.URL; +import org.apache.dubbo.registry.client.DefaultServiceInstance; +import org.apache.dubbo.registry.client.ServiceInstance; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; @@ -33,12 +35,16 @@ public class EurekaServiceDiscoveryTest { private EurekaServiceDiscovery serviceDiscovery; + private ServiceInstance serviceInstance; + private URL registryURL = URL.valueOf("eureka://127.0.0.1:8761/eureka"); @BeforeEach public void init() throws Exception { serviceDiscovery = new EurekaServiceDiscovery(); serviceDiscovery.initialize(registryURL); + serviceInstance = new DefaultServiceInstance("test", "127.0.0.1", 8080); + serviceDiscovery.register(serviceInstance); } @AfterEach