org.apache.dubbo.registry.client.DefaultServiceInstance Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of dubbo Show documentation
Show all versions of dubbo Show documentation
The all in one project of dubbo
/*
* 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.client;
import org.apache.dubbo.metadata.MetadataInfo;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import static org.apache.dubbo.common.constants.CommonConstants.REVISION_KEY;
/**
* The default implementation of {@link ServiceInstance}.
*
* @since 2.7.5
*/
public class DefaultServiceInstance implements ServiceInstance {
private static final long serialVersionUID = 1149677083747278100L;
private String id;
private String serviceName;
private String host;
private Integer port;
private boolean enabled;
private boolean healthy;
private Map metadata = new HashMap<>();
private transient String address;
private transient MetadataInfo serviceMetadata;
// used at runtime
private transient Map extendParams = new HashMap<>();
public DefaultServiceInstance() {
}
public DefaultServiceInstance(String id, String serviceName, String host, Integer port) {
if (port != null && port.intValue() < 1) {
throw new IllegalArgumentException("The port must be greater than zero!");
}
this.id = id;
this.serviceName = serviceName;
this.host = host;
this.port = port;
this.enabled = true;
this.healthy = true;
}
public DefaultServiceInstance(String serviceName, String host, Integer port) {
this(host + ":" + port, serviceName, host, port);
}
public void setId(String id) {
this.id = id;
}
public void setServiceName(String serviceName) {
this.serviceName = serviceName;
}
public void setHost(String host) {
this.host = host;
}
@Override
public String getId() {
return id;
}
@Override
public String getServiceName() {
return serviceName;
}
@Override
public String getHost() {
return host;
}
public void setPort(Integer port) {
this.port = port;
}
@Override
public Integer getPort() {
return port;
}
@Override
public String getAddress() {
if (address == null) {
address = getAddress(host, port);
}
return address;
}
private static String getAddress(String host, Integer port) {
return port != null && port <= 0 ? host : host + ':' + port;
}
@Override
public boolean isEnabled() {
return enabled;
}
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
@Override
public boolean isHealthy() {
return healthy;
}
public void setHealthy(boolean healthy) {
this.healthy = healthy;
}
@Override
public Map getMetadata() {
return metadata;
}
@Override
public Map getExtendParams() {
return extendParams;
}
@Override
public Map getAllParams() {
Map allParams = new HashMap<>((int) ((metadata.size() + extendParams.size()) / 0.75f + 1));
allParams.putAll(metadata);
allParams.putAll(extendParams);
return allParams;
}
public void setMetadata(Map metadata) {
this.metadata = metadata;
}
public MetadataInfo getServiceMetadata() {
return serviceMetadata;
}
public void setServiceMetadata(MetadataInfo serviceMetadata) {
this.serviceMetadata = serviceMetadata;
}
@Override
public InstanceAddressURL toURL() {
return new InstanceAddressURL(this, serviceMetadata);
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof DefaultServiceInstance)) {
return false;
}
DefaultServiceInstance that = (DefaultServiceInstance) o;
boolean equals = Objects.equals(getServiceName(), that.getServiceName()) &&
Objects.equals(getHost(), that.getHost()) &&
Objects.equals(getPort(), that.getPort());
for (Map.Entry entry : this.getMetadata().entrySet()) {
if (entry.getKey().equals(REVISION_KEY)) {
continue;
}
equals = equals && entry.getValue().equals(that.getMetadata().get(entry.getKey()));
}
return equals;
}
@Override
public int hashCode() {
int result = Objects.hash(getServiceName(), getHost(), getPort());
for (Map.Entry entry : this.getMetadata().entrySet()) {
if (entry.getKey().equals(REVISION_KEY)) {
continue;
}
result = 31 * result + (entry.getValue() == null ? 0 : entry.getValue().hashCode());
}
return result;
}
@Override
public String toString() {
return "DefaultServiceInstance{" +
"id='" + id + '\'' +
", serviceName='" + serviceName + '\'' +
", host='" + host + '\'' +
", port=" + port +
", enabled=" + enabled +
", healthy=" + healthy +
", metadata=" + metadata +
'}';
}
}