| /* |
| * 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.config; |
| |
| import org.apache.dubbo.common.URL; |
| import org.apache.dubbo.common.utils.CollectionUtils; |
| import org.apache.dubbo.common.utils.StringUtils; |
| import org.apache.dubbo.config.support.Parameter; |
| |
| import java.util.Map; |
| |
| import static org.apache.dubbo.common.constants.CommonConstants.EXTRA_KEYS_KEY; |
| import static org.apache.dubbo.common.constants.CommonConstants.REGISTRY_DELAY_NOTIFICATION_KEY; |
| import static org.apache.dubbo.common.constants.CommonConstants.SHUTDOWN_WAIT_KEY; |
| import static org.apache.dubbo.config.Constants.REGISTRIES_SUFFIX; |
| |
| /** |
| * RegistryConfig |
| * |
| * @export |
| */ |
| public class RegistryConfig extends AbstractConfig { |
| |
| public static final String NO_AVAILABLE = "N/A"; |
| private static final long serialVersionUID = 5508512956753757169L; |
| |
| /** |
| * Register center address |
| */ |
| private String address; |
| |
| /** |
| * Username to login register center |
| */ |
| private String username; |
| |
| /** |
| * Password to login register center |
| */ |
| private String password; |
| |
| /** |
| * Default port for register center |
| */ |
| private Integer port; |
| |
| /** |
| * Protocol for register center |
| */ |
| private String protocol; |
| |
| /** |
| * Network transmission type |
| */ |
| private String transporter; |
| |
| private String server; |
| |
| private String client; |
| |
| /** |
| * Affects how traffic distributes among registries, useful when subscribing multiple registries, available options: |
| * 1. zone-aware, a certain type of traffic always goes to one Registry according to where the traffic is originated. |
| */ |
| private String cluster; |
| |
| /** |
| * The region where the registry belongs, usually used to isolate traffics |
| */ |
| private String zone; |
| |
| /** |
| * The group the services registry in |
| */ |
| private String group; |
| |
| private String version; |
| |
| /** |
| * Request timeout in milliseconds for register center |
| */ |
| private Integer timeout; |
| |
| /** |
| * Session timeout in milliseconds for register center |
| */ |
| private Integer session; |
| |
| /** |
| * File for saving register center dynamic list |
| */ |
| private String file; |
| |
| /** |
| * Wait time before stop |
| */ |
| private Integer wait; |
| |
| /** |
| * Whether to check if register center is available when boot up |
| */ |
| private Boolean check; |
| |
| /** |
| * Whether to allow dynamic service to register on the register center |
| */ |
| private Boolean dynamic; |
| |
| /** |
| * Whether to export service on the register center |
| */ |
| private Boolean register; |
| |
| /** |
| * Whether allow to subscribe service on the register center |
| */ |
| private Boolean subscribe; |
| |
| /** |
| * The customized parameters |
| */ |
| private Map<String, String> parameters; |
| |
| /** |
| * Whether it's default |
| */ |
| private Boolean isDefault; |
| |
| /** |
| * Simple the registry. both useful for provider and consumer |
| * |
| * @since 2.7.0 |
| */ |
| private Boolean simplified; |
| /** |
| * After simplify the registry, should add some parameter individually. just for provider. |
| * <p> |
| * such as: extra-keys = A,b,c,d |
| * |
| * @since 2.7.0 |
| */ |
| private String extraKeys; |
| |
| /** |
| * the address work as config center or not |
| */ |
| private Boolean useAsConfigCenter; |
| |
| /** |
| * the address work as remote metadata center or not |
| */ |
| private Boolean useAsMetadataCenter; |
| |
| /** |
| * list of rpc protocols accepted by this registry, for example, "dubbo,rest" |
| */ |
| private String accepts; |
| |
| /** |
| * Always use this registry first if set to true, useful when subscribe to multiple registries |
| */ |
| private Boolean preferred; |
| |
| /** |
| * Affects traffic distribution among registries, useful when subscribe to multiple registries |
| * Take effect only when no preferred registry is specified. |
| */ |
| private Integer weight; |
| |
| private Integer lazyNotification; |
| |
| public RegistryConfig() { |
| } |
| |
| public RegistryConfig(String address) { |
| setAddress(address); |
| } |
| |
| public RegistryConfig(String address, String protocol) { |
| setAddress(address); |
| setProtocol(protocol); |
| } |
| |
| public String getProtocol() { |
| return protocol; |
| } |
| |
| public void setProtocol(String protocol) { |
| this.protocol = protocol; |
| this.updateIdIfAbsent(protocol); |
| } |
| |
| @Parameter(excluded = true) |
| public String getAddress() { |
| return address; |
| } |
| |
| public void setAddress(String address) { |
| this.address = address; |
| if (address != null) { |
| try { |
| URL url = URL.valueOf(address); |
| setUsername(url.getUsername()); |
| setPassword(url.getPassword()); |
| // updateIdIfAbsent(url.getProtocol()); |
| updateProtocolIfAbsent(url.getProtocol()); |
| updatePortIfAbsent(url.getPort()); |
| updateParameters(url.getParameters()); |
| } catch (Exception ignored) { |
| } |
| } |
| } |
| |
| public Integer getPort() { |
| return port; |
| } |
| |
| public void setPort(Integer port) { |
| this.port = port; |
| } |
| |
| public String getUsername() { |
| return username; |
| } |
| |
| public void setUsername(String username) { |
| this.username = username; |
| } |
| |
| public String getPassword() { |
| return password; |
| } |
| |
| public void setPassword(String password) { |
| this.password = password; |
| } |
| |
| /** |
| * @return wait |
| * @see org.apache.dubbo.config.ProviderConfig#getWait() |
| * @deprecated |
| */ |
| @Deprecated |
| public Integer getWait() { |
| return wait; |
| } |
| |
| /** |
| * @param wait |
| * @see org.apache.dubbo.config.ProviderConfig#setWait(Integer) |
| * @deprecated |
| */ |
| @Deprecated |
| public void setWait(Integer wait) { |
| this.wait = wait; |
| if (wait != null && wait > 0) { |
| System.setProperty(SHUTDOWN_WAIT_KEY, String.valueOf(wait)); |
| } |
| } |
| |
| public Boolean isCheck() { |
| return check; |
| } |
| |
| public void setCheck(Boolean check) { |
| this.check = check; |
| } |
| |
| public String getFile() { |
| return file; |
| } |
| |
| public void setFile(String file) { |
| this.file = file; |
| } |
| |
| /** |
| * @return transport |
| * @see #getTransporter() |
| * @deprecated |
| */ |
| @Deprecated |
| @Parameter(excluded = true) |
| public String getTransport() { |
| return getTransporter(); |
| } |
| |
| /** |
| * @param transport |
| * @see #setTransporter(String) |
| * @deprecated |
| */ |
| @Deprecated |
| public void setTransport(String transport) { |
| setTransporter(transport); |
| } |
| |
| public String getTransporter() { |
| return transporter; |
| } |
| |
| public void setTransporter(String transporter) { |
| /*if(transporter != null && transporter.length() > 0 && ! ExtensionLoader.getExtensionLoader(Transporter.class).hasExtension(transporter)){ |
| throw new IllegalStateException("No such transporter type : " + transporter); |
| }*/ |
| this.transporter = transporter; |
| } |
| |
| public String getServer() { |
| return server; |
| } |
| |
| public void setServer(String server) { |
| /*if(server != null && server.length() > 0 && ! ExtensionLoader.getExtensionLoader(Transporter.class).hasExtension(server)){ |
| throw new IllegalStateException("No such server type : " + server); |
| }*/ |
| this.server = server; |
| } |
| |
| public String getClient() { |
| return client; |
| } |
| |
| public void setClient(String client) { |
| /*if(client != null && client.length() > 0 && ! ExtensionLoader.getExtensionLoader(Transporter.class).hasExtension(client)){ |
| throw new IllegalStateException("No such client type : " + client); |
| }*/ |
| this.client = client; |
| } |
| |
| public Integer getTimeout() { |
| return timeout; |
| } |
| |
| public void setTimeout(Integer timeout) { |
| this.timeout = timeout; |
| } |
| |
| public Integer getSession() { |
| return session; |
| } |
| |
| public void setSession(Integer session) { |
| this.session = session; |
| } |
| |
| public Boolean isDynamic() { |
| return dynamic; |
| } |
| |
| public void setDynamic(Boolean dynamic) { |
| this.dynamic = dynamic; |
| } |
| |
| public Boolean isRegister() { |
| return register; |
| } |
| |
| public void setRegister(Boolean register) { |
| this.register = register; |
| } |
| |
| public Boolean isSubscribe() { |
| return subscribe; |
| } |
| |
| public void setSubscribe(Boolean subscribe) { |
| this.subscribe = subscribe; |
| } |
| |
| public String getCluster() { |
| return cluster; |
| } |
| |
| public void setCluster(String cluster) { |
| this.cluster = cluster; |
| } |
| |
| public String getZone() { |
| return zone; |
| } |
| |
| public void setZone(String zone) { |
| this.zone = zone; |
| } |
| |
| public String getGroup() { |
| return group; |
| } |
| |
| public void setGroup(String group) { |
| this.group = group; |
| } |
| |
| public String getVersion() { |
| return version; |
| } |
| |
| public void setVersion(String version) { |
| this.version = version; |
| } |
| |
| public Map<String, String> getParameters() { |
| return parameters; |
| } |
| |
| public void setParameters(Map<String, String> parameters) { |
| this.parameters = parameters; |
| } |
| |
| public void updateParameters(Map<String, String> parameters) { |
| if (CollectionUtils.isEmptyMap(parameters)) { |
| return; |
| } |
| if (this.parameters == null) { |
| this.parameters = parameters; |
| } else { |
| this.parameters.putAll(parameters); |
| } |
| } |
| |
| public Boolean isDefault() { |
| return isDefault; |
| } |
| |
| public void setDefault(Boolean isDefault) { |
| this.isDefault = isDefault; |
| } |
| |
| public Boolean getSimplified() { |
| return simplified; |
| } |
| |
| public void setSimplified(Boolean simplified) { |
| this.simplified = simplified; |
| } |
| |
| @Parameter(key = EXTRA_KEYS_KEY) |
| public String getExtraKeys() { |
| return extraKeys; |
| } |
| |
| public void setExtraKeys(String extraKeys) { |
| this.extraKeys = extraKeys; |
| } |
| |
| @Parameter(excluded = true) |
| public Boolean getUseAsConfigCenter() { |
| return useAsConfigCenter; |
| } |
| |
| public void setUseAsConfigCenter(Boolean useAsConfigCenter) { |
| this.useAsConfigCenter = useAsConfigCenter; |
| } |
| |
| @Parameter(excluded = true) |
| public Boolean getUseAsMetadataCenter() { |
| return useAsMetadataCenter; |
| } |
| |
| public void setUseAsMetadataCenter(Boolean useAsMetadataCenter) { |
| this.useAsMetadataCenter = useAsMetadataCenter; |
| } |
| |
| public String getAccepts() { |
| return accepts; |
| } |
| |
| public void setAccepts(String accepts) { |
| this.accepts = accepts; |
| } |
| |
| public Boolean getPreferred() { |
| return preferred; |
| } |
| |
| public void setPreferred(Boolean preferred) { |
| this.preferred = preferred; |
| } |
| |
| public Integer getWeight() { |
| return weight; |
| } |
| |
| public void setWeight(Integer weight) { |
| this.weight = weight; |
| } |
| |
| @Parameter(key = REGISTRY_DELAY_NOTIFICATION_KEY) |
| public Integer getLazyNotification() { |
| return lazyNotification; |
| } |
| |
| public void setLazyNotification(Integer lazyNotification) { |
| this.lazyNotification = lazyNotification; |
| } |
| |
| @Override |
| public void refresh() { |
| super.refresh(); |
| if (StringUtils.isNotEmpty(this.getId())) { |
| this.setPrefix(REGISTRIES_SUFFIX); |
| super.refresh(); |
| } |
| } |
| |
| @Override |
| @Parameter(excluded = true) |
| public boolean isValid() { |
| // empty protocol will default to 'dubbo' |
| return !StringUtils.isEmpty(address); |
| } |
| |
| protected void updatePortIfAbsent(Integer value) { |
| if (value != null && value > 0 && port == null) { |
| this.port = value; |
| } |
| } |
| |
| protected void updateProtocolIfAbsent(String value) { |
| if (StringUtils.isNotEmpty(value) && StringUtils.isEmpty(protocol)) { |
| this.protocol = value; |
| } |
| } |
| } |