dubbo服务引用

spring引用服务

  1. 解析自定义标签: <dubbo:reference interface=“com.aya.service.DemoService” id=“demoService” />
  2. spring 用 DubboBeanDefinitionParser 创建 ReferenceBean对象。 ReferenceBean实现了spring的接口FactoryBean, 事实上创建的对象是 DemoService
  3. 在spring 生命周期:创建所有的单例对象中, 执行dubbo消费者暴露(参考dubbo引用服务), 由于实现了spring的接口 InitializingBean, 最后会检查applciation,provider等属性的设置,以及在这里暴露服务(这里的暴露服务指的是创建对象)
    在这里插入图片描述

dubbo引用服务

  1. ReferenceConfig.get 执行会将application,consumer等属性设置到ReferenceConfig中, 接下详细描述过程: 用Protocol.refer创建invoker对象,以及 createProxy 用invoker创建DemoService的代理对象
  2. protocol.refer 实际上执行 RegistryProtocol.refer , RegistryProtocol 有自包装特性,创建的时候会包装ProtocolFilterWrapper 和 ProtocolListenerWrapper, 这两个包装类对 注册中心类型做了特殊处理,在RegistryProtocol.refer 之前什么也不做。
  3. RegistryProtocol.refer 会执行 ZookeeperRegistry的操作, 将会对zk注册临时节点,订阅提供者节点,当提供者变化时,能获得及时更改
  4. 然后RegistryProtocol.refer会调用DubboProtocol.refer,生成DubboInvoker对象,生成DubboInvoker的时候,如果是第一次,则初始化netty客户端连接。 DubboProtocol同样也会在外部包装ProtocolFilterWrapper,ProtocolListenerWrapper, 用于给invoke加入过滤器和注册监听器
  5. 获得了Invoker对象后, 还需要加入筛选规则。执行 FailoverCluster.join
  6. FailoverCluster 在创建时的包装类: MockClusterWrapper, MockClusterWrapper 在方法调用时,处理mock配置。FailoverCluster 是dubbo默认的执行失败的规则。即: 失败转移,当出现失败,重试其它服务器。 在原有的invoker的基础上增加了 MockClusterInvoker和FailoverClusterInvoker,看起来像这样: new MockClusterInvoker(new FailoverClusterInvoker(invokerList))
  7. 把invoker处理完毕后,需要通过invoker创建DemoService的代理对象。JavassistProxyFactory.getProxy, JavassistProxyFactory创建时加入包装类: StubProxyFactoryWrapper。创建的方式:(T) Proxy.getProxy(interfaces).newInstance(new InvokerInvocationHandler(invoker))。 那么DemoService的代理对象就创建完成了, 当执行demoService.sayHello的时候,由 InvokerInvocationHandler 执行方法的处理过程

在这里插入图片描述
dubbo的服务引用流程图很长, 事实上就是两个步骤: 获得Invoker和创建代理对象。

官方服务引用文档:http://dubbo.apache.org/zh-cn/docs/source_code_guide/refer-service.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值