dubbo版本2.8.4 消费者远程调用过程
Posted 全力付出
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dubbo版本2.8.4 消费者远程调用过程相关的知识,希望对你有一定的参考价值。
dubbo远程调用过程
一、Invoker发送消息到服务器
- 首先是
FailoverClusterInvoker
的invoke()
方法FailoverClusterInvoker
的doInvoke()
方法选择负载均衡(loadbalance)方式调用后续方法InvokerWrapper
的invoke()
方法FutureFilter
的invoke
方法拦截后续invoke
方法,并设置异步或同步返回值ListenerInvokerWrapper
的invoke()
方法DubboInvoker
的doInvoke()
方法使用HeaderExchangeClient
(netty实现)发送请求,最后采用ExchangeCodec
的encodeRequest()
方法序列化(默认序列化协议hessian2
)数据DefaultFuture
异步阻塞线程RemotingInvocationTimeoutScan
检测是否超时,设置callback
接收返回值
二、线程接收服务器返回值
NettyHandler
的messageReceived()
方法接收消息,传递给AllChannelHandler
处理AllChannelHandler
的received()
方法启动ChannelEventRunnable
线程接收服务端RECEIVED
事件DecodeHandler
将结果解码(decode)HeaderExchangeHandler
的received()
方法接收返回结果DefaultFuture
的received()
方法设置callback
返回值
NettyHandler
设置netty client里
ClientBootstrap bootstrap = new ClientBootstrap(channelFactory);
// config
// @see org.jboss.netty.channel.socket.SocketChannelConfig
bootstrap.setOption("keepAlive", true);
bootstrap.setOption("tcpNoDelay", true);
bootstrap.setOption("connectTimeoutMillis", getTimeout());
final NettyHandler nettyHandler = new NettyHandler(getUrl(), this);
bootstrap.setPipelineFactory(new ChannelPipelineFactory()
public ChannelPipeline getPipeline()
NettyCodecAdapter adapter = new NettyCodecAdapter(getCodec(), getUrl(), NettyClient.this);
ChannelPipeline pipeline = Channels.pipeline();
pipeline.addLast("decoder", adapter.getDecoder());
pipeline.addLast("encoder", adapter.getEncoder());
pipeline.addLast("handler", nettyHandler);
return pipeline;
);
三、创建远程调用(Invoker)流程图
四、参考
以上是关于dubbo版本2.8.4 消费者远程调用过程的主要内容,如果未能解决你的问题,请参考以下文章