Dubbo cluster 容错具体流程

一、AbstractClusterInvoker invoke (类、方法)

  1. 检测是否销毁 (checkWhetherDestroyed();)
  2. 获取invoke 列表 初始化负载均衡策略
  3. <pre style="margin: 0px;">doInvoke (抽象方法,具体容错策略实现)</pre>

二、****举例:FailoverClusterInvoker doInvoke

  1. <pre style="margin: 0px;">checkInvokers() 判空,</pre>

    <pre style="margin: 10px 0px 0px;">//TODO 获取重试次数 int len = getUrl().getMethodParameter(methodName, RETRIES_KEY, DEFAULT_RETRIES) + 1;</pre>

  2. <pre style="margin: 0px;">循环重试次数 二次检查是否销毁,获取最新invoke列表 </pre>

  3. 根据传入的负载均衡策略选择一个invoker

**三、AbstractClusterInvoker select **

粘滞连接:用于有状态服务,尽可能让客户端总是向同一提供者发起调用

  1. 首次调用记录Invoker

  2. 下次调用,先判断之前是否已经调用用该invoker,若已经调用过,则直接使用

[图片上传中...(image-cd8a14-1597821378831-0)]

四、AbstractClusterInvoker doselect

通过具体的负载均衡策略选择具体的invoker

<pre style="margin: 10px 0px 0px;">Invoker<T> invoker = loadbalance.select(invokers, getUrl(), invocation); </pre>

判断invoker 是否可用 或者是限制内 可能发起重新选择 reselect (选择不再

<pre style="margin: 10px 0px 0px;">selected列表内 & 可用,通过负载均衡策略在选择一次</pre>

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容