# gateway管理 **Repository Path**: miaoguoxin/gateway_management ## Basic Information - **Project Name**: gateway管理 - **Description**: 网关+可视化平台 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 69 - **Forks**: 48 - **Created**: 2019-03-24 - **Last Updated**: 2025-09-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Gateway Management System 🚀 一个企业级的微服务API网关管理系统,提供完整的网关功能和可视化管理平台。 ## 📖 项目介绍 本项目是一个基于 **Spring Cloud Gateway** 的高性能API网关系统,结合若依管理系统提供可视化的网关配置和监控功能。项目致力于为微服务架构提供统一的入口、安全控制、流量管理和监控能力。 ### 🎯 设计理念 - **高性能**: 基于WebFlux响应式编程,支持高并发场景 - **易管理**: 提供完整的可视化管理界面 - **高可用**: 支持集群部署,配置动态刷新 - **易扩展**: 模块化设计,支持自定义过滤器和插件 ## ✨ 核心特性 ### 🛡️ API Gateway 核心功能 #### 🔐 安全与认证 - **认证验证**: 支持基于API配置的认证验证机制 - **IP黑白名单**: 基于布隆过滤器的高性能IP过滤,支持百万级IP快速检查 - **权限控制**: 细粒度的API访问权限控制 #### 🚦 流量控制与容错 - **分布式限流**: 基于Redis的令牌桶算法,支持多种限流策略(IP、用户、API等) - **熔断器**: 分布式熔断器,提供故障隔离和快速恢复能力 - **负载均衡**: 支持多种负载均衡策略和灰度路由 - **超时控制**: 可配置的请求超时和重试机制 #### 📊 监控与指标 - **实时监控**: 详细的API调用指标收集(QPS、响应时间、错误率等) - **健康检查**: 多维度的系统健康状态检查(Redis、数据库、JVM、磁盘) - **链路追踪**: 请求追踪ID支持,便于问题定位 - **访问日志**: 结构化的访问日志记录 #### ⚡ 性能优化 - **响应式Redis**: 全面升级为响应式Redis操作,显著提升高并发性能 - **异步处理**: 全异步的请求处理流程 - **连接池优化**: HTTP客户端连接池配置 #### 🔧 配置管理 - **动态路由**: 支持动态添加、修改、删除路由,无需重启 - **配置验证**: 完整的配置有效性验证 - **热更新**: 基于Redis Topic的集群配置同步 ### 🖥️ 管理平台功能 #### 📊 可视化管理 - **路由管理**: 基于若依管理系统的路由配置界面 - **实时监控**: 丰富的监控图表和统计数据 - **系统配置**: 网关参数和功能开关配置 #### 🔍 API文档聚合 - **Swagger集成**: 自动聚合后端服务的API文档 - **在线测试**: 支持在线API测试功能 ## 🏗️ 系统架构 ### 整体架构 ``` ┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐ │ Client Apps │───▶│ API Gateway │───▶│ Microservices │ │ │ │ (executor-api- │ │ │ │ Web/Mobile/... │ │ gateway) │ │ Service A/B/C │ └─────────────────┘ └──────────────────┘ └─────────────────┘ │ ▼ ┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐ │ Admin Console │───▶│ Management │───▶│ Configuration │ │ │ │ Platform │ │ │ │ (ruoyi-admin) │ │ (ruoyi-*) │ │ Redis/MySQL │ └─────────────────┘ └──────────────────┘ └─────────────────┘ ``` ### API Gateway 内部架构 ``` ┌─────────────────────────────────────┐ │ API Gateway │ │ │ ┌─────────────┐ │ ┌─────────────────────────────────┐ │ ┌──────────────┐ │ Client │────┼─▶│ Global Filters │ │───▶│ Backend │ │ Request │ │ │ │ │ │ Services │ └─────────────┘ │ │ • Auth Verify Filter │ │ └──────────────┘ │ │ • Rate Limit Filter │ │ │ │ • Circuit Breaker Filter │ │ │ │ • IP Blacklist Filter │ │ │ │ • Trace ID Filter │ │ │ │ • Access Log Filter │ │ │ └─────────────────────────────────┘ │ │ │ │ ┌─────────────────────────────────┐ │ │ │ Route Predicates │ │ │ │ │ │ │ │ • Path Matching │ │ │ │ • Header Matching │ │ │ │ • Method Matching │ │ │ └─────────────────────────────────┘ │ │ │ │ ┌─────────────────────────────────┐ │ │ │ Core Services │ │ │ │ │ │ │ │ • Dynamic Route Service │ │ │ │ • Metrics Service │ │ │ │ • Bloom Filter Service │ │ │ │ • Exception Handler │ │ │ └─────────────────────────────────┘ │ └─────────────────────────────────────┘ ``` ## 📁 项目结构 ``` gateway_management/ ├── executor-api-gateway/ # API网关核心模块 ⭐ │ ├── src/main/java/com/executor/gateway/ │ │ ├── config/ # 配置类 │ │ │ ├── ReactiveRedisConfig.java # 响应式Redis配置 │ │ │ ├── ExceptionConfiguration.java # 异常处理配置 │ │ │ └── BloomFilterConfig.java # 布隆过滤器配置 │ │ ├── controller/ # 控制器 │ │ │ ├── MonitoringController.java # 监控接口 │ │ │ ├── ConfigurationController.java # 配置管理 │ │ │ ├── CircuitBreakerTestController.java # 熔断器测试 │ │ │ ├── MetricsTestController.java # 指标测试 │ │ │ ├── ExceptionTestController.java # 异常测试 │ │ │ ├── EnhancedHealthController.java # 健康检查 │ │ │ ├── SwaggerHandlerController.java # Swagger聚合 │ │ │ └── FallbackController.java # 降级处理 │ │ ├── core/ # 核心组件 │ │ │ ├── GlobalExceptionHandler.java # 全局异常处理器 ⭐ │ │ │ ├── constant/ # 常量定义 │ │ │ └── exception/ # 自定义异常 │ │ ├── filters/ # 过滤器 ⭐ │ │ │ ├── global/ # 全局过滤器 │ │ │ │ ├── IpListGlobalFilter.java # IP黑白名单 │ │ │ │ └── response/ # 响应处理 │ │ │ ├── auth/ # 认证过滤器 │ │ │ │ └── AuthVerifyGatewayFilterFactory.java │ │ │ ├── ratelimiter/ # 限流过滤器 │ │ │ │ ├── CustomerRateLimiter.java # 自定义限流器 │ │ │ │ └── RateCheckGatewayFilterFactory.java │ │ │ ├── tracing/ # 追踪过滤器 │ │ │ │ └── TraceIdGlobalFilter.java # 链路追踪 │ │ │ ├── logging/ # 日志过滤器 │ │ │ │ └── AccessLogGlobalFilter.java # 访问日志 │ │ │ └── resilience/ # 容错过滤器 │ │ │ └── CircuitBreakerGlobalFilter.java # 熔断器 │ │ ├── service/ # 服务层 ⭐ │ │ │ ├── DynamicRouteService.java # 动态路由服务 │ │ │ ├── MetricsService.java # 指标服务 │ │ │ └── impl/ # 服务实现 │ │ └── model/ # 数据模型 │ ├── src/main/resources/ │ │ ├── scripts/ # Lua脚本 │ │ │ └── circuit_breaker_increment.lua # 熔断器脚本 │ │ ├── bootstrap.yml # 引导配置 │ │ └── application-*.yml # 环境配置 │ └── README.md # 详细文档 ├── ruoyi-admin/ # 管理后台 ├── ruoyi-framework/ # 框架核心 ├── ruoyi-system/ # 系统管理 ├── ruoyi-common/ # 公共组件 ├── ruoyi-generator/ # 代码生成 ├── ruoyi-quartz/ # 定时任务 └── sql/ # 数据库脚本 ``` ### 🎯 核心模块说明 | 模块 | 描述 | 主要功能 | |------|------|----------| | **executor-api-gateway** | API网关核心 | 请求路由、安全认证、流量控制、监控等 | | **ruoyi-admin** | 管理后台 | 网关配置、监控面板、用户管理等 | | **ruoyi-framework** | 框架核心 | 安全框架、数据访问、缓存等 | | **ruoyi-system** | 系统管理 | 用户、角色、权限、字典等 | ## 🚀 快速开始 ### 📋 环境要求 | 组件 | 版本要求 | 说明 | |------|----------|------| | **JDK** | 8+ | 支持JDK 8及以上版本 | | **Maven** | 3.6+ | 项目构建工具 | | **MySQL** | 5.7+ | 数据存储 | | **Redis** | 5.0+ | 缓存和配置存储 | | **Zookeeper** | 3.6+ | 服务发现(可选) | ### 🛠️ 安装部署 #### 1️⃣ 数据库初始化 ```bash # 导入数据库脚本 mysql -u root -p < sql/gateway_management.sql ``` #### 2️⃣ 配置文件修改 **管理平台配置** (`ruoyi-admin/src/main/resources/application.yml`): ```yaml # 数据库配置 spring: datasource: url: jdbc:mysql://localhost:3306/gateway_management?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: root password: your_password # Redis配置 redis: host: localhost port: 6379 password: your_redis_password database: 0 ``` **API网关配置** (`executor-api-gateway/src/main/resources/bootstrap.yml`): ```yaml server: port: 8081 spring: application: name: executor-api-gateway # Redis配置 redis: host: localhost port: 6379 password: your_redis_password database: 0 # 数据库配置 datasource: url: jdbc:mysql://localhost:3306/gateway_management?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: root password: your_password # 网关增强配置 gateway: exception: enhanced-mode: true # 启用增强异常处理 record-metrics: true # 记录异常指标 include-trace-id: true # 包含追踪ID metrics: enhanced-mode: true # 启用增强指标模式 redis-enabled: true # 启用Redis存储 database-enabled: false # 禁用数据库存储 ``` #### 3️⃣ 启动服务 ```bash # 启动管理平台 cd ruoyi-admin mvn spring-boot:run # 启动API网关 cd executor-api-gateway mvn spring-boot:run ``` #### 4️⃣ 访问系统 | 服务 | 访问地址 | 说明 | |------|----------|------| | **管理后台** | http://localhost:8090/gateway/login | 默认账号: admin / admin | | **API网关** | http://localhost:8081 | 网关服务入口 | | **Swagger文档** | http://localhost:8081/swagger-ui.html | API文档聚合 | | **健康检查** | http://localhost:8081/actuator/health | 系统健康状态 | ### 🔧 配置指南 #### 动态路由配置 1. **登录管理后台**: http://localhost:8090/gateway/login 2. **进入路由管理**: 系统管理 → 网关管理 → 路由配置 3. **添加新路由**: - 路由ID: `user-service` - 路由URI: `lb://user-service` - 断言: `Path=/api/user/**` - 过滤器: `StripPrefix=2` #### IP黑白名单配置 1. **进入IP管理**: 系统管理 → 网关管理 → IP管理 2. **添加IP规则**: - IP地址: `192.168.1.100` - 类型: 黑名单/白名单 - 状态: 启用 #### 限流策略配置 1. **进入限流管理**: 系统管理 → 网关管理 → 限流配置 2. **配置限流规则**: - 限流类型: IP/用户/API - 限流阈值: 100/分钟 - 突发容量: 200 ### 🧪 测试接口 API网关提供了丰富的测试接口用于验证功能: #### 异常处理测试 ```bash # 测试404错误 curl http://localhost:8081/test/exception/not-found # 测试400错误 curl http://localhost:8081/test/exception/bad-request # 测试401错误 curl http://localhost:8081/test/exception/unauthorized # 切换异常处理模式 curl -X POST http://localhost:8081/test/exception/toggle-mode ``` #### 熔断器测试 ```bash # 查看熔断器状态 curl http://localhost:8081/test/circuit-breaker/status/user-service # 手动触发熔断 curl -X POST http://localhost:8081/test/circuit-breaker/open/user-service # 重置熔断器 curl -X POST http://localhost:8081/test/circuit-breaker/reset/user-service ``` #### 指标监控测试 ```bash # 查看指标状态 curl http://localhost:8081/test/metrics/status # 查看API统计 curl "http://localhost:8081/api/monitoring/api-stats?apiPath=/api/user&startTime=2024-01-01T00:00:00&endTime=2024-01-31T23:59:59" # 手动持久化指标 curl -X POST http://localhost:8081/test/metrics/persist ``` #### 健康检查 ```bash # 完整健康检查 curl http://localhost:8081/health # 就绪检查 curl http://localhost:8081/health/ready # 存活检查 curl http://localhost:8081/health/live ``` ### 🔍 监控与运维 #### 日志查看 ```bash # API网关日志 tail -f executor-api-gateway/logs/gateway.log # 访问日志 tail -f executor-api-gateway/logs/access.log # 错误日志 tail -f executor-api-gateway/logs/error.log ``` #### 性能监控 - **JVM监控**: 通过 `/actuator/metrics` 端点获取JVM指标 - **Redis监控**: 通过管理后台查看Redis连接状态 - **API监控**: 通过 `/api/monitoring/*` 接口查看API统计 #### 集群部署 1. **多实例部署**: 启动多个API网关实例 2. **负载均衡**: 使用Nginx或其他负载均衡器 3. **配置同步**: 基于Redis Topic实现配置自动同步 ## 🛠️ 技术栈 ### 后端技术栈 | 技术 | 版本 | 说明 | |------|------|------| | **Spring Boot** | 2.7.x | 应用框架 | | **Spring Cloud Gateway** | 3.1.x | API网关核心 | | **Spring WebFlux** | 5.3.x | 响应式Web框架 | | **Spring Data Redis** | 2.7.x | Redis数据访问 | | **Spring Security** | 5.7.x | 安全框架 | | **MyBatis Plus** | 3.5.x | ORM框架 | | **HikariCP** | 4.0.x | 数据库连接池 | | **Jackson** | 2.13.x | JSON处理 | | **JWT** | 0.11.x | Token认证 | | **Lombok** | 1.18.x | 代码简化 | ### 中间件技术栈 | 中间件 | 版本 | 用途 | |--------|------|------| | **MySQL** | 5.7+ | 主数据库 | | **Redis** | 5.0+ | 缓存、限流、熔断器状态 | | **Zookeeper** | 3.6+ | 服务发现 | | **RabbitMQ** | 3.8+ | 消息队列 | ### 监控与运维 | 工具 | 说明 | |------|------| | **Spring Boot Actuator** | 应用监控和管理 | | **Micrometer** | 指标收集 | | **Logback** | 日志管理 | | **Swagger/OpenAPI** | API文档 | ## 🔥 核心亮点 ### 💡 创新特性 1. **响应式Redis优化**: 全面升级为响应式Redis操作,在高并发场景下性能提升显著 2. **智能异常处理**: 支持传统/增强双模式,提供详细的异常分类和追踪 3. **分布式熔断器**: 基于Redis Lua脚本实现的原子性熔断器,避免竞态条件 4. **高性能IP过滤**: 基于布隆过滤器的IP黑白名单,支持百万级IP快速检查 5. **动态路由管理**: 支持运行时动态添加、修改、删除路由配置 ### 🚀 性能优势 - **高并发支持**: 基于WebFlux的全异步处理,支持数万并发连接 - **低延迟**: 响应式编程模型,减少线程阻塞和上下文切换 - **内存优化**: 使用LongAdder和AtomicLong优化计数器性能 - **缓存策略**: 多层缓存设计,减少数据库访问 ### 🛡️ 企业级特性 - **高可用**: 支持多实例集群部署,无单点故障 - **可观测性**: 完整的监控、日志、追踪体系 - **安全性**: 多重安全防护,支持JWT、IP过滤、CORS等 - **可扩展**: 模块化设计,支持自定义过滤器和插件 ## 📚 扩展阅读 ### 官方文档 - [Spring Cloud Gateway 官方文档](https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/) - [Spring WebFlux 官方文档](https://docs.spring.io/spring-framework/docs/current/reference/html/web-reactive.html) - [若依框架文档](http://doc.ruoyi.vip/) ### 技术文章 - API网关设计实践 - 响应式编程在网关中的应用 - 分布式限流算法详解 - 熔断器模式实现原理 ## 🤝 参与贡献 我们欢迎所有形式的贡献,包括但不限于: ### 🐛 Bug报告 - 在 [Issues](https://github.com/your-repo/gateway_management/issues) 中报告问题 - 提供详细的复现步骤和环境信息 - 包含错误日志和堆栈信息 ### 💡 功能建议 - 在 [Issues](https://github.com/your-repo/gateway_management/issues) 中提出新功能建议 - 描述功能的使用场景和预期效果 - 提供设计思路和实现方案 ### 🔧 代码贡献 1. Fork 本仓库 2. 创建特性分支: `git checkout -b feature/amazing-feature` 3. 提交更改: `git commit -m 'Add some amazing feature'` 4. 推送分支: `git push origin feature/amazing-feature` 5. 提交 Pull Request ### 📖 文档完善 - 改进现有文档的准确性和可读性 - 添加使用示例和最佳实践 - 翻译文档到其他语言 ## 📄 许可证 本项目基于 [Apache License 2.0](LICENSE) 许可证开源。 ## 🙏 致谢 感谢以下开源项目和社区的支持: - [Spring Cloud Gateway](https://github.com/spring-cloud/spring-cloud-gateway) - [若依管理系统](https://github.com/yangzongzhuan/RuoYi) - [Spring Boot](https://github.com/spring-projects/spring-boot) - [Redis](https://github.com/redis/redis) ---
**如果这个项目对你有帮助,请给我们一个 ⭐️** [🏠 首页](https://github.com/your-repo/gateway_management) | [📖 文档](./docs/README.md) | [🐛 问题反馈](https://github.com/your-repo/gateway_management/issues) | [💬 讨论](https://github.com/your-repo/gateway_management/discussions)