- 基于zk服务注册和服务发现
- 基于netty + json序列化网络通信
- zk连接复用、netty client连接复用
- 可以单独使用,也可以与spring boot集成
- 支持一个类多个版本实现
- 服务端优雅启动,防止流量过早进来,造成超时。在spring容器启动成功后,再注册到zk上。
- zk重新连接时,重新注册关注的事件,恢复现场。对于服务端是重新注册;对于客户端是重新订阅
- netty心跳保活机制,客户端超时断开重连,重连时dubbo invoker不可用,服务端超时关闭无效连接
- 服务端请求用线程池实现,避免阻塞NioEventLoop
- shutdown hook。spring容器销毁时,关闭占用的资源,如netty client/netty server。做加法,也得做减法。
- 服务端优雅下线。在spring容器销毁前(ContextClosedEvent),先从zk取消注册,最后再关闭客户端连接,避免容器销毁时业务请求大量报错。
- netty client通过计数引用销毁资源。
通用需求:
- zk抖动导致所有服务实例下线优化
- 支持protobuf序列化
- 支持http协议通信
- 其他注册中心支持,如consul/redis
- Attachment/tag实现
provider功能:
- 服务端支持曝光实现多个接口的一个类
consumer功能:
- 服务负载均衡算法:随机/轮询/加权,服务同机房路由
- 集群失败策略:failover/failsafe/fallback
控制台规划:
- 服务展示和治理
- 支持管理服务上下线
- 支持动态配置和下发