一个基于dubbo协议的服务远程调用全过程

服务调用端:

当我们调用服务的时候Dubbo会生成一个代理对象,然后调用InvokerInvocationHandler#invoke方法

 

 

AbstractClusterInvoker#invoke:设置负载均衡器

FailoverClusterInvoker#doInvoke:处理集群容错,负载均衡选择一个后端服务

.........省略了一堆invoker的研究

 

经过一系列的invokers和Netty的handler后,最终调用Netty Client将消息发送出去,默认使用Netty(还有Mina,Grizzly)

 

 

服务提供端:

NettyServer启动后就可以以netty来监听端口并接收消息。接收到消息后再调用相应的DubboHandler,解析消息,最终找到需要的Service,再通过反射来调用invoker。请求到达服务端,首先会执行Netty的handler:

 

 

 

 reply会调用一堆的dubbo invokers,最终到达你的服务:

 

 然后会开启另一个线程处理response,首先会经过dubbo的一堆Invokers,然后再经过Netty的一堆 outbond handler:

 

 最终通过NioSocketChannel#doWrite返回消息给服务调用者:

 

 

关注公众号“一米源码”了解更多精品文章

posted on 2021-06-14 16:39  itproject-manager  阅读(345)  评论(0编辑  收藏  举报