Dubbo Consumer引用服务的方法是什么
导读:本文共10561字符,通常情况下阅读需要35分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: Consumer消费者Demo示例<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:dubbo="http://dubb... ...
目录
(为您整理了一些要点),点击可以直达。在之前的章节中已经知道,Dubbo基于Spring自定义标签规范实现了自定义标签,通过自定义标签完成了bean的加载,并且通过实现监听Spring容器刷新完毕事件启动dubbo客户端。启动客户端伴随着服务发布和服务的订阅。
dubbo通过<dubbo:reference
标签引用服务,之后在程序中通过Spring的Context依赖查找(getBean)的方式获取引用的服务的代理实例。<dubbo:reference
加载的Bean是ReferenceBean,它实现了FactoryBean接口,getBean时会调用ReferenceBean的getObject()方法,这是获取引用的入口。getBean方法会判断Reference对象是否是空的,如果是空的,调用init方法。代码如下:
ReferenceBean
继承了ReferenceConfig
,当调用ReferenceBean的getObject()方法会调用ReferenceBean
的get()方法。
创建代理服务会创建Invoker,在引用服务过程中,会判断协议是否为injvm,会根据协议做不同的处理,不是injvm协议会根据构造的配置信息(map)生成url并将url协议有zookeeper://改成registry://,然后通过Protocol
接口refer
方法引用服务,与发布服务相似,引用服务的过程也会包装方法的调用链,如下:
- ProtocolListenerWrapper
- - ProtocolFilterWrapper
- - - RegistryProtocol
在refer的过程中会对一个服务端的引用和一个服务多个服务端的服务进行区分处理,对于有多个服务端的服务会进行集群处理(cluster),会讲invoker列表加入到集群中,在调用过程中会根据集群策略来选择不同的策略进行调用,集群策略实现也实现了SPI机制,
RegistryProtocol#doRefer
方法,directory.subscribe会按照下面的调用链进行处理,最后调用ZookeeperRegistry#doSubscribe
方法向zk注册数据订阅接口,并设置监听。
- RegistryDirectory
- - ListenerRegistryWrapper
- - - FailbackRegistry
- - - - ZookeeperRegistry
refer服务创建Invoker时会调用该方法,该方法会通过getClients
创建网络客户端,创建客户端是会判断客户端是否为共享链接,根据connections
创建客户端ExchangeClient
,然后通过initClient
初始化客户端,初始化过程中会判断是否为延迟的客户端LazyConnectExchangeClient
,不是延迟客户端,就会通过connect
连接服务提供者,与服务提供者连接,具体建立连接流程不在这里说明,会在网络通信介绍。
Dubbo Consumer引用服务的方法是什么的详细内容,希望对您有所帮助,信息来源于网络。