服务调用过程解析
服务过程解析部分我们分两部分来讲,客户端发送请求、接收结果和服务端接受请求、响应结果过程。
客户端发送请求、接收结果
首先,调用客户端方法时,首先被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处理。
