dubbo(https://github.com/apache/dubbo)是一个分布式服务框架,提供了RPC调用、容错与负载均衡,服务注册与发现。
启动流程如下:
1. 服务提供者注册服务,将自身的信息(IP,端口,提供的服务)发布到注册中心(zookeeper,nacos,redisd等)。
2. 服务消费者请求注册中心,拉取要调用的服务信息(IP,端口),然后发起远程调用。
在服务测, dubbo会对实现类生成wapper,然后监听接口。
在消费测,dubbo通过对接口的解析生成一个代理类,在调用的时候,其实就是在调用这个代理类,代理类内的方法基本都是同样的实现,就是对调用信息(类,方法,参数,返回值)信息进行拼装,通过 集群负载策略(轮询,轮询带权重...) + 容错策略(failfast,failover...) + 序列化(protobuf,hessian2) + 协议(dubbo, grpc,thrift) + 网络通信(netty, http)发起调用请求。
在学习dubbo的过程中,有两个地方要注意:
1. dubbo的扩展机制,如上所示,在发起调用的时候,有很多的实现可供选择,这些选择就是通过dubbo的扩展机制实现。
2. dubbo URL,无论是发布注册还是订阅,还是调用,dubbo的很多信息都是组装在url上的,很多扩展机制也是基于url进行扩展选择。
我的注解版: