一、AbstractClusterInvoker invoke (类、方法)
- 检测是否销毁 (checkWhetherDestroyed();)
- 获取invoke 列表 初始化负载均衡策略
- <pre style="margin: 0px;">doInvoke (抽象方法,具体容错策略实现)</pre>
二、****举例:FailoverClusterInvoker doInvoke
-
<pre style="margin: 0px;">checkInvokers() 判空,</pre>
<pre style="margin: 10px 0px 0px;">//TODO 获取重试次数 int len = getUrl().getMethodParameter(methodName, RETRIES_KEY, DEFAULT_RETRIES) + 1;</pre>
<pre style="margin: 0px;">循环重试次数 二次检查是否销毁,获取最新invoke列表 </pre>
根据传入的负载均衡策略选择一个invoker
**三、AbstractClusterInvoker select **
粘滞连接:用于有状态服务,尽可能让客户端总是向同一提供者发起调用
首次调用记录Invoker
下次调用,先判断之前是否已经调用用该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>
)