blob: 47fbd9624592aef1503c663c7647d58a0e720737 [file] [log] [blame]
/*
* 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.servicecomb.registry.api.registry;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.configuration.Configuration;
import org.apache.commons.lang.StringUtils;
import org.apache.servicecomb.config.BootStrapProperties;
import org.apache.servicecomb.registry.config.InstancePropertiesLoader;
import org.apache.servicecomb.registry.definition.DefinitionConst;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.netflix.config.DynamicPropertyFactory;
/**
* Created by on 2016/12/5.
*/
@JsonIgnoreProperties(ignoreUnknown = true)
public class MicroserviceInstance {
// even disconnected from service center
// instanceId will not be changed
// when register to service center again, use the old instanceId.
private String instanceId;
// service center rule: max length: 64
private String serviceId;
private List<String> endpoints = new ArrayList<>();
private String hostName;
private MicroserviceInstanceStatus status = MicroserviceInstanceStatus.UP;
private Map<String, String> properties = new HashMap<>(); // reserved key list: region|az|stage|group
private HealthCheck healthCheck;
/**
* Will be abandoned, use Microservice Environment instead
*/
@Deprecated
private String environment;
private String stage;
private DataCenterInfo dataCenterInfo;
private String timestamp;
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("instanceId=" + instanceId + ";");
sb.append("serviceId=" + serviceId + ";");
sb.append("status=" + status + ";");
sb.append("endpoints=" + endpoints.toString());
return sb.toString();
}
public String getTimestamp() {
return timestamp;
}
public void setTimestamp(String timestamp) {
this.timestamp = timestamp;
}
public String getInstanceId() {
return instanceId;
}
public void setInstanceId(String instanceId) {
this.instanceId = instanceId;
}
public MicroserviceInstance instanceId(String instanceId) {
this.instanceId = instanceId;
return this;
}
public String getServiceId() {
return serviceId;
}
public void setServiceId(String serviceId) {
this.serviceId = serviceId;
}
public MicroserviceInstance serviceId(String serviceId) {
this.serviceId = serviceId;
return this;
}
public String getHostName() {
return hostName;
}
public void setHostName(String hostName) {
this.hostName = hostName;
}
public List<String> getEndpoints() {
return endpoints;
}
public void setEndpoints(List<String> endpoints) {
this.endpoints = endpoints;
}
public MicroserviceInstanceStatus getStatus() {
return status;
}
public void setStatus(MicroserviceInstanceStatus status) {
this.status = status;
}
public Map<String, String> getProperties() {
return properties;
}
public void setProperties(Map<String, String> properties) {
this.properties = properties;
}
public HealthCheck getHealthCheck() {
return healthCheck;
}
public void setHealthCheck(HealthCheck healthCheck) {
this.healthCheck = healthCheck;
}
public String getEnvironment() {
return environment;
}
public void setEnvironment(String environment) {
this.environment = environment;
}
@Deprecated
public String getStage() {
return stage;
}
@Deprecated
public void setStage(String stage) {
this.stage = stage;
}
public DataCenterInfo getDataCenterInfo() {
return dataCenterInfo;
}
@Override
public int hashCode() {
return this.instanceId.hashCode();
}
@Override
public boolean equals(Object obj) {
if (obj instanceof MicroserviceInstance) {
return this.instanceId.equals(((MicroserviceInstance) obj).instanceId);
}
return false;
}
public void setDataCenterInfo(DataCenterInfo dataCenterInfo) {
this.dataCenterInfo = dataCenterInfo;
}
// Some properties of microservice instance are dynamic changed, not cover them all now.
public static MicroserviceInstance createFromDefinition(Configuration configuration) {
MicroserviceInstance microserviceInstance = new MicroserviceInstance();
// default hard coded values
microserviceInstance.setStage(DefinitionConst.DEFAULT_STAGE);
microserviceInstance
.setEnvironment(BootStrapProperties.readServiceInstanceEnvironment(configuration));
microserviceInstance.setStatus(MicroserviceInstanceStatus
.valueOf(BootStrapProperties.readServiceInstanceInitialStatus()));
HealthCheck healthCheck = new HealthCheck();
healthCheck.setMode(HealthCheckMode.HEARTBEAT);
microserviceInstance.setHealthCheck(healthCheck);
// load properties
Map<String, String> propertiesMap = InstancePropertiesLoader.INSTANCE.loadProperties(configuration);
microserviceInstance.setProperties(propertiesMap);
// load data center information
loadDataCenterInfo(microserviceInstance);
return microserviceInstance;
}
private static void loadDataCenterInfo(MicroserviceInstance microserviceInstance) {
String dataCenterName = DynamicPropertyFactory.getInstance()
.getStringProperty("servicecomb.datacenter.name", "default")
.get();
DataCenterInfo dataCenterInfo = new DataCenterInfo();
dataCenterInfo.setName(dataCenterName);
dataCenterInfo.setRegion(DynamicPropertyFactory.getInstance().
getStringProperty("servicecomb.datacenter.region", "default").get());
dataCenterInfo.setAvailableZone(DynamicPropertyFactory.getInstance().
getStringProperty("servicecomb.datacenter.availableZone", "default").get());
microserviceInstance.setDataCenterInfo(dataCenterInfo);
}
}