mirror of
https://gitee.com/durcframework/SOP.git
synced 2025-08-11 21:57:56 +08:00
支持预发布、灰度发布
This commit is contained in:
@@ -25,6 +25,9 @@ public class ConfigGrayUserkey {
|
||||
/** 数据库字段:id */
|
||||
private Long id;
|
||||
|
||||
/** serviceId, 数据库字段:service_id */
|
||||
private String serviceId;
|
||||
|
||||
/** instanceId, 数据库字段:instance_id */
|
||||
private String instanceId;
|
||||
|
||||
|
@@ -1,15 +1,13 @@
|
||||
package com.gitee.sop.gateway.loadbalancer;
|
||||
|
||||
import com.gitee.sop.gateway.manager.DbUserKeyManager;
|
||||
import com.gitee.sop.gateway.manager.DbEnvGrayManager;
|
||||
import com.gitee.sop.gatewaycommon.bean.SpringContext;
|
||||
import com.gitee.sop.gatewaycommon.param.ApiParam;
|
||||
import com.gitee.sop.gatewaycommon.param.Param;
|
||||
import com.gitee.sop.gatewaycommon.param.ParamNames;
|
||||
import com.gitee.sop.gatewaycommon.zuul.ZuulContext;
|
||||
import com.gitee.sop.gatewaycommon.zuul.loadbalancer.BaseServerChooser;
|
||||
import com.netflix.loadbalancer.Server;
|
||||
import com.netflix.niws.loadbalancer.DiscoveryEnabledServer;
|
||||
import com.netflix.zuul.context.RequestContext;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
@@ -30,6 +28,24 @@ public class EnvironmentServerChooser extends BaseServerChooser {
|
||||
*/
|
||||
private static final String PRE_DOMAIN = "localhost";
|
||||
|
||||
@Override
|
||||
protected boolean isPreServer(Server server) {
|
||||
String env = getEnvValue(server);
|
||||
return ENV_PRE_VALUE.equals(env);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isGrayServer(Server server) {
|
||||
String env = getEnvValue(server);
|
||||
return ENV_GRAY_VALUE.equals(env);
|
||||
}
|
||||
|
||||
private String getEnvValue(Server server) {
|
||||
// eureka存储的metadata
|
||||
Map<String, String> metadata = ((DiscoveryEnabledServer) server).getInstanceInfo().getMetadata();
|
||||
return metadata.get(MEDATA_KEY_ENV);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean match(Server server) {
|
||||
// eureka存储的metadata
|
||||
@@ -70,6 +86,7 @@ public class EnvironmentServerChooser extends BaseServerChooser {
|
||||
* @param request request
|
||||
* @return 返回true:可以进入到预发环境
|
||||
*/
|
||||
@Override
|
||||
protected boolean canVisitPre(Server server, HttpServletRequest request) {
|
||||
String serverName = request.getServerName();
|
||||
return PRE_DOMAIN.equals(serverName);
|
||||
@@ -83,19 +100,19 @@ public class EnvironmentServerChooser extends BaseServerChooser {
|
||||
*/
|
||||
protected boolean canVisitGray(Server server, HttpServletRequest request) {
|
||||
ApiParam apiParam = ZuulContext.getApiParam();
|
||||
DbUserKeyManager userKeyManager = SpringContext.getBean(DbUserKeyManager.class);
|
||||
DbEnvGrayManager userKeyManager = SpringContext.getBean(DbEnvGrayManager.class);
|
||||
boolean canVisit = false;
|
||||
if (this.isGrayUser(apiParam, userKeyManager, server, request)) {
|
||||
/*if (this.isGrayUser(apiParam, userKeyManager, server, request)) {
|
||||
// 指定灰度版本号
|
||||
String instanceId = server.getMetaInfo().getInstanceId();
|
||||
String newVersion = userKeyManager.getVersion(instanceId, apiParam.fetchNameVersion());
|
||||
if (newVersion != null) {
|
||||
// 在header中设置新的版本号,然后微服务端先获取这个新版本号
|
||||
RequestContext.getCurrentContext().addZuulRequestHeader(ParamNames.GRAY_HEADER_VERSION_NAME, newVersion);
|
||||
RequestContext.getCurrentContext().addZuulRequestHeader(ParamNames.HEADER_VERSION_NAME, newVersion);
|
||||
canVisit = true;
|
||||
}
|
||||
}
|
||||
return canVisit;
|
||||
}*/
|
||||
return this.isGrayUser(apiParam, userKeyManager, server, request);
|
||||
}
|
||||
|
||||
|
||||
@@ -108,7 +125,7 @@ public class EnvironmentServerChooser extends BaseServerChooser {
|
||||
* @param request request
|
||||
* @return true:是
|
||||
*/
|
||||
protected boolean isGrayUser(Param param, DbUserKeyManager userKeyManager, Server server, HttpServletRequest request) {
|
||||
protected boolean isGrayUser(Param param, DbEnvGrayManager userKeyManager, Server server, HttpServletRequest request) {
|
||||
String instanceId = server.getMetaInfo().getInstanceId();
|
||||
// 这里的灰度用户为appKey,包含此appKey则为灰度用户,允许访问
|
||||
String appKey = param.fetchAppKey();
|
||||
|
@@ -6,7 +6,7 @@ import com.gitee.sop.gateway.entity.ConfigGrayUserkey;
|
||||
import com.gitee.sop.gateway.mapper.ConfigGrayUserkeyMapper;
|
||||
import com.gitee.sop.gatewaycommon.bean.ChannelMsg;
|
||||
import com.gitee.sop.gatewaycommon.bean.UserKeyDefinition;
|
||||
import com.gitee.sop.gatewaycommon.manager.DefaultUserKeyManager;
|
||||
import com.gitee.sop.gatewaycommon.manager.DefaultEnvGrayManager;
|
||||
import com.gitee.sop.gatewaycommon.manager.ZookeeperContext;
|
||||
import com.gitee.sop.gatewaycommon.zuul.loadbalancer.ServiceGrayConfig;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -29,7 +29,7 @@ import java.util.stream.Stream;
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class DbUserKeyManager extends DefaultUserKeyManager {
|
||||
public class DbEnvGrayManager extends DefaultEnvGrayManager {
|
||||
|
||||
private static final int STATUS_ENABLE = 1;
|
||||
|
||||
@@ -46,6 +46,7 @@ public class DbUserKeyManager extends DefaultUserKeyManager {
|
||||
List<ConfigGrayUserkey> list = configGrayUserkeyMapper.list(query);
|
||||
for (ConfigGrayUserkey configGrayUserkey : list) {
|
||||
this.setServiceGrayConfig(configGrayUserkey);
|
||||
this.addServiceInstance(configGrayUserkey.getServiceId(), configGrayUserkey.getInstanceId());
|
||||
}
|
||||
}
|
||||
|
@@ -14,6 +14,6 @@ public class ManagerInitializer {
|
||||
apiConfig.setRouteConfigManager(new DbRouteConfigManager());
|
||||
apiConfig.setLimitConfigManager(new DbLimitConfigManager());
|
||||
apiConfig.setIpBlacklistManager(new DbIPBlacklistManager());
|
||||
apiConfig.setUserKeyManager(new DbUserKeyManager());
|
||||
apiConfig.setUserKeyManager(new DbEnvGrayManager());
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user