This commit is contained in:
tanghc
2020-02-07 17:33:07 +08:00
parent 21374c1665
commit 6acee19124
40 changed files with 255 additions and 152 deletions

View File

@@ -7,6 +7,7 @@ import com.gitee.sop.gatewaycommon.bean.ConfigLimitDto;
import com.gitee.sop.gatewaycommon.manager.DefaultLimitConfigManager;
import com.gitee.sop.gatewaycommon.util.MyBeanUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Service;
@@ -26,8 +27,11 @@ public class DbLimitConfigManager extends DefaultLimitConfigManager {
Environment environment;
@Override
public void load() {
public void load(String serviceId) {
Query query = new Query();
if (StringUtils.isNotBlank(serviceId)) {
query.eq("service_id", serviceId);
}
configLimitMapper.list(query)
.forEach(this::putVal);
@@ -45,7 +49,7 @@ public class DbLimitConfigManager extends DefaultLimitConfigManager {
switch (channelMsg.getOperation()) {
case "reload":
log.info("重新加载限流配置信息configLimitDto:{}", configLimitDto);
load();
load(configLimitDto.getServiceId());
break;
case "update":
log.info("更新限流配置信息configLimitDto:{}", configLimitDto);

View File

@@ -1,20 +1,18 @@
package com.gitee.sop.gateway.manager;
import com.gitee.fastmybatis.core.query.Query;
import com.gitee.sop.gateway.mapper.ConfigRouteBaseMapper;
import com.gitee.sop.gateway.mapper.ConfigRouteLimitMapper;
import com.gitee.sop.gateway.mapper.ConfigRouteMapper;
import com.gitee.sop.gatewaycommon.bean.ChannelMsg;
import com.gitee.sop.gatewaycommon.bean.RouteConfig;
import com.gitee.sop.gatewaycommon.bean.RouteDefinition;
import com.gitee.sop.gatewaycommon.bean.TargetRoute;
import com.gitee.sop.gatewaycommon.manager.DefaultRouteConfigManager;
import com.gitee.sop.gatewaycommon.manager.RouteRepositoryContext;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Service;
import java.util.Collection;
import java.util.List;
/**
* @author tanghc
@@ -29,38 +27,17 @@ public class DbRouteConfigManager extends DefaultRouteConfigManager {
@Autowired
ConfigRouteLimitMapper configRouteLimitMapper;
@Autowired
ConfigRouteMapper configRouteMapper;
@Autowired
Environment environment;
@Override
public void load() {
loadAllRoute();
Query query = new Query();
configRouteBaseMapper.list(query)
.forEach(configRouteBase -> {
String key = configRouteBase.getRouteId();
putVal(key, configRouteBase);
});
}
protected void loadAllRoute() {
Collection<? extends TargetRoute> targetRoutes = RouteRepositoryContext.getRouteRepository().getAll();
targetRoutes.forEach(targetRoute -> {
RouteDefinition routeDefinition = targetRoute.getRouteDefinition();
initRouteConfig(routeDefinition);
});
}
protected void initRouteConfig(RouteDefinition routeDefinition) {
String routeId = routeDefinition.getId();
RouteConfig routeConfig = newRouteConfig();
routeConfig.setRouteId(routeId);
routeConfigMap.put(routeId, routeConfig);
}
protected void putVal(String routeId, Object object) {
this.doUpdate(routeId, object);
public void load(String serviceId) {
List<RouteConfig> routeConfigs = StringUtils.isBlank(serviceId) ? configRouteMapper.listAllRouteConfig()
: configRouteMapper.listRouteConfig(serviceId);
routeConfigs.forEach(this::save);
}
@Override
@@ -69,7 +46,7 @@ public class DbRouteConfigManager extends DefaultRouteConfigManager {
switch (channelMsg.getOperation()) {
case "reload":
log.info("重新加载路由配置信息routeConfigDto:{}", routeConfig);
load();
load(null);
break;
case "update":
log.info("更新路由配置信息routeConfigDto:{}", routeConfig);

View File

@@ -4,15 +4,19 @@ import com.alibaba.fastjson.JSON;
import com.gitee.fastmybatis.core.query.Query;
import com.gitee.sop.gateway.entity.ConfigServiceRoute;
import com.gitee.sop.gateway.mapper.ConfigServiceRouteMapper;
import com.gitee.sop.gatewaycommon.bean.BeanInitializer;
import com.gitee.sop.gatewaycommon.bean.InstanceDefinition;
import com.gitee.sop.gatewaycommon.bean.ServiceBeanInitializer;
import com.gitee.sop.gatewaycommon.bean.ServiceRouteInfo;
import com.gitee.sop.gatewaycommon.route.RoutesProcessor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
@@ -25,6 +29,9 @@ public class DbRoutesProcessor implements RoutesProcessor {
@Autowired
private ConfigServiceRouteMapper configServiceRouteMapper;
@Autowired
private ApplicationContext applicationContext;
@Override
public void removeAllRoutes(String serviceId) {
// 删除serviceId下所有的路由
@@ -65,6 +72,13 @@ public class DbRoutesProcessor implements RoutesProcessor {
if (CollectionUtils.isNotEmpty(configServiceRoutes)) {
// 批量保存
configServiceRouteMapper.saveBatch(configServiceRoutes);
// 后续处理操作
this.initServiceBeanInitializer(serviceId);
}
}
private void initServiceBeanInitializer(String serviceId) {
Map<String, ServiceBeanInitializer> serviceBeanInitializerMap = applicationContext.getBeansOfType(ServiceBeanInitializer.class);
serviceBeanInitializerMap.values().forEach(serviceBeanInitializer -> serviceBeanInitializer.load(serviceId));
}
}

View File

@@ -8,4 +8,5 @@ import com.gitee.sop.gateway.entity.ConfigRouteBase;
* @author tanghc
*/
public interface ConfigRouteBaseMapper extends CrudMapper<ConfigRouteBase, Long> {
}

View File

@@ -0,0 +1,27 @@
package com.gitee.sop.gateway.mapper;
import com.gitee.sop.gatewaycommon.bean.RouteConfig;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
* @author tanghc
*/
@Mapper
public interface ConfigRouteMapper {
@Select("SELECT t.id AS routeId, t2.status " +
"FROM config_service_route t " +
"LEFT JOIN config_route_base t2 ON t.id=t2.route_id " +
"WHERE t.service_id=#{serviceId}")
List<RouteConfig> listRouteConfig(@Param("serviceId") String serviceId);
@Select("SELECT t.id AS routeId, t2.status " +
"FROM config_service_route t " +
"LEFT JOIN config_route_base t2 ON t.id=t2.route_id ")
List<RouteConfig> listAllRouteConfig();
}