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

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

看上图,能看到几个关键的节点: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。

发布了125 篇原创文章 · 获赞 116 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/shipfei_csdn/article/details/103781930