74 lines
2.1 KiB
Markdown
74 lines
2.1 KiB
Markdown
# @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)。*
|