前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Dubbo技术知识总结之六——Dubbo服务调用链路

Dubbo技术知识总结之六——Dubbo服务调用链路

作者头像
剑影啸清寒
发布2020-07-10 11:18:16
1.3K0
发布2020-07-10 11:18:16
举报
文章被收录于专栏:琦小虾的Binary琦小虾的Binary

接上篇《Dubbo技术知识总结之五——Dubbo远程调用》

六. Dubbo 服务调用链路

参考地址:《Dubbo中服务消费者和服务提供者之间的请求和响应过程》

6.1 初始化

服务提供者启动时,对外暴露一个 Exporter,它是一个可以接受外界连接代理对象,接受连接的方式是启动一个 Netty Server 监听连接。

服务消费者启动时,调用 RPC 接口时调用的是一个 Invoker 接口,类型是 RpcInvocation。它是一个通过动态代理方式生成的代理对象,可以通过 Netty Client 连接服务提供者。

6.2 调用链路

6.2.1 消费者发起调用请求

消费者调用 Invoker 时,实际上调用的是一个由 Java 动态代理生成的代理对象。该代理对象经过 Cluster 层的路由与负载均衡,找到一个服务节点,将调用参数封装成 Request 形式,通过 Netty Client 将数据进行序列化,通过 Netty 发送给对应的服务提供者。

6.2.2 提供者处理请求

服务提供者的 Netty Server 监听到消费者发送过来的请求信息,首先进行解码,解码后的内容投入到提供者的线程分发器 AllDispatcher 中,然后服务请求就在线程池中处理。

处理请求时,首先通过请求信息获取提供者的 Invoker 对象,这个 Invoker 对象是一个用 JavassitProxyFactory 生成的代理对象,提供者自己用它获取实际的 RPC 接口实现类,并执行调用的。找到实际的接口实现类,并执行业务逻辑处理后,用同样的方法,将响应封装成 Response,用 Netty 把编码后的响应发送给消费者。

6.2.3 消费者处理响应

消费者接收到提供者发来的响应,解码后投入到线程分发器中,置入线程池。放到线程池的是一个 DefaultFuture 对象,其中包含了响应结果。在前面第一步发起调用请求的过程中,负载均衡之后的调用就是通过 RpcInvocation 代理对象使用 DefaultFuture.get() 方法异步获取响应内容,这也是 RPC 远程调用从同步转为异步的方式。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-07-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 六. Dubbo 服务调用链路
    • 6.1 初始化
      • 6.2 调用链路
        • 6.2.1 消费者发起调用请求
        • 6.2.2 提供者处理请求
        • 6.2.3 消费者处理响应
    相关产品与服务
    负载均衡
    负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档