gateway/README.md

2.1 KiB
Raw Blame History

@go/gateway (高性能动态网关)

基于 @go/service 实现的微服务 API 网关。专注于作为“配置下发搬运工”,将繁重的路由转发交由底层 service 核心无锁处理。

详细路由语法与基础服务配置请参考:https://apigo.cc/go/service


1. 基础配置 (env.yml)

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)

# 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)

# 运维仅需发布一条域名消息,网关秒级无损更新
PUBLISH gateway:channel "api.example.com"

3. 命令行操作 (CLI)

./gateway start      # 后台启动
./gateway status     # 查看各域名健康状态与 IPC 信息
./gateway reload     # 重载本地 YAML 配置并全量刷入 Redis 配置
./gateway stop       # 优雅停止

4. 路由匹配速查

匹配模式 示例路径 (Path) 说明
精确匹配 /login 必须完全一致
高性能前缀 /api/* 必须带 /* 结尾,自动剥离前缀转发
正则匹配 ^/user/(.*)$ 包含 ( 即视为正则,支持 $1 替换

更多高级特性如 SSL、负载均衡超时、自动探测应用名等请查阅 service 文档