Skip to content

Commit

Permalink
增加环境隔离和切流功能
Browse files Browse the repository at this point in the history
  • Loading branch information
HaojunRen committed Nov 21, 2019
1 parent e79af33 commit a0da25c
Show file tree
Hide file tree
Showing 35 changed files with 371 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@ public class DiscoveryConstant {
public static final String SPRING_APPLICATION_NO_SERVERS_RETRY_TIMES = "spring.application.no.servers.retry.times";
public static final String SPRING_APPLICATION_NO_SERVERS_RETRY_AWAIT_TIME = "spring.application.no.servers.retry.await.time";
public static final String SPRING_APPLICATION_NO_SERVERS_NOTIFY_ENABLED = "spring.application.no.servers.notify.enabled";
public static final String SPRING_APPLICATION_ENVIRONMENT_ISOLATION_ENABLED = "spring.application.environment.isolation.enabled";
public static final String SPRING_APPLICATION_ENVIRONMENT_TRANSFER = "spring.application.environment.transfer";
public static final String SPRING_APPLICATION_ENVIRONMENT_TRANSFER_VALUE = "common";

public static final String CONTEXT_PATH = "server.servlet.context-path";

Expand Down Expand Up @@ -64,6 +67,7 @@ public class DiscoveryConstant {

public static final String VERSION = "version";
public static final String REGION = "region";
public static final String ENVIRONMENT = "env";
public static final String ADDRESS = "address";
public static final String VERSION_WEIGHT = "version-weight";
public static final String REGION_WEIGHT = "region-weight";
Expand All @@ -77,6 +81,7 @@ public class DiscoveryConstant {
public static final String N_D_SERVICE_ADDRESS = "n-d-service-address";
public static final String N_D_SERVICE_VERSION = "n-d-service-version";
public static final String N_D_SERVICE_REGION = "n-d-service-region";
public static final String N_D_SERVICE_ENVIRONMENT = "n-d-service-env";

public static final String N_D_VERSION = "n-d-version";
public static final String N_D_REGION = "n-d-region";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ public class InstanceEntity implements Serializable {
private String serviceId;
private String version;
private String region;
private String environment;
private String host;
private int port;
private Map<String, String> metadata;
Expand Down Expand Up @@ -60,6 +61,14 @@ public void setRegion(String region) {
this.region = region;
}

public String getEnvironment() {
return environment;
}

public void setEnvironment(String environment) {
this.environment = environment;
}

public String getHost() {
return host;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ public class RouterEntity implements Serializable {
private String serviceId;
private String version;
private String region;
private String environment;
private String host;
private int port;
private int weight = -1;
Expand Down Expand Up @@ -64,6 +65,14 @@ public void setRegion(String region) {
this.region = region;
}

public String getEnvironment() {
return environment;
}

public void setEnvironment(String environment) {
this.environment = environment;
}

public String getHost() {
return host;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,18 @@
"type": "java.lang.Boolean",
"defaultValue": false,
"description": "Whether no server notify is enabled."
},
{
"name": "spring.application.environment.isolation.enabled",
"type": "java.lang.Boolean",
"defaultValue": false,
"description": "Whether environment isolation is enabled."
},
{
"name": "spring.application.environment.transfer",
"type": "java.lang.String",
"defaultValue": "common",
"description": "If environment isolation failed, an environment will transfer."
}
]
}
Original file line number Diff line number Diff line change
Expand Up @@ -233,14 +233,15 @@ private String getNodeName(Instance instance) {
}
stringBuilder.append(instance.getServiceId()).append("\n");
stringBuilder.append(instance.getHost()).append(":").append(instance.getPort());

if (StringUtils.isNotEmpty(instance.getVersion())) {
stringBuilder.append("\n [V").append(instance.getVersion()).append("]");
}

if (StringUtils.isNotEmpty(instance.getRegion())) {
stringBuilder.append("\n [Region=").append(instance.getRegion()).append("]");
}
if (StringUtils.isNotEmpty(instance.getEnvironment())) {
stringBuilder.append("\n [Env=").append(instance.getEnvironment()).append("]");
}

return ButtonManager.getHtmlText(stringBuilder.toString());
}
Expand All @@ -252,14 +253,15 @@ private String getNodeName(RouterEntity routerEntity) {
}
stringBuilder.append(routerEntity.getServiceId()).append("\n");
stringBuilder.append(routerEntity.getHost()).append(":").append(routerEntity.getPort());

if (StringUtils.isNotEmpty(routerEntity.getVersion())) {
stringBuilder.append("\n [V").append(routerEntity.getVersion()).append("]");
}

if (StringUtils.isNotEmpty(routerEntity.getRegion())) {
stringBuilder.append("\n [Region=").append(routerEntity.getRegion()).append("]");
}
if (StringUtils.isNotEmpty(routerEntity.getEnvironment())) {
stringBuilder.append("\n [Env=").append(routerEntity.getEnvironment()).append("]");
}

return ButtonManager.getHtmlText(stringBuilder.toString());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -390,6 +390,9 @@ private String getNodeName(Instance instance) {
if (StringUtils.isNotEmpty(instance.getRegion())) {
stringBuilder.append("\n [Region=").append(instance.getRegion()).append("]");
}
if (StringUtils.isNotEmpty(instance.getEnvironment())) {
stringBuilder.append("\n [Env=").append(instance.getEnvironment()).append("]");
}

return ButtonManager.getHtmlText(stringBuilder.toString());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -323,6 +323,7 @@ public List<InstanceEntity> getInstanceList(String service) {
String serviceType = metadata.get(DiscoveryConstant.SPRING_APPLICATION_TYPE);
String version = metadata.get(DiscoveryConstant.VERSION);
String region = metadata.get(DiscoveryConstant.REGION);
String environment = metadata.get(DiscoveryConstant.ENVIRONMENT);
String host = serviceInstance.getHost();
int port = serviceInstance.getPort();

Expand All @@ -331,6 +332,7 @@ public List<InstanceEntity> getInstanceList(String service) {
instanceEntity.setServiceId(serviceId);
instanceEntity.setVersion(version);
instanceEntity.setRegion(region);
instanceEntity.setEnvironment(environment);
instanceEntity.setHost(host);
instanceEntity.setPort(port);
instanceEntity.setMetadata(metadata);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,7 @@ public RouterEntity getRouterEntity() {
String serviceId = pluginAdapter.getServiceId();
String version = pluginAdapter.getVersion();
String region = pluginAdapter.getRegion();
String environment = pluginAdapter.getEnvironment();
String host = pluginAdapter.getHost();
int port = pluginAdapter.getPort();
int weight = -1;
Expand All @@ -132,6 +133,7 @@ public RouterEntity getRouterEntity() {
routerEntity.setServiceId(serviceId);
routerEntity.setVersion(version);
routerEntity.setRegion(region);
routerEntity.setEnvironment(environment);
routerEntity.setHost(host);
routerEntity.setPort(port);
routerEntity.setWeight(weight);
Expand Down Expand Up @@ -159,6 +161,7 @@ public List<RouterEntity> getRouterEntityList(String routeServiceId) {
String serviceType = pluginAdapter.getInstanceServiceType(instance);
String version = pluginAdapter.getInstanceVersion(instance);
String region = pluginAdapter.getInstanceRegion(instance);
String environment = pluginAdapter.getInstanceEnvironment(instance);
String host = instance.getHost();
int port = instance.getPort();
int weight = getWeight(routeServiceId, version, region);
Expand All @@ -169,6 +172,7 @@ public List<RouterEntity> getRouterEntityList(String routeServiceId) {
routerEntity.setServiceId(serviceId);
routerEntity.setVersion(version);
routerEntity.setRegion(region);
routerEntity.setEnvironment(environment);
routerEntity.setHost(host);
routerEntity.setPort(port);
routerEntity.setWeight(weight);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -164,14 +164,23 @@ public void clearDynamicRule() {
@Override
public String getRegion() {
String region = getMetadata().get(DiscoveryConstant.REGION);

if (StringUtils.isEmpty(region)) {
region = DiscoveryConstant.DEFAULT;
}

return region;
}

@Override
public String getEnvironment() {
String environment = getMetadata().get(DiscoveryConstant.ENVIRONMENT);
if (StringUtils.isEmpty(environment)) {
environment = DiscoveryConstant.DEFAULT;
}

return environment;
}

@Override
public String getServerGroupKey(Server server) {
String groupKey = getServerMetadata(server).get(DiscoveryConstant.SPRING_APPLICATION_GROUP_KEY);
Expand Down Expand Up @@ -234,6 +243,16 @@ public String getServerRegion(Server server) {
return serverRegion;
}

@Override
public String getServerEnvironment(Server server) {
String serverEnvironment = getServerMetadata(server).get(DiscoveryConstant.ENVIRONMENT);
if (StringUtils.isEmpty(serverEnvironment)) {
serverEnvironment = DiscoveryConstant.DEFAULT;
}

return serverEnvironment;
}

@Override
public String getServerContextPath(Server server) {
return getServerMetadata(server).get(DiscoveryConstant.SPRING_APPLICATION_CONTEXT_PATH);
Expand Down Expand Up @@ -297,6 +316,16 @@ public String getInstanceRegion(ServiceInstance serviceInstance) {
return instanceRegion;
}

@Override
public String getInstanceEnvironment(ServiceInstance serviceInstance) {
String instanceEnvironment = getInstanceMetadata(serviceInstance).get(DiscoveryConstant.ENVIRONMENT);
if (StringUtils.isEmpty(instanceEnvironment)) {
instanceEnvironment = DiscoveryConstant.DEFAULT;
}

return instanceEnvironment;
}

@Override
public String getInstanceContextPath(ServiceInstance serviceInstance) {
return getInstanceMetadata(serviceInstance).get(DiscoveryConstant.SPRING_APPLICATION_CONTEXT_PATH);
Expand All @@ -309,6 +338,7 @@ public String getPluginInfo(String previousPluginInfo) {
int port = getPort();
String version = getVersion();
String region = getRegion();
String environment = getEnvironment();
String group = getGroup();

StringBuilder stringBuilder = new StringBuilder();
Expand All @@ -320,6 +350,9 @@ public String getPluginInfo(String previousPluginInfo) {
if (StringUtils.isNotEmpty(region)) {
stringBuilder.append("[R=" + region + "]");
}
if (StringUtils.isNotEmpty(environment)) {
stringBuilder.append("[E=" + environment + "]");
}
if (StringUtils.isNotEmpty(group)) {
stringBuilder.append("[G=" + group + "]");
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.nepxion.discovery.plugin.framework.adapter;

/**
* <p>Title: Nepxion Discovery</p>
* <p>Description: Nepxion Discovery</p>
* <p>Copyright: Copyright (c) 2017-2050</p>
* <p>Company: Nepxion</p>
* @author Haojun Ren
* @version 1.0
*/

import org.springframework.beans.factory.annotation.Autowired;

public abstract class DefaultEnvironmentTransferAdapter implements EnvironmentTransferAdapter {
@Autowired
protected PluginAdapter pluginAdapter;

public PluginAdapter getPluginAdapter() {
return pluginAdapter;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.nepxion.discovery.plugin.framework.adapter;

/**
* <p>Title: Nepxion Discovery</p>
* <p>Description: Nepxion Discovery</p>
* <p>Copyright: Copyright (c) 2017-2050</p>
* <p>Company: Nepxion</p>
* @author Haojun Ren
* @version 1.0
*/

public interface EnvironmentTransferAdapter {
boolean isTransferred();
}
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,8 @@ public interface PluginAdapter {

String getRegion();

String getEnvironment();

Map<String, String> getServerMetadata(Server server);

String getServerGroupKey(Server server);
Expand All @@ -71,6 +73,8 @@ public interface PluginAdapter {

String getServerRegion(Server server);

String getServerEnvironment(Server server);

String getServerContextPath(Server server);

Map<String, String> getInstanceMetadata(ServiceInstance serviceInstance);
Expand All @@ -87,6 +91,8 @@ public interface PluginAdapter {

String getInstanceRegion(ServiceInstance serviceInstance);

String getInstanceEnvironment(ServiceInstance serviceInstance);

String getInstanceContextPath(ServiceInstance serviceInstance);

String getPluginInfo(String previousPluginInfo);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,11 @@
import com.nepxion.discovery.plugin.framework.generator.GitGenerator;
import com.nepxion.discovery.plugin.framework.generator.GroupGenerator;
import com.nepxion.discovery.plugin.framework.listener.discovery.DiscoveryListenerExecutor;
import com.nepxion.discovery.plugin.framework.listener.discovery.EnvironmentFilterDiscoveryListener;
import com.nepxion.discovery.plugin.framework.listener.discovery.HostFilterDiscoveryListener;
import com.nepxion.discovery.plugin.framework.listener.discovery.RegionFilterDiscoveryListener;
import com.nepxion.discovery.plugin.framework.listener.discovery.VersionFilterDiscoveryListener;
import com.nepxion.discovery.plugin.framework.listener.loadbalance.EnvironmentFilterLoadBalanceListener;
import com.nepxion.discovery.plugin.framework.listener.loadbalance.HostFilterLoadBalanceListener;
import com.nepxion.discovery.plugin.framework.listener.loadbalance.LoadBalanceListenerExecutor;
import com.nepxion.discovery.plugin.framework.listener.loadbalance.NotificationLoadBalanceListener;
Expand Down Expand Up @@ -105,6 +107,13 @@ public VersionFilterDiscoveryListener versionFilterDiscoveryListener() {
return new VersionFilterDiscoveryListener();
}

@Bean
@ConditionalOnMissingBean
@ConditionalOnProperty(value = DiscoveryConstant.SPRING_APPLICATION_ENVIRONMENT_ISOLATION_ENABLED, matchIfMissing = false)
public EnvironmentFilterDiscoveryListener environmentFilterDiscoveryListener() {
return new EnvironmentFilterDiscoveryListener();
}

@Bean
public RegionFilterDiscoveryListener regionFilterDiscoveryListener() {
return new RegionFilterDiscoveryListener();
Expand Down Expand Up @@ -132,6 +141,13 @@ public NotificationLoadBalanceListener notificationLoadBalanceListener() {
return new NotificationLoadBalanceListener();
}

@Bean
@ConditionalOnMissingBean
@ConditionalOnProperty(value = DiscoveryConstant.SPRING_APPLICATION_ENVIRONMENT_ISOLATION_ENABLED, matchIfMissing = false)
public EnvironmentFilterLoadBalanceListener environmentFilterLoadBalanceListener() {
return new EnvironmentFilterLoadBalanceListener();
}

@Bean
@ConditionalOnMissingBean
@ConditionalOnProperty(value = DiscoveryConstant.SPRING_APPLICATION_GROUP_GENERATOR_ENABLED, matchIfMissing = false)
Expand Down
Loading

0 comments on commit a0da25c

Please sign in to comment.