前两篇,主要写了 实体类和表的直接操作
【SpringCloud分布式框架搭建】gateway网关,动态路由配置,使用Mysql,存储路由,实现集群gateway动态路由【二】
【SpringCloud分布式框架搭建】gateway网关,动态路由配置,使用Mysql,存储路由,实现集群gateway动态路由【一】
最新版本,已更改为redis存储,并新增了 token验证以及token的动态过滤验证
GitHub 地址:https://github.com/seowen808/springCloud
接下来,主要说明 gateway的动态加载的配置。
通过分析 spring Cloud gateway源码可以发现,默认的 RouteDefinitionWriter 实现类的是 InMemoryRouteDefinitionRepository ,如图:
RouteDefinitionRepository 继承了RouteDefinitionWriter,是 Spring Cloud Gateway官方预留的接口。从而可以通过下面两种方式来实现集群下的动态路由修改:RouteDefinitionWriter 接口和 RouteDefinitionRepository 接口。在这里推荐实现RouteDefinitionRepository 这个接口,从数据库或者从配置中心获取路由进行动态配置。
这里直接贴上我的mysql 实现类:MysqlRouteDefinitionRepository
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.keda.gateway.entity.DynamicRouteVo;
import com.keda.gateway.entity.GatewayDynamicRoute;
import com.keda.gateway.service.IGatewayDynamicRouteService;
import com.keda.gateway.struts.DynamicRouteStruts;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.formula.functions.T;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.gateway.filter.FilterDefinition;
import org.springframework.cloud.gateway.route.RouteDefinition;
import org.springframework.cloud.gateway.route.RouteDefinitionRepository;
import org.springframework.cloud.gateway.support.NameUtils;
import org.springframework.stereotype.Component;
import org.springframework.web.util.UriComponentsBuilder;
import