dubbo学习 二 dubbo源码大致查阅
源码的解析在官网都已经写的非常详细,可以参考:http://dubbo.io/Developer+Guide-zh.htm
服务提供者暴露一个服务的详细过程
![](https://images2015.cnblogs.com/blog/1012841/201612/1012841-20161202232538287-549693163.png)
首先ServiceConfig类拿到对外提供服务的实际类ref(如:HelloWorldImpl),然后通过ProxyFactory类的getInvoker方法使用ref生成一个AbstractProxyInvoker实例,到这一步就完成具体服务到Invoker的转化。接下来就是Invoker转换到Exporter的过程。
Dubbo处理服务暴露的关键就在Invoker转换到Exporter的过程(如上图中的红色部分)。 Dubbo协议的Invoker转为Exporter发生在DubboProtocol类的export方法,它主要是打开socket侦听服务,并接收客户端发来的各种请求,通讯细节由Dubbo自己实现。
各种注册中心的实现
![](https://images2015.cnblogs.com/blog/1012841/201612/1012841-20161202232549677-83477337.png)
各种协议的实现
![](https://images2015.cnblogs.com/blog/1012841/201612/1012841-20161202232556334-1883592285.png)
将服务注册到zookeeper
![](https://images2015.cnblogs.com/blog/1012841/201612/1012841-20161202232603052-1195585998.png)
服务消费者消费一个服务的详细过程
![](https://images2015.cnblogs.com/blog/1012841/201612/1012841-20161202232611896-466889363.png)
首先ReferenceConfig类的init方法调用Protocol的refer方法生成Invoker实例(如上图中的红色部分),这是服务消费的关键。接下来把Invoker转换为客户端需要的接口(如:HelloWorld)。这里获取invoker的时候,如果是注册中心同一个服务有多个提供者,消费者会根据配置的负载均衡来选择出一个作为提供者来使用。并且也有各种容错处理机制。
消费端各种容错机制
![](https://images2015.cnblogs.com/blog/1012841/201612/1012841-20161202232619224-1623154430.png)
消费端各种负载均衡机制
![](https://images2015.cnblogs.com/blog/1012841/201612/1012841-20161202232625896-1149526517.png)
使用RandomLoadBalance获取一个提供者
![](https://images2015.cnblogs.com/blog/1012841/201612/1012841-20161202232741802-638427297.png)