# gateway-server **Repository Path**: liveBetter/gateway-server ## Basic Information - **Project Name**: gateway-server - **Description**: spring-cloud-gateway开源入门项目 - **Primary Language**: Java - **License**: MPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2020-07-06 - **Last Updated**: 2021-12-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## gateway ## 1.路由转发 ``` [{"args":{"pattern":"/getRoute"},"name":"Path"}] ``` + 路由信息 ![转发](./assets/route1.png) ``` `id` 'route唯一id', `location` 'mapping信息', `uri` '路由转发地址', `orders`'排序规则 最小值为1', `predicates`'断言规则', `filters` '过滤规则', `start_time`'创建时间', `status`'是否启用', `version` '版本信息', `application_name`'应用名称', `method_type`'方法类型', `description`'路由描述 默认为mapping信息' 红色为必输项 ``` + 默认转发规则 ``` uri 是配置转发的服务器地址 , orders 越小越优先 predicates 默认使用 路径转发 还支持请求方法类型, 请求头, cookie, host地址 等等 fitlers 过滤规则 影响转发的因素 ``` ## 2.路由限速 (防止恶意请求) ``` [{"args":{"key-resolver":"{@apiAndIpKeyResolver}","redis-rate-limiter.burstCapacity":"20","redis-rate-limiter.replenishRate":"5"},"name":"RequestRateLimiter"}] ``` + 批量请求转发路由 ![转发](./assets/rate1.png) + 未限速效果 ![转发](./assets/rate2.png) + 限速效果 ![转发](./assets/rate3.png) + 限速日志 抛出429错误代码 ![转发](./assets/rate4.png) ## 3.定时同步 + 数据库配置定时属性,支持刷新,暂停,删除,重启 ![转发](./assets/sync1.png) ## 4.支持熔断 ``` 举例 #设置默认熔断4s hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=4000 #路由增加熔断过滤 ,默认跳转fallback [ {"args":{"description":"限速过滤规则","key-resolver":"#{@apiAndIpKeyResolver}","redis-rate-limiter.burstCapacity":"20","redis-rate-limiter.replenishRate":"5"},"name":"RequestRateLimiter"}, {"args":{"name":"default","description":"熔断过滤规则","fallbackUri":"forward:/fallback"},"name":"Hystrix"} ] 超时提示 @RequestMapping("/fallback") public ReturnVO fallback() { return ReturnVO.fail("服务暂时不可用, 请稍候尝试 !"); } ``` + 测试代码 ``` @PostMapping("hystrix/test") public String hystrixTest(@RequestBody JSONObject params) { log.info("请求参数==>{}",params); try { log.info("-----------sleep 5s-------------"); Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } log.info("请求完成"); return "hystrix success!"; } ``` + 不经过网关 ![转发](./assets/hystrix1.png) + 网关触发熔断 ![转发](./assets/hystrix2.png) ## 5. 日志记录 ``` 记录网关转发的以下信息: `client_address` '客户端地址', `request_address` '请求地址', `gateway_address` '网关转发地址', `url` 'api路径', `method` '请求方法', `request_param` '请求参数', `request_header` '请求头', `response_body` '请求体', `start_time` '请求开始时间', `end_time` '请求结束时间', `spend_time` '时间差ms' 当转发服务器 异常时, 无response_body end_time spend_time ``` ![转发](./assets/record1.png)