简单介绍
如果前面都理解的话,并且netty的demo做过的话,这步就很好理解了,主要就是客户端请求服务器的一个过程。下面是官网提供的一个图,用来解释他的调用过程:
从上面的图可以看出代理对象proxy产生之后,如果不做cache(缓存),mock(本地伪装)的话,并且有多个invoker的情况下换根据负载均衡机制选择一个invoker进行请求,中间有很多filter,主要做统计用的,然后通过客户端client请求数据,最后将数据解码返回出去。除去中间的filter与负载均衡机制,其实就是一个普通的netty调用的一个过程。
源码跟踪
服务都起来以后,我们调用下接口,在调用远程服务地方打个断点,然后F5进入里面的源码:
F5继续往下:
到这一步,在代码的232行,调用的过程中会从注册中心找相关的invoker,如果有多个服务的话,会返回多个,同时会加载系统配置的负载均衡策略,然后我们继续F5进入doInvoker():
继续执行里面的invoker,中间有很多filer,一直往下到DubboInvoker中,如图:
到这里好像有点意思了,这里会选择一个客户端赋值给currentClient,然后请求服务端数据。currentClient包含了请求的客户端,要请求的地址,inv包含了请求的参数。我们继续往下:
图中可以看出是用netty进行发送数据,req是要发送的数据。一路往下:
可以看出确实是用netty进行发送数据请求的。如果有兴趣可以继续深入看看如何发送数据的。这里就不再跟进了。最后会将请求得到的数据封装后返回:
这里就返回了我得到的数据。