From f1fdb534b780cc8585545463f5b40b2a45f9333c Mon Sep 17 00:00:00 2001 From: qyx <565485304@qq.com> Date: Wed, 11 May 2022 15:25:18 +0800 Subject: [PATCH] =?UTF-8?q?[=E6=96=B0=E5=A2=9E=E5=8A=9F=E8=83=BD](master):?= =?UTF-8?q?=20=E6=9B=B4=E6=96=B0=E7=BD=91=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 网关相关的基础配置更新 --- cdp-iaas/gateway-server/pom.xml | 27 ++++++++++ .../com/baiye/GatewayServerApplication.java | 19 +++++++ .../GatewayFlowRulesController.java | 36 +++++++++++++ .../src/main/resources/api-group.json | 10 ++++ .../src/main/resources/application.yml | 52 +++++++++++++++++++ .../src/main/resources/gw-flow.json | 14 +++++ 6 files changed, 158 insertions(+) create mode 100644 cdp-iaas/gateway-server/src/main/java/com/baiye/GatewayServerApplication.java create mode 100644 cdp-iaas/gateway-server/src/main/java/com/baiye/controller/GatewayFlowRulesController.java create mode 100644 cdp-iaas/gateway-server/src/main/resources/api-group.json create mode 100644 cdp-iaas/gateway-server/src/main/resources/application.yml create mode 100644 cdp-iaas/gateway-server/src/main/resources/gw-flow.json diff --git a/cdp-iaas/gateway-server/pom.xml b/cdp-iaas/gateway-server/pom.xml index e74d3ba..3a08cd2 100644 --- a/cdp-iaas/gateway-server/pom.xml +++ b/cdp-iaas/gateway-server/pom.xml @@ -16,4 +16,31 @@ 8 + + + + org.springframework.cloud + spring-cloud-starter-gateway + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-sentinel + + + com.alibaba.cloud + spring-cloud-alibaba-sentinel-gateway + + + + com.alibaba.csp + sentinel-datasource-nacos + + + \ No newline at end of file diff --git a/cdp-iaas/gateway-server/src/main/java/com/baiye/GatewayServerApplication.java b/cdp-iaas/gateway-server/src/main/java/com/baiye/GatewayServerApplication.java new file mode 100644 index 0000000..833b2da --- /dev/null +++ b/cdp-iaas/gateway-server/src/main/java/com/baiye/GatewayServerApplication.java @@ -0,0 +1,19 @@ +package com.baiye; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; + +/** + * 网关服务 Application + * + * @author q + * @date 2022/05/11 + */ +@SpringBootApplication +@EnableDiscoveryClient +public class GatewayServerApplication { + public static void main(String[] args) { + SpringApplication.run(GatewayServerApplication.class, args); + } +} diff --git a/cdp-iaas/gateway-server/src/main/java/com/baiye/controller/GatewayFlowRulesController.java b/cdp-iaas/gateway-server/src/main/java/com/baiye/controller/GatewayFlowRulesController.java new file mode 100644 index 0000000..a67540b --- /dev/null +++ b/cdp-iaas/gateway-server/src/main/java/com/baiye/controller/GatewayFlowRulesController.java @@ -0,0 +1,36 @@ +package com.baiye.controller; + +import com.alibaba.csp.sentinel.adapter.gateway.common.api.ApiDefinition; +import com.alibaba.csp.sentinel.adapter.gateway.common.api.GatewayApiDefinitionManager; +import com.alibaba.csp.sentinel.adapter.gateway.common.rule.GatewayFlowRule; +import com.alibaba.csp.sentinel.adapter.gateway.common.rule.GatewayRuleManager; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Set; + +/** + * 网关流量规则控制器 + * + * @author q + * @date 2022/04/20 + */ +@RestController +public class GatewayFlowRulesController { + + /** + * 获取当前系统的限流策略列表 + */ + + @GetMapping("/gw/flow/rules") + public Set getCurrentGatewayFlowRules(){ + return GatewayRuleManager.getRules() ; + } + /** + * 获取自定义的api分组 + */ + @GetMapping("/gw/api/groups") + public Set getApiGroups(){ + return GatewayApiDefinitionManager.getApiDefinitions() ; + } +} diff --git a/cdp-iaas/gateway-server/src/main/resources/api-group.json b/cdp-iaas/gateway-server/src/main/resources/api-group.json new file mode 100644 index 0000000..0c60b52 --- /dev/null +++ b/cdp-iaas/gateway-server/src/main/resources/api-group.json @@ -0,0 +1,10 @@ +[ + { + "apiName": "admin-service-api", + "predicateItems": [ + { + "pattern": "/admin/login" + } + ] + } +] diff --git a/cdp-iaas/gateway-server/src/main/resources/application.yml b/cdp-iaas/gateway-server/src/main/resources/application.yml new file mode 100644 index 0000000..94879ce --- /dev/null +++ b/cdp-iaas/gateway-server/src/main/resources/application.yml @@ -0,0 +1,52 @@ +server: + port: 80 +spring: + application: + name: gateway-server + cloud: + nacos: + discovery: + server-addr: nacos-server:8848 # 修改本机的host文件即可 + gateway: + discovery: + locator: + enabled: true + lower-case-service-id: true # admin-service ADMIN-SERVICE /admin-service/** -> 微服务 (ADMIN-SERVICE) 自动转发,忽略大小写 + routes: + - id: admin-service_router + uri: lb://admin-service # 负载均衡转发到哪个目的地 + predicates: + - Path=/admin/** + - id: test_router + uri: https://www.baidu.com/ # 负载均衡转发到哪个目的地 + predicates: + - Path=/test + # 通过网关来完成对2种维度的限流: 网关维度 + API 分组 + sentinel: + datasource: + # 使用动态规则的数据源 - 把 gw-flow.json| api-group.json 文件放在 Nacos 中配置 + # 使用 Nacos 在持久化我们的配置时候要添加一个依赖 sentinel-datasource-nacos + ds1.nacos: + serverAddr: nacos-server:8848 + dataId: gw-flow + ruleType: gw_flow + ds2.nacos: + serverAddr: nacos-server:8848 + dataId: api-group + ruleType: gw_api_group +# ds1.file: +# file: classpath:gw-flow.json # 网关 + API分组的限流 +# ruleType: gw_flow +# ds2.file: +# file: classpath:api-group.json +# ruleType: gw_api_group + + # 配置 sentinel-dashboard + # 测试环境只能使用本机的环境,直接使用线上是不行的 + # 配置好之后,取代上面的配置方式,直接使用可视化的方式来替代json配置文件的方式 + # sentinel-dashboard 的规则定义好了后,我们的网关能立马的感知到(生效)(nacos无法感知),但是我们下次重启,会丢失规则,所以需要把持久化的规则手动添加到Nacos中 + transport: + dashboard: sentinel-server:8858 + + + diff --git a/cdp-iaas/gateway-server/src/main/resources/gw-flow.json b/cdp-iaas/gateway-server/src/main/resources/gw-flow.json new file mode 100644 index 0000000..d0e2e6f --- /dev/null +++ b/cdp-iaas/gateway-server/src/main/resources/gw-flow.json @@ -0,0 +1,14 @@ +[ + { + "resource": "admin-service_router", + "resourceMode": 0, + "count": 2, + "intervalSec": 60 + }, + { + "resource": "admin-service-api", + "resourceMode": 1, + "count": 1, + "intervalSec": 60 + } +]