一個基于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返回消息給服務調用者:

關注公眾號“一米源碼”了解更多精品文章

浙公網安備 33010602011771號