新增限流功能

This commit is contained in:
tanghc
2019-04-11 19:07:53 +08:00
parent f8fd24ce32
commit 59a41de04e
51 changed files with 643 additions and 177 deletions

View File

@@ -9,7 +9,9 @@ import com.gitee.sop.gatewaycommon.manager.IsvRoutePermissionManager;
import com.gitee.sop.gatewaycommon.secret.IsvManager;
import com.gitee.sop.gatewaycommon.zuul.configuration.AlipayZuulConfiguration;
import com.gitee.sop.gatewaycommon.zuul.configuration.TaobaoZuulConfiguration;
import com.gitee.sop.gatewaycommon.zuul.filter.PreLimitFilter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.HashMap;
@@ -44,6 +46,7 @@ public class ZuulConfig extends AlipayZuulConfiguration {
protected void doAfter() {
managerInitializer.init();
}
}
/**

View File

@@ -28,8 +28,8 @@ public class ConfigRouteLimit {
/** 路由id, 数据库字段route_id */
private String routeId;
/** 限流策略1漏桶策略2令牌桶策略, 数据库字段type */
private Byte type;
/** 限流策略1漏桶策略2令牌桶策略, 数据库字段:limit_type */
private Byte limitType;
/** 每秒可处理请求数, 数据库字段exec_count_per_second */
private Integer execCountPerSecond;

View File

@@ -4,18 +4,21 @@ import com.alibaba.fastjson.JSON;
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.gatewaycommon.bean.BaseRouteDefinition;
import com.gitee.sop.gatewaycommon.bean.ChannelMsg;
import com.gitee.sop.gatewaycommon.bean.RouteConfig;
import com.gitee.sop.gatewaycommon.bean.RouteConfigDto;
import com.gitee.sop.gatewaycommon.bean.TargetRoute;
import com.gitee.sop.gatewaycommon.manager.DefaultRouteConfigManager;
import com.gitee.sop.gatewaycommon.manager.RouteRepositoryContext;
import com.gitee.sop.gatewaycommon.manager.ZookeeperContext;
import com.gitee.sop.gatewaycommon.util.MyBeanUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.Collection;
/**
* @author tanghc
@@ -35,6 +38,8 @@ public class DbRouteConfigManager extends DefaultRouteConfigManager {
@Override
public void load() {
loadAllRoute();
Query query = new Query();
configRouteBaseMapper.list(query)
@@ -53,10 +58,24 @@ public class DbRouteConfigManager extends DefaultRouteConfigManager {
}
protected void putVal(String key, Object object) {
RouteConfig routeConfig = routeConfigMap.getOrDefault(key, newRouteConfig());
MyBeanUtil.copyPropertiesIgnoreNull(object, routeConfig);
routeConfigMap.put(key, routeConfig);
protected void loadAllRoute() {
Collection<? extends TargetRoute> targetRoutes = RouteRepositoryContext.getRouteRepository().getAll();
targetRoutes.stream()
.forEach(targetRoute -> {
BaseRouteDefinition routeDefinition = targetRoute.getRouteDefinition();
initRouteConfig(routeDefinition);
});
}
protected void initRouteConfig(BaseRouteDefinition 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);
}