dubbo版本2.8.4 消费者远程调用过程

本文详细介绍了Dubbo远程调用的过程,包括Invoker发送消息到服务器的具体步骤、线程如何接收服务器返回值以及创建远程调用(Invoker)的流程。通过FailoverClusterInvoker、ListenerInvokerWrapper等组件实现消息发送,利用NettyHandler接收返回结果。

dubbo远程调用过程

一、Invoker发送消息到服务器

  1. 首先是FailoverClusterInvokerinvoke()方法
  2. FailoverClusterInvokerdoInvoke()方法选择负载均衡(loadbalance)方式调用后续方法
  3. InvokerWrapperinvoke()方法
  4. FutureFilterinvoke方法拦截后续invoke方法,并设置异步或同步返回值
  5. ListenerInvokerWrapperinvoke()方法
  6. DubboInvokerdoInvoke()方法使用HeaderExchangeClient(netty实现)发送请求,最后采用ExchangeCodecencodeRequest()方法序列化(默认序列化协议hessian2)数据
  7. DefaultFuture异步阻塞线程RemotingInvocationTimeoutScan检测是否超时,设置callback接收返回值

二、线程接收服务器返回值

  1. NettyHandlermessageReceived()方法接收消息,传递给AllChannelHandler处理
  2. AllChannelHandlerreceived()方法启动ChannelEventRunnable线程接收服务端RECEIVED事件
  3. DecodeHandler将结果解码(decode)
  4. HeaderExchangeHandlerreceived()方法接收返回结果
  5. DefaultFuturereceived()方法设置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 consumer

四、参考

  1. http://www.tuicool.com/articles/z6BzIn7
  2. https://github.com/dangdangdotcom/dubbox
内容概要:文章以“智能网页数据标注工具”为例,深入探讨了谷歌浏览器扩展在毕业设计中的实战应用。通过开发具备实体识别、情感分类等功能的浏览器扩展,学生能够融合前端开发、自然语言处理(NLP)、本地存储与模型推理等技术,实现高效的网页数据标注系统。文中详细解析了扩展的技术架构,涵盖Manifest V3配置、内容脚本与Service Worker协作、TensorFlow.js模型在浏览器端的轻量化部署与推理流程,并提供了核心代码实现,包括文本选择、标注工具栏动态生成、高亮显示及模型预测功能。同时展望了多模态标注、主动学习与边缘计算协同等未来发展方向。; 适合人群:具备前端开发基础、熟悉JavaScript和浏览器机制,有一定AI模型应用经验的计算机相关专业本科生或研究生,尤其适合将浏览器扩展与人工智能结合进行毕业设计的学生。; 使用场景及目标:①掌握浏览器扩展开发全流程,理解内容脚本、Service Worker与弹出页的通信机制;②实现在浏览器端运行轻量级AI模型(如NER、情感分析)的技术方案;③构建可用于真实场景的数据标注工具,提升标注效率并探索主动学习、协同标注等智能化功能。; 阅读建议:建议结合代码实例搭建开发环境,逐步实现标注功能并集成本地模型推理。重点关注模型轻量化、内存管理与DOM操作的稳定性,在实践中理解浏览器扩展的安全机制与性能优化策略。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值