RPCX
- RPCX是Golang借鉴java生态圈中的流行框架构建的功能丰富的微服务平台,实现了一个高性能的、可容错的,插件式的RPC框架。
- RPCX的目标:
简单: 易于学习、易于开发、易于集成和易于发布
高性能:远远高于grpc-go, 更不用说dubbo和motan
服务发现和服务治理:方便开发大规模的微服务集群
跨平台: rpcx 3.0底层不再使用标准rpc库,而是采用跨平台的二进制协议,高效但是方便多语言开发
- 它的特点包括:
1、指出纯的go方法, 不需要额外的定义
2、可插拔的设计,可以方便扩展服务发现插件、tracing等
3、支持 TCP、HTTP、QUIC、KCP等协议
4、支持多种编码方式, 比如JSON、Protobuf、MessagePack 和 原始字节数据
5、服务发现支持 单机对单机、单机对多机、zookeeper、etcd、consul、mDNS等多种发现方式
6、容错支持 Failover、Failfast、Failtry等多种模式
7、负载均衡支持随机选取、顺序选取、一致性哈希、基于权重的选取、基于网络质量的选取和就近选取等多种均衡方式
8、支持压缩
9、支持扩展信息传递(元数据)
10、支持身份验证
11、支持自动heartbeat和单向请求
12、支持metrics、log、timeout、别名、断路器、TLS等特性
服务方法的要求:
1、可见性
2、接收三个参数(context.Context,args ,args2),且最后一个参数应当是指针类型
3、返回一个错误类型
* 服务可以是一个基本类型,也可以是一个自定义的类型这不影响服务
* 服务监听初始化:服务需要有一个TCP/UDP的服务进程来监听,需要实例化监听注册服务
* func NewServer(options ...OptionFn) *Server {
s := &Server{
Plugins: &pluginContainer{
},
options: make(map[string]interface{
}),
}
for _, op := range options {
op(s)
}
return s
}//由此,也可以直接使用Server{
}构造自己需要的服务监视器
type Server struct {
Plugins PluginContainer//包含服务端所有的插件
// AuthFunc 可以用来鉴权,检测客户端的权限
AuthFunc func(ctx context.Context, req *protocol.Message, token string) error
// 包含过滤后或者不可导出的字段
}
//rpcx提供了三个可选的OptionFn启动选项:
func WithReadTimeout(readTimeout time.Duration) OptionFn//读超时
func WithTLSConfig(cfg *tls.Config) OptionFn//tls证书
func WithWriteTimeout(writeTimeout time.Duration) OptionFn//写超时
* config := &tls.Config{
Certificates: []tls.Certificate{
cert}}
s := server.NewServer(server.WithTLSConfig(config))