服务调用过程解析
服务过程解析部分我们分两部分来讲,客户端发送请求、接收结果和服务端接受请求、响应结果过程。
客户端发送请求、接收结果
首先,调用客户端方法时,首先被InvokerInvocationHandler
拦截,
1 | public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { |
接下来,我们指定XxxClusterInvoker
为FailoverClusterInvoker
来分析整个流程。FailoverClusterInvoker
的结构如下:
所以,接下来会走进AbstractClusterInvoker
的invoker方法中:
1 | public Result invoke(final Invocation invocation) throws RpcException { |
获取完所有可用的Invoker
后,继续看FailoverClusterInvoker
的处理逻辑:
1 | public Result doInvoke(Invocation invocation, final List<Invoker<T>> invokers, LoadBalance loadbalance) throws RpcException { |
接下来看DubboInvoker
的处理逻辑。
1 | protected Result doInvoke(final Invocation invocation) throws Throwable { |
而后,HeaderExchangeClient
会调用HeaderExchangeChannel
的request
方法。
1 | public ResponseFuture request(Object request, int timeout) throws RemotingException { |
这里,值得一提的是DefaultFuture
是客户端发送请求到获取结果的桥梁。channel.send
下面即为Netty
的处理逻辑:
这里会先经过EncoderHandler
(NettyCodecAdapter.InternalEncoder)进行编码处理,最后由NettyHandler
发送请求。
服务端结果响应后,会由DecodeHandler
(NettyCodecAdapter.InternalDncoder)进行解码后,交由NettyHanlder
处理。