一个高性能、跨平台的 Go 语言分布式 RPC 框架
类似阿里巴巴 Dubbo 和微博 Motan,专为 Go 语言设计。无需定义 proto 文件, 支持多种协议、多种序列化方式、服务发现和服务治理。
package main
type Arith struct{}
func (t *Arith) Mul(ctx context.Context, args *Args, reply *Reply) error {
reply.C = args.A * args.B
return nil
}
// 服务端
s := server.NewServer()
s.RegisterName("Arith", new(Arith), "")
s.Serve("tcp", ":8972")
被以下企业信赖使用
简单易用,性能卓越,功能全面
无需定义 proto 文件,直接使用 Go 函数即可。学习曲线平缓,上手快速。
性能优于或等于 grpc-go,支持连接池、工作池等优化,高并发下表现卓越。
支持多种序列化格式,可与 Java、Python、C++、Node.js 等语言互通。
支持 TCP、HTTP、QUIC、KCP、WebSocket、RDMA 等多种传输协议。
支持服务发现、负载均衡、故障转移、熔断降级等企业级服务治理功能。
支持 TLS 加密、Token 认证、IP 黑名单等安全特性,生产环境稳定运行。
直接使用 Go 语言的原生类型定义服务接口,无需学习额外的 IDL(接口定义语言)。代码即文档,开发效率大幅提升。
// 定义服务方法,签名简单直观
func (t *Arith) Mul(ctx context.Context, args *Args, reply *Reply) error {
reply.C = args.A * args.B
return nil
}
通过插件机制轻松扩展功能。服务发现、链路追踪、限流熔断等功能都可以通过插件实现,核心框架保持轻量。
// 添加插件只需一行代码
s.Plugins.Add(&serverplugin.EtcdV3RegisterPlugin{...})
s.Plugins.Add(&serverplugin.MetricsPlugin{...})
s.Plugins.Add(&CustomPlugin{})
支持多种服务注册中心,包括 etcd、ZooKeeper、Consul、Redis、Nacos、mDNS、DNS 等,适应不同的部署环境。
// etcd 服务发现
d := client.NewEtcdV3Discovery("/rpcx", "Arith",
[]string{"localhost:2379"}, nil)
// Consul 服务发现
d := client.NewConsulDiscovery("rpcx", "Arith",
[]string{"localhost:8500"}, nil)
支持同步调用、异步调用、单向调用、广播调用、分支调用等多种模式,满足各种业务场景需求。
// 同步调用
xclient.Call(ctx, "Method", args, reply)
// 异步调用
xclient.Go(ctx, "Method", args, reply, done)
// 广播调用所有服务
xclient.Broadcast(ctx, "Method", args, reply)
5 分钟上手 rpcx
go get -v github.com/smallnest/rpcx/...
type Args struct {
A int
B int
}
type Reply struct {
C int
}
type Arith struct{}
func (t *Arith) Mul(ctx context.Context, args *Args, reply *Reply) error {
reply.C = args.A * args.B
return nil
}
s := server.NewServer()
s.RegisterName("Arith", new(Arith), "")
s.Serve("tcp", ":8972")
d, _ := client.NewPeer2PeerDiscovery("tcp@localhost:8972", "")
xclient := client.NewXClient("Arith", client.Failtry,
client.RandomSelect, d, client.DefaultOption)
defer xclient.Close()
args := &Args{A: 10, B: 20}
reply := &Reply{}
xclient.Call(context.Background(), "Mul", args, reply)
支持主流注册中心,灵活选择
多种策略,按需选择
随机选择一个服务实例,适合各实例性能相近的场景
依次轮询所有服务实例,请求均匀分配
按权重分配请求,可根据实例性能设置不同权重
一致性哈希,相同参数的请求路由到同一实例
基于 Ping 延迟的加权选择,自动选择响应最快的实例
按地理位置就近选择,降低网络延迟
确保服务高可用
调用失败立即返回错误,不进行重试
调用失败时自动选择其他服务实例重试
调用失败时重试当前服务实例
同时向多个实例发送请求,取最快响应
适应不同场景需求
稳定可靠,适用于大多数场景
方便调试,支持跨语言调用
基于 UDP 的高性能协议
可靠 UDP,低延迟传输
浏览器友好,实时通信
本机高性能通信
支持多种编码格式
rpcx 自定义二进制协议,序列化和反序列化性能最佳
标准 JSON 格式,可读性强,方便调试和跨语言调用
Google Protocol Buffers,高性能且向后兼容
二进制 JSON 格式,比 JSON 更小更快
Apache Thrift 序列化格式
rpcx 在性能测试中表现优异
根据官方测试(Intel Xeon E5-2630 v3 @ 2.40GHz, 32 cores),rpcx 在吞吐量和延迟方面都表现出色。
丰富的工具和插件
丰富的示例帮助你快速上手
详细的使用文档和 API 参考