discover/README.md

49 lines
2.0 KiB
Markdown
Raw Normal View History

# Discover
基于 Redis 的极简服务发现与负载均衡组件。
## 核心特性
- **自动注册与发现**: 基于 Redis 的服务节点自动注册、心跳维持及实时更新。
- **智能负载均衡**: 支持按权重分配、自动剔除故障节点、重试机制。
- **无感透传**: 自动处理微服务间的 Header 透传(如 TraceID、UserID 等)。
- **多协议支持**: 支持 HTTP/1.1、HTTP/2 (H2C)、WebSocket。
## 配置参考
```yaml
discover:
registry: redis://127.0.0.1:6379/15 # 注册中心地址
app: my-service # 当前应用名称
weight: 100 # 节点权重
calls: # 调用的服务定义
auth: 1s:my-token:2 # 服务名: 超时:Token:HTTP版本
user: 500ms
```
## API 指南
### 初始化与启动
- `Start(addr string) bool`: 启动服务发现,指定当前节点的外部访问地址。
- `EasyStart() (string, int)`: 自动监听可用端口并启动服务发现。返回 IP 和端口。
- `Stop()`: 停止服务并注销节点。
### 服务调用 (Caller)
- `NewCaller(request *http.Request, logger *log.Logger) *Caller`: 创建调用器。传入原始请求可自动透传 Header。
- `Caller.Get / Post / Put / Delete / Head`: 发起同步请求。
- `Caller.Do(method, app, path, data, headers...)`: 发起通用请求,返回 `http.Result`
- `Caller.Open(app, path, headers...)`: 发起 WebSocket 连接。
### 手动管理
- `AddExternalApp(app, callConf string)`: 手动添加需要发现的外部应用。
- `SetNode(app, addr string, weight int)`: 手动设置某个服务的节点信息。
### 负载均衡与路由
- `SetLoadBalancer(lb LoadBalancer)`: 自定义全局负载均衡策略。
- `SetRoute(route func(ac *AppClient, r *http.Request))`: 设置全局路由拦截规则。
## 环境变量
- `DISCOVER_REGISTRY`: 注册中心地址。
- `DISCOVER_APP`: 应用名。
- `DISCOVER_WEIGHT`: 节点权重。
- `DISCOVER_CALLS`: 调用的应用定义。
- `DISCOVER_LISTEN`: EasyStart 监听地址。