Dubbo

Dubbo源码分析(二)Invocation

本文将主要围绕Invocation这个抽象概念进行讲解,首先来看一下相关的类图结构。

Dubbo Invocation

整体概念

  1. Invocation,一次具体的调用,包含方法名、参数类型、参数
  2. Result,一次调用结果,包含value和exception
  3. Invoker,调用者,对应一个服务接口,通过invoke方法执行调用,参数为Invocation,返回值为Result

DubboInvoker

  • 通过ExchangeClient发送调用请求(Invocation)
  • doInvoke()分为oneWay、async、sync调用
  • 对client的选择采用轮询的方式

ThriftInvoker

与sync调用基本相同

AbstractClusterInvoker

  • 多个服务端实例组成的集群,可以设定针对多组实例的选择策略
  • 维护Directory对象,通过list方法查找一个Invocation对应的Invokers
  • 具有select方法,invokers作为参数传递给select()

选择策略:通过LoadBalance来选取Invoker,若选出的Invoker已经被选择过,则进行reselct()

7种集群调用策略

FailfastClusterInvoker

select之后只调用一次,失败立即返回错误

FailoverClusterInvoker

重试n次,每次更新selected集合,保证失败后切换到另一个Invoker

FailbackClusterInvoker

select后发起一次调用,若失败则将Invoker加入失败列表,定期重试

FailsafeClusterInvoker

select后发起一次调用,若失败忽略异常,返回一个空Result

AvailableClusterInvoker

不进行select,仅选取第一个available的Invoker

BroadcastClusterInvoker

不进行select,每个Invoker都调用一次

ForkingClusterInvoker

不进行select,对所有分组并行发起调用,最快的调用完成后返回结果

© 2015, 高飞航.cn. 版权所有.

About gaofeihang

开发工程师,本站的作者。欢迎留下您宝贵的意见!

发表评论

电子邮件地址不会被公开。 必填项已用*标注