2026-05-13 00:49:29 +08:00
|
|
|
|
# @go/gateway (高性能动态网关)
|
2026-05-12 23:16:06 +08:00
|
|
|
|
|
2026-05-13 00:49:29 +08:00
|
|
|
|
基于 `@go/service` 实现的微服务 API 网关。专注于作为“配置下发搬运工”,将繁重的路由转发交由底层 `service` 核心无锁处理。
|
2026-05-12 23:16:06 +08:00
|
|
|
|
|
2026-05-13 00:49:29 +08:00
|
|
|
|
---
|
2026-05-12 23:16:06 +08:00
|
|
|
|
|
2026-05-13 00:49:29 +08:00
|
|
|
|
## 🚀 快速开始 (1分钟)
|
2026-05-12 23:16:06 +08:00
|
|
|
|
|
2026-05-13 00:49:29 +08:00
|
|
|
|
### 1. 安装
|
|
|
|
|
|
```bash
|
|
|
|
|
|
go get apigo.cc/go/gateway
|
|
|
|
|
|
```
|
2026-05-12 23:16:06 +08:00
|
|
|
|
|
2026-05-13 00:49:29 +08:00
|
|
|
|
### 2. 运行 (本地配置模式)
|
|
|
|
|
|
创建 `env.yml`:
|
|
|
|
|
|
```yaml
|
|
|
|
|
|
service:
|
|
|
|
|
|
Listen: ":80,http"
|
|
|
|
|
|
Proxies:
|
|
|
|
|
|
"*":
|
|
|
|
|
|
- Path: "/api/*"
|
|
|
|
|
|
ToApp: "my-backend-service" # 转发至服务发现
|
|
|
|
|
|
ToPath: "/v1/*"
|
|
|
|
|
|
```
|
|
|
|
|
|
启动:
|
|
|
|
|
|
```bash
|
|
|
|
|
|
go run . start
|
|
|
|
|
|
```
|
2026-05-12 23:16:06 +08:00
|
|
|
|
|
2026-05-13 00:49:29 +08:00
|
|
|
|
---
|
2026-05-12 23:16:06 +08:00
|
|
|
|
|
2026-05-13 00:49:29 +08:00
|
|
|
|
## 📂 核心配置 (env.yml)
|
2026-05-12 23:16:06 +08:00
|
|
|
|
|
2026-05-13 00:49:29 +08:00
|
|
|
|
网关完全继承了 `service` 的配置能力,详细配置请参考:[https://apigo.cc/go/service](https://apigo.cc/go/service)
|
2026-05-12 23:16:06 +08:00
|
|
|
|
|
2026-05-13 00:49:29 +08:00
|
|
|
|
```yaml
|
|
|
|
|
|
gateway:
|
|
|
|
|
|
Redis: "127.0.0.1:6379" # (可选) 动态配置中心
|
|
|
|
|
|
Prefix: "gateway" # 键名前缀
|
2026-05-12 23:16:06 +08:00
|
|
|
|
|
2026-05-13 00:49:29 +08:00
|
|
|
|
service:
|
|
|
|
|
|
App: "gateway"
|
|
|
|
|
|
Listen: ":80,http|:443" # 支持多端口、SSL
|
|
|
|
|
|
Register: "127.0.0.1:6379" # 服务发现中心
|
|
|
|
|
|
```
|
2026-05-12 23:16:06 +08:00
|
|
|
|
|
2026-05-13 00:49:29 +08:00
|
|
|
|
---
|
2026-05-12 23:16:06 +08:00
|
|
|
|
|
2026-05-13 00:49:29 +08:00
|
|
|
|
## 🔄 动态路由管理 (Redis)
|
2026-05-12 23:16:06 +08:00
|
|
|
|
|
2026-05-13 00:49:29 +08:00
|
|
|
|
网关自动扫描 `gateway:host:*` 格式的键,无需手动维护索引。
|
2026-05-12 23:16:06 +08:00
|
|
|
|
|
2026-05-13 00:49:29 +08:00
|
|
|
|
### A. 设置路由 (HSET)
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 配置域名 gw.test 的代理规则
|
|
|
|
|
|
HSET gateway:host:gw.test proxies '[{"Path":"/api/*","ToApp":"user-svc","ToPath":"/v1/*"}]'
|
2026-05-12 23:16:06 +08:00
|
|
|
|
|
2026-05-13 00:49:29 +08:00
|
|
|
|
# 配置域名 gw.test 的重写规则
|
|
|
|
|
|
HSET gateway:host:gw.test rewrites '[{"Path":"^/old/(.*)$","ToPath":"/new/$1"}]'
|
2026-05-12 23:16:06 +08:00
|
|
|
|
|
2026-05-13 00:49:29 +08:00
|
|
|
|
# 配置域名 gw.test 的静态目录
|
|
|
|
|
|
HSET gateway:host:gw.test statics '{"/ui":"/var/www/html"}'
|
|
|
|
|
|
```
|
2026-05-12 23:16:06 +08:00
|
|
|
|
|
2026-05-13 00:49:29 +08:00
|
|
|
|
### B. 秒级推送到全集群 (PUBLISH)
|
2026-05-12 23:16:06 +08:00
|
|
|
|
```bash
|
2026-05-13 00:49:29 +08:00
|
|
|
|
# 发布域名字符串即可触发该域名的局部热更新
|
|
|
|
|
|
PUBLISH gateway:channel "gw.test"
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
2026-05-12 23:16:06 +08:00
|
|
|
|
|
2026-05-13 00:49:29 +08:00
|
|
|
|
## 🛠 命令行操作 (CLI)
|
2026-05-12 23:16:06 +08:00
|
|
|
|
|
2026-05-13 00:49:29 +08:00
|
|
|
|
```bash
|
|
|
|
|
|
./gateway start # 后台启动
|
|
|
|
|
|
./gateway status # 查看状态(包含:监听地址、动态域名数、日志队列等)
|
|
|
|
|
|
./gateway reload # 重载本地 YAML 并全量刷入 Redis 配置
|
|
|
|
|
|
./gateway stop # 优雅停止
|
2026-05-12 23:16:06 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-05-13 00:49:29 +08:00
|
|
|
|
---
|
2026-05-12 23:16:06 +08:00
|
|
|
|
|
2026-05-13 00:49:29 +08:00
|
|
|
|
## 📝 路由匹配速查
|
2026-05-12 23:16:06 +08:00
|
|
|
|
|
2026-05-13 00:49:29 +08:00
|
|
|
|
| 模式 | 示例 (Path) | 说明 |
|
|
|
|
|
|
| :--- | :--- | :--- |
|
|
|
|
|
|
| **精确** | `/login` | 字符串完全一致 |
|
|
|
|
|
|
| **通配** | `/api/*` | **必须带 `/*` 结尾**,高性能前缀匹配 |
|
|
|
|
|
|
| **正则** | `^/user/(.*)$`| 包含 `(` 即视为正则,支持捕获组 |
|
|
|
|
|
|
|
|
|
|
|
|
*Host 匹配顺序:`精确域名:端口` > `纯域名` > `纯端口` > `*`。*
|