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