# @go/gateway (高性能动态网关) 基于 `@go/service` 实现的微服务 API 网关。专注于作为“配置下发搬运工”,将繁重的路由转发交由底层 `service` 核心无锁处理。 详细路由语法与基础服务配置请参考:[https://apigo.cc/go/service](https://apigo.cc/go/service) --- ## 1. 基础配置 (env.yml) ```yaml gateway: Redis: "127.0.0.1:6379" # 配置中心 Redis Prefix: "gateway" # 键名前缀 (默认为 gateway) service: Listen: ":80,http" # 监听端口 Register: "127.0.0.1:6379" # 服务发现注册中心 ``` --- ## 2. 动态路由管理 (Redis 示例) 网关以 **Host (域名)** 为单元管理配置,通过向频道发送“域名字符串”触发该域名的局部热更新。 ### A. 配置存储 (HSET) ```bash # 1. 添加 Host 到索引集 (必须) SADD gateway:hosts "api.example.com" # 2. 设置代理/重写/静态规则 (JSON 格式) HSET gateway:host:api.example.com \ proxies '[ {"Path": "/user/*", "ToApp": "user-service", "ToPath": "/v1/*"}, {"Path": "/legacy", "ToApp": "http://10.0.0.1:8080", "ToPath": "/old"} ]' \ rewrites '[ {"Path": "^/api/([0-9]+)$", "ToPath": "/v2/api?id=$1"} ]' \ statics '{ "/ui": "/var/www/html" }' ``` ### B. 发布更新 (PUBLISH) ```bash # 运维仅需发布一条域名消息,网关秒级无损更新 PUBLISH gateway:channel "api.example.com" ``` --- ## 3. 命令行操作 (CLI) ```bash ./gateway start # 后台启动 ./gateway status # 查看各域名健康状态与 IPC 信息 ./gateway reload # 重载本地 YAML 配置并全量刷入 Redis 配置 ./gateway stop # 优雅停止 ``` ## 4. 路由匹配速查 | 匹配模式 | 示例路径 (Path) | 说明 | | :--- | :--- | :--- | | **精确匹配** | `/login` | 必须完全一致 | | **高性能前缀** | `/api/*` | **必须带 `/*` 结尾**,自动剥离前缀转发 | | **正则匹配** | `^/user/(.*)$` | 包含 `(` 即视为正则,支持 `$1` 替换 | --- *更多高级特性如 SSL、负载均衡超时、自动探测应用名等,请查阅 [service 文档](https://apigo.cc/go/service)。*