服务治理中间件 Dubbo 原理解析( 消费者发起调用)读书笔记

服务消费方发起请求
1.当服务的消费方引用了某远程服务,服务的应用方在 spring 的配置实例如下:
   <dubbo:reference id="demoService" interface="com.alibaba.dubbo.demo.DemoService" />
   demoService 实例其实是代理工厂生产的代理对象(大家可以参考代理那部分生
   成的伪代码),在代码中调用 demoService.sayHello(“world!”)时,1. 将方法名方法参数传入 
   InvokerInvocationHandler 的 invoke 方
   对于 Object 中的方法 toString, hashCode, equals 直接调用 invoker 的对应方法,
   这里对于 Object 的方法需要被远程调用吗?调用了是不是报错比默认处理更好呢??
   远程调用层是以 Invocation, Result 为中心, 这里根据要调用的方法以及传入
   的参数构建 RpcInvocation 对象,作为 Invoker 的入参
2. MockClusterInvoker 根据参数提供了三种调用策略
   不需要mock,直接调用 FailoverClusterInvoker
   强制mock,调用 mock 先调 FailoverClusterInvoker,调用失败在 mock
3. FailoverClusterInvoker 默认调用策略
   通过目录服务查找到所有订阅的服务提供者的 Invoker 对象
   路由服务根据策略来过滤选择调用的 Invokers
   通过负载均衡策略LoadBalance来选择一个Invoker
4. 执行选择的 Invoker.inoker(invocation)
   经过监听器链,默认没有
   经过过滤器链,内置实现了很多
    执行到远程调用的 DubboInvoker
5. DubboInvoker
   根据url也就是根据服务提供者的长连接,这里封装成交互层对象
   ExchangeClient 供这里调用
   判断远程调用类型同步,异步还是 oneway 模式
   ExchangeClient 发起远程调用,底层 remoting 不在这里描述了
   获取调用结果:Oneway 返回空 RpcResult
   异步,直接返回空 RpcResult, ResponseFuture 回调
   同步, ResponseFuture 模式同步转异步,等待响应返回服务提供方接收调用请求
   同样我们也是 rpc 调用层 DubboProtocol 层开始分析,对于通信层 remoting 的数
   据接收反序列等等过程不做分析。
   DubboProtocol的requestHandler是ExchangeHandler的实现,是remoting 层接收
   数据后的回调。
6.requestHandler.replay 
    方法接收请求消息,这里只处理远程调用消息 Invocation。
   1. 通过 Invocation 获取服务名和端口组成 serviceKey=com.alibaba.dubbo.demo.
      DemoService:20880, 从 DubboProtocol 的 exproterMap 中获取暴露服务的
     DubboExporter, 在从 dubboExporter 获取 invoker 返回
   2. 经过过滤器链
   3. 经过监听器链
   4. 到达执行真正调用的 invoker, 这个 invoker 由代理工厂 ProxyFactory.
     getInvoker(demoService, DemoService.class, registryUrl)创建,具体请看代理那
     部分介绍。
     调用 demoService 实例方法,将结果封装成 RpcResult 返回
   5. 交换层构建 Response,通过 Remoting 层编码传输将结果响应给调用方

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

icool_ali

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值