dubbo版本2.8.4 消费者远程调用过程
来源:互联网 发布:thinkphp防止sql注入 编辑:程序博客网 时间:2024/06/08 10:20
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.SocketChannelConfigbootstrap.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/z6BzIn7
- https://github.com/dangdangdotcom/dubbox
阅读全文
0 0
- dubbo版本2.8.4 消费者远程调用过程
- dubbo 4 服务消费者到提供者过程
- 远程调用框架dubbo
- 远程调用框架dubbo
- 远程调用框架dubbo
- 远程调用框架dubbo
- Dubbo调用过程监控
- dubbo作为消费者注册过程分析
- dubbo作为消费者注册过程分析
- dubbo 远程服务无法调用
- dubbo 远程服务调用流程
- Dubbo分布式远程服务调用框架(告别Web Service模式中的WSdl,以服务者与消费者的方式在dubbo上注册
- dubbo rpc 调用过程解析
- dubbo 请求调用过程分析
- dubbo请求调用过程分析
- dubbo 请求调用过程分析
- Dubbo的RPC调用过程
- dubbo 搭建 创建消费者 调用消费者 即是消费者又是提供者(六)
- Caffe+Visual Studio 2015编译可以有多简单?
- 做跨境电商_先要有个靠谱的商城系统
- 苦逼人生!
- C++ 静态变量单例模式的误会(线程安全)
- C++搜索与回溯算法之移动问题
- dubbo版本2.8.4 消费者远程调用过程
- 对QTableWidget列表头序号进行重新排序
- 自定义录音播放工具类MediaManager可播放网络音频
- 变量的作用域与生命周期
- C#静态与非静态、构造函数、this关键字、析构函数
- solaris巡检脚本
- AlphaGo是如何战胜柯洁的?
- 网络异常模拟测试方法
- Knight Moves(翻译与题解)