dubbo版本2.8.4 消费者远程调用过程
2017-05-26 13:16
411 查看
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)流程图
四、参考
http://www.tuicool.com/articles/z6BzIn7https://github.com/dangdangdotcom/dubbox
相关文章推荐
- Dubbo分布式远程服务调用框架(告别Web Service模式中的WSdl,以服务者与消费者的方式在dubbo上注册
- dubbo远程调用过程中,把参数bean转换成了HashMap
- PHP升级到4.3版本之后改变了调用存储过程的一个特性
- PHP升级到4.3版本之后改变了调用存储过程的一个特性
- android中的跨进程通信的实现(一)——远程调用过程和aidl
- JDBC远程调用mysql存储过程错误
- SQL Server设备管理器显示‘调用远程过程失败’
- RemObjects(一)客户端远程调用服务端接口过程
- RMI远程调用过程
- 如何通过dblink truncate远程数据库上的表+调用远程存储过程,提示ORA 02064 .
- android中的跨进程通信的实现(一)——远程调用过程和aidl
- PHP升级到4.3版本之后改变了调用存储过程的一个特性
- PHP升级到4.3版本之后改变了调用存储过程的一个特性
- PHP升级到4.3版本之后改变了调用存储过程的一个特性
- android中的跨进程通信的实现(一)——远程调用过程和aidl
- PHP升级到4.3版本之后改变了调用存储过程的一个特性
- PHP升级到4.3版本之后改变了调用存储过程的一个特性
- 运用ORACLE的OO4O类库函数解决调用存储过程向远程数据库上传超过32K图片失败的问题
- 远程调用框架dubbo