首先明确一点:RPC(远程服务调用)在消费者端肯定是通过代理模式来实现的。
..
消费者的xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<dubbo:application name="hello-world-app" />
<dubbo:registry address="multicast://224.5.6.7:1234" />
<dubbo:reference id="demoServiceRemote" interface="com.alibaba.dubbo.demo.DemoService" />
</beans>1.容器启动时,注册解析器 DubboNamespaceHandler 读取相关标签生成对应的BeanDefinition交给Spring容器。
..
2.对于消费者来说关键的一项是 dubbo:reference,所以这里分析解析reference到对应的类 ReferenceBean。由于ReferenceBean实现了InitializingBean接口,所以在设置完成bean的所有属性后会调用 afterPropertiesSet 方法。
..
3.afterPropertiesSet 方法来检查配置是否完善,包括consumer、application、module、register、monitor,最后调用getObject (父类 ReferenceConfig 的 init 方法)方法来组装 Invoker。
..
4.init 方法里面关联了所有的application、module、consumer、registry、monitor、service、protocol后调用对应Protocol类的refer方法生成InvokerProxy。当用户调用service时dubbo会通过InvokerProxy调用Invoker的invoke的方法向服务端发起请求。客户端就这样完成了自己的初始化。
..
附录
全部的标签
..
参考
【flashflight的专栏- Dubbo源码分析】http://blog.csdn.net/flashflight/article/details/44318447
【dubbo官方文档】http://dubbo.io/books/dubbo-user-book/preface/
转载于:https://blog.51cto.com/liusw94/2063369