Dubbo服务调用过程,流程图解析

快来打我* 2023-06-26 10:44 32阅读 0赞

今天整理资料的时候,发现一张dubbo的调用流程图(出自哪位大神),感觉蛮有价值的,特此记录下。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NoaXBmZWlfY3Nkbg_size_16_color_FFFFFF_t_70

看上图,能看到几个关键的节点:ReferenceBean,invoker代理,cluster,loadBalance,invoke方法。

  1. 处理注解,ServiceAnnotationBeanPostProcessor和ReferenceAnnotationBeanPostProcessor。
  2. ReferenceConfig比较核心,组装url参数,创建动态代理invoker,其中url会注册到zookeeper或者dubbo等注册中心,url带有各种属性信息,贯穿处理流程始终。
  3. 创建invoker动态代理对象时根据是否存在registry注册中心和url个数,决定是创建cluster invoker,还是直接创建对应protocol的代理对象,创建完成后即返回,具体调用时会走loadbalance等机制
  4. 使用dubbo的spi机制,也就是动态获取处理类的机制,处理wrapper类型。
  5. cluster处理,cluster本身也是一个invoker,在调用cluster的invoke方法时,cluster会获取对应的directory下的invoker列表,registryDirectory会从注册中心订阅provider信息,然后根据 protocol(如dubbo)生成对应的invoker,再通过router做过滤,返回invoker列表。
  6. cluster获取invoker列表后,走loadbalance,有多种loadbalance(如roundrobin、一致性哈希等)。
  7. 调用具体invoker的invoke方法。
  8. 不同协议的invoker(如dubbo)底层会通过netty或者grizzly机制创建client和对方通信,可以是共享client,也可以one client per connection,invoker将handler暴露给client,client获取消息后经过一系列消息处理回调handler。

发表评论

表情:
评论列表 (有 0 条评论,32人围观)

还没有评论,来说两句吧...

相关阅读