[3.0] unify register mode options with one single property (#7594)
This commit is contained in:
parent
303a5aff45
commit
0a5a709c68
|
|
@ -65,9 +65,19 @@ public interface RegistryConstants {
|
|||
|
||||
String REGISTRY_PUBLISH_INSTANCE_KEY = "publish-instance";
|
||||
|
||||
String REGISTER_MODE_KEY = "register-mode";
|
||||
|
||||
String DUBBO_REGISTER_MODE_DEFAULT_KEY = "dubbo.application.register-mode";
|
||||
|
||||
String DUBBO_PUBLISH_INTERFACE_DEFAULT_KEY = "dubbo.application.publish-interface";
|
||||
|
||||
String DUBBO_PUBLISH_INSTANCE_DEFAULT_KEY = "dubbo.application.publish-instance";
|
||||
|
||||
String DEFAULT_REGISTER_MODE_INTERFACE = "interface";
|
||||
|
||||
String DEFAULT_REGISTER_MODE_INSTANCE = "instance";
|
||||
|
||||
String DEFAULT_REGISTER_MODE_ALL = "all";
|
||||
/**
|
||||
* The parameter key of Dubbo Registry type
|
||||
*
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ public class GroupServiceKeyCache {
|
|||
}
|
||||
|
||||
buf.append(serviceName);
|
||||
if (StringUtils.isNotEmpty(serviceVersion) && !"0.0.0".equals(serviceVersion)) {
|
||||
if (StringUtils.isNotEmpty(serviceVersion) && !"0.0.0".equals(serviceVersion) && !"*".equals(serviceVersion)) {
|
||||
buf.append(':').append(serviceVersion);
|
||||
}
|
||||
buf.append(':').append(port);
|
||||
|
|
|
|||
|
|
@ -87,12 +87,13 @@ import static org.apache.dubbo.common.constants.CommonConstants.SHUTDOWN_WAIT_SE
|
|||
import static org.apache.dubbo.common.constants.CommonConstants.THREADPOOL_KEY;
|
||||
import static org.apache.dubbo.common.constants.CommonConstants.USERNAME_KEY;
|
||||
import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;
|
||||
import static org.apache.dubbo.common.constants.RegistryConstants.DUBBO_PUBLISH_INSTANCE_DEFAULT_KEY;
|
||||
import static org.apache.dubbo.common.constants.RegistryConstants.DUBBO_PUBLISH_INTERFACE_DEFAULT_KEY;
|
||||
import static org.apache.dubbo.common.constants.RegistryConstants.DEFAULT_REGISTER_MODE_ALL;
|
||||
import static org.apache.dubbo.common.constants.RegistryConstants.DEFAULT_REGISTER_MODE_INSTANCE;
|
||||
import static org.apache.dubbo.common.constants.RegistryConstants.DEFAULT_REGISTER_MODE_INTERFACE;
|
||||
import static org.apache.dubbo.common.constants.RegistryConstants.DUBBO_REGISTER_MODE_DEFAULT_KEY;
|
||||
import static org.apache.dubbo.common.constants.RegistryConstants.REGISTER_MODE_KEY;
|
||||
import static org.apache.dubbo.common.constants.RegistryConstants.REGISTRY_KEY;
|
||||
import static org.apache.dubbo.common.constants.RegistryConstants.REGISTRY_PROTOCOL;
|
||||
import static org.apache.dubbo.common.constants.RegistryConstants.REGISTRY_PUBLISH_INSTANCE_KEY;
|
||||
import static org.apache.dubbo.common.constants.RegistryConstants.REGISTRY_PUBLISH_INTERFACE_KEY;
|
||||
import static org.apache.dubbo.common.constants.RegistryConstants.REGISTRY_TYPE_KEY;
|
||||
import static org.apache.dubbo.common.constants.RegistryConstants.SERVICE_REGISTRY_PROTOCOL;
|
||||
import static org.apache.dubbo.common.constants.RemotingConstants.BACKUP_KEY;
|
||||
|
|
@ -214,11 +215,15 @@ public class ConfigValidationUtils {
|
|||
List<URL> result = new ArrayList<>(registryList.size());
|
||||
registryList.forEach(registryURL -> {
|
||||
if (provider) {
|
||||
boolean publishInterface = registryURL.getParameter(REGISTRY_PUBLISH_INTERFACE_KEY, ConfigurationUtils.getDynamicGlobalConfiguration().getBoolean(DUBBO_PUBLISH_INTERFACE_DEFAULT_KEY, true));
|
||||
// for registries enabled service discovery, automatically register interface compatible addresses.
|
||||
if (SERVICE_REGISTRY_PROTOCOL.equals(registryURL.getProtocol())) {
|
||||
String registerMode = registryURL.getParameter(REGISTER_MODE_KEY, ConfigurationUtils.getDynamicGlobalConfiguration().getString(DUBBO_REGISTER_MODE_DEFAULT_KEY, DEFAULT_REGISTER_MODE_INSTANCE));
|
||||
if (!isValidRegisterMode(registerMode)) {
|
||||
registerMode = DEFAULT_REGISTER_MODE_INSTANCE;
|
||||
}
|
||||
result.add(registryURL);
|
||||
if (publishInterface && registryNotExists(registryURL, registryList, REGISTRY_PROTOCOL)) {
|
||||
if (DEFAULT_REGISTER_MODE_ALL.equalsIgnoreCase(registerMode)
|
||||
&& registryNotExists(registryURL, registryList, REGISTRY_PROTOCOL)) {
|
||||
URL interfaceCompatibleRegistryURL = URLBuilder.from(registryURL)
|
||||
.setProtocol(REGISTRY_PROTOCOL)
|
||||
.removeParameter(REGISTRY_TYPE_KEY)
|
||||
|
|
@ -226,16 +231,20 @@ public class ConfigValidationUtils {
|
|||
result.add(interfaceCompatibleRegistryURL);
|
||||
}
|
||||
} else {
|
||||
boolean publishInstance = registryURL.getParameter(REGISTRY_PUBLISH_INSTANCE_KEY, ConfigurationUtils.getDynamicGlobalConfiguration().getBoolean(DUBBO_PUBLISH_INSTANCE_DEFAULT_KEY, true));
|
||||
if (registryNotExists(registryURL, registryList, SERVICE_REGISTRY_PROTOCOL)
|
||||
&& publishInstance) {
|
||||
String registerMode = registryURL.getParameter(REGISTER_MODE_KEY, ConfigurationUtils.getDynamicGlobalConfiguration().getString(DUBBO_REGISTER_MODE_DEFAULT_KEY, DEFAULT_REGISTER_MODE_INTERFACE));
|
||||
if (!isValidRegisterMode(registerMode)) {
|
||||
registerMode = DEFAULT_REGISTER_MODE_INTERFACE;
|
||||
}
|
||||
if ((DEFAULT_REGISTER_MODE_INSTANCE.equalsIgnoreCase(registerMode) || DEFAULT_REGISTER_MODE_ALL.equalsIgnoreCase(registerMode))
|
||||
&& registryNotExists(registryURL, registryList, SERVICE_REGISTRY_PROTOCOL)) {
|
||||
URL serviceDiscoveryRegistryURL = URLBuilder.from(registryURL)
|
||||
.setProtocol(SERVICE_REGISTRY_PROTOCOL)
|
||||
.removeParameter(REGISTRY_TYPE_KEY)
|
||||
.build();
|
||||
result.add(serviceDiscoveryRegistryURL);
|
||||
}
|
||||
if (publishInterface) {
|
||||
|
||||
if (DEFAULT_REGISTER_MODE_INTERFACE.equalsIgnoreCase(registerMode) || DEFAULT_REGISTER_MODE_ALL.equalsIgnoreCase(registerMode)) {
|
||||
result.add(registryURL);
|
||||
}
|
||||
}
|
||||
|
|
@ -246,6 +255,14 @@ public class ConfigValidationUtils {
|
|||
return result;
|
||||
}
|
||||
|
||||
private static boolean isValidRegisterMode(String mode) {
|
||||
return StringUtils.isNotEmpty(mode)
|
||||
&& (DEFAULT_REGISTER_MODE_INTERFACE.equalsIgnoreCase(mode)
|
||||
|| DEFAULT_REGISTER_MODE_INSTANCE.equalsIgnoreCase(mode)
|
||||
|| DEFAULT_REGISTER_MODE_ALL.equalsIgnoreCase(mode)
|
||||
);
|
||||
}
|
||||
|
||||
private static boolean registryNotExists(URL registryURL, List<URL> registryList, String registryType) {
|
||||
return registryList.stream().noneMatch(
|
||||
url -> registryType.equals(url.getProtocol()) && registryURL.getBackupAddress().equals(url.getBackupAddress())
|
||||
|
|
|
|||
|
|
@ -262,14 +262,9 @@ public class ServiceInstancesChangedListener implements ConditionalEventListener
|
|||
protected MetadataInfo getRemoteMetadata(ServiceInstance instance, String revision, Map<ServiceInfo, Set<String>> localServiceToRevisions, List<ServiceInstance> subInstances) {
|
||||
MetadataInfo metadata = revisionToMetadata.get(revision);
|
||||
|
||||
if (metadata != null && metadata != MetadataInfo.EMPTY) {
|
||||
logger.info("MetadataInfo for instance " + instance.getAddress() + "?revision=" + revision + "&cluster=" + instance.getRegistryCluster() + ", " + metadata);
|
||||
}
|
||||
|
||||
if (metadata == null
|
||||
|| (metadata == MetadataInfo.EMPTY && (failureCounter.get() < 3 || (System.currentTimeMillis() - lastFailureTime > 10000)))) {
|
||||
metadata = getMetadataInfo(instance);
|
||||
|
||||
if (metadata != MetadataInfo.EMPTY) {
|
||||
failureCounter.set(0);
|
||||
revisionToMetadata.putIfAbsent(revision, metadata);
|
||||
|
|
|
|||
Loading…
Reference in New Issue