# gateway **Repository Path**: GeekCoding520/gateway ## Basic Information - **Project Name**: gateway - **Description**: 基于springcloud gateway实现网关动态路由,动态多级限流 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: https://my.oschina.net/u/4467378/blog/3178109 - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 10 - **Created**: 2021-05-18 - **Last Updated**: 2021-05-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # gateway #### 使用说明 # gateway-admin 网关规则维护项目 功能: 添加路由规则:/gateway-routes/add 添加路由规则:/gateway-routes/list 路由列表 添加路由规则:/gateway-routes//getLimitConfig 获取限流配置 发布路由规则:/version/add 发布路由,时候会在数据库添加版本号信息,同时将信息放入redis,供网关来获取 获取最后一次发布版本号:/version/lastVersion 签发appKey:/appKey/get 供开发者中心获取appKey,用于网关验证,会将appKey信息放入redis 重置appKey:/appKey/reset 开发者中心重置appKey 根据appKey获取信息:/appKey/getAppKey 供网关appKey验证,先从redis获取,获取不到才会调用此接口 用户访问限流次数修改 /limitInfo/add 供开发者中心来修改用户的限流限制,存入数据库之后会存入redis一份 用户访问限流次数修改 /limitInfo/get 供网关来获取,会先从redis取,取不到才会获取 路由示例: predicates:[{"name":"Path","args":{"_genkey_0":"/api/**"}}] filters: [{"name":"TokenAuthenticationFilter","args":{}},{"name":"StripPrefix","args":{"_genkey_0":"1"}},{"name":"RateLimiter"}}] 其中RateLimiter 为限流设置,配置之后会去取数据库配置的限流策略,TokenAuthenticationFilter为appKey验证设置 ratelimits: {"routeId":"consumer-service","tokenConfig":{"appKeyAndSecret":{"burstCapacity":10,"replenishRate":10},"clientIp":{"burstCapacity":1,"replenishRate":1}}} 目前仅支持根据appKey和Ip限流,后续可以升级网关服务来,支持更多维度的限流 # gateway-service 功能描述: 定时从网关维护项目获取路由规则及版本号,与本地版本号比较,如果无变化,则不更新本地,如果有变回,清空本地路由规则, 同时获取最新的规则,放入本地 appKey以及appSecret的验证 限流:根据appKey获取当前用户的限流信息,获取不到就走默认的限流, 当前限流不支持,每个appKey每天允许访问多少次,这种计数器限流,只是支持,appKey的qps限流,后续需要扩展,按天总量动态限制, 办法:增加过滤器,或者新增加自定义的限流配置 consul 界面: ![输入图片说明](https://images.gitee.com/uploads/images/2020/0314/173954_cc485de8_5335001.png "屏幕截图.png") 路由规则界面: ![输入图片说明](https://images.gitee.com/uploads/images/2020/0314/174053_cdafe004_5335001.png "屏幕截图.png")