一个轻量级的 Go RPC 框架,参考 Apache Dubbo 设计,提供服务注册发现、负载均衡、熔断降级、管理后台等核心能力。
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ Consumer │──TCP──│ Registry │──TCP──│ Provider │
│ (Client) │ │ (服务注册中心)│ │ (Server) │
└──────┬───────┘ └──────────────┘ └──────┬───────┘
│ │ │
│ ┌─────────────────┤ │
│ │ Admin Console │ │
│ │ (管理后台) │ │
│ └─────────────────┘ │
│ │
└──────────── TCP RPC Call ────────────────────┘
| 模块 | 路径 | 说明 |
|---|---|---|
| Protocol | protocol/ |
二进制传输协议(类 Dubbo 协议) |
| Codec | codec/ |
JSON 序列化/反序列化 |
| Registry | registry/ |
服务注册与发现(支持内存/etcd) |
| Server | server/ |
RPC 服务端,注册服务并处理调用 |
| Client | client/ |
RPC 客户端,服务发现 + 远程调用 |
| LoadBalance | loadbalance/ |
负载均衡(Random/RoundRobin/Weighted) |
| CircuitBreaker | circuitbreaker/ |
熔断器 + 服务降级 |
| Admin | admin/ |
Web 管理后台(类 Dubbo Admin) |
go run cmd/admin/main.go启动后访问:
- Admin 管理后台: http://localhost:8080
- RPC 服务端: tcp://localhost:9001
go run cmd/provider/main.go -addr :9001go run cmd/consumer/main.go -provider :9001+-------+--------+--------+-----------+----------+--------+------+
| Magic | Version| MsgType| Serialize | RequestID| BodyLen| Body |
| 2B | 1B | 1B | 1B | 8B | 4B | N B |
+-------+--------+--------+-----------+----------+--------+------+
- Magic:
0xDABB(协议标识) - MsgType: Request(0x01) / Response(0x02) / Heartbeat(0x03)
- Serialize: JSON(0x01)
// 定义服务
type GreeterService struct{}
func (s *GreeterService) SayHello(name string) (string, error) {
return "Hello, " + name, nil
}
// Provider 注册服务
server := server.NewServer(":9001", registry)
server.Register("GreeterService", &GreeterService{}, "1.0.0")
server.Start()
// Consumer 调用服务
client := client.NewClient(registry)
resp, err := client.Call(ctx, "GreeterService", "SayHello", "World")- TCP 二进制协议通信
- 基于反射的服务注册和方法调用
- 服务注册与发现(内存注册中心)
- 连接池管理
- 负载均衡(Random / RoundRobin / WeightedRandom)
- 熔断器(Closed / Open / HalfOpen 状态机)
- 服务降级(Fallback 回调)
- Admin 管理后台(服务列表、Provider/Consumer 管理、熔断器监控)
- 服务启用/禁用管理
- etcd 注册中心
- 链路追踪
- 指标监控 (Prometheus)