dubbo 集群容錯

2021-10-01 19:52:32 字數 2647 閱讀 2537

在收到提供者執行的結果時,當結果處理失敗時,需要對其進行處理。

在reference中,返回的invoker是根據對應的容錯機制生成的invoker

@spi(failovercluster.name)

public inte***ce cluster

public class failovercluster implements cluster 

}

public class failoverclusterinvokerextends abstractclusterinvoker

// retry loop.

rpcexception le = null; // last exception.

list> invoked = new arraylist>(copyinvokers.size());

setproviders = new hashset(len);

//迴圈重試次數

for (int i = 0; i < len; i++)

//選擇對應的invoker

invokerinvoker = select(loadbalance, invocation,

copyinvokers, invoked);

invoked.add(invoker);

rpccontext.getcontext().setinvokers((list)invoked);

try finally

}throw new rpcexception("");

}}

public class failfastclusterinvokerextends abstractclusterinvoker

public result doinvoke(invocation invocation, list> invokers,

loadbalance loadbalance) throws rpcexception catch (throwable e)

}}

public result doinvoke(final invocation invocation, list> 

invokers, loadbalance loadbalance) throws rpcexception catch (rpcexception e) catch (throwable e)

}if (exception != null)

return result;

}

//忽視異常,放入到列表中,定時等待重試

protected result doinvoke(invocation invocation, list> invokers,

loadbalance loadbalance) throws rpcexception catch (throwable e)

} //啟動定時,每隔5秒呼叫

private void addfailed(invocation invocation, abstractclusterinvoker<?> router) catch (throwable t)

}}, 5 * 1000, 5 * 1000, timeunit.milliseconds);}}

} failed.put(invocation, router);

}void retryfailed()

//迴圈呼叫出現異常的invoker

for (map.entry> entry : new

hashmap>(failed).entryset()) catch (throwable e)

}}

public result doinvoke(invocation invocation, list> invokers, 

loadbalance loadbalance) throws rpcexception catch (throwable e)

}

public result doinvoke(final invocation invocation, list> 

invokers, loadbalance loadbalance) throws rpcexception else }}

rpccontext.getcontext().setinvokers((list)selected);

final atomicinteger count = new atomicinteger();

//建立佇列,進入等待,只有呼叫成功或者出現異常達到次數,才喚醒

final blockingqueueref = new linkedblockingqueue();

for (final invokerinvoker : selected) catch(throwable e) }}

});}

try

return (result) ret;

} catch (interruptedexception e)

}

Dubbo 集群容錯

在進行系統設計時候,不僅要考慮正常邏輯該如何走,還要考慮異常邏輯。dubbo中當服務消費方呼叫服務提供方的服務出現錯誤時候,提供了多種容錯方案,預設為 failover 重試。重試。當服務消費方呼叫服務提供者失敗後自動切換,重試其它服務提供者。這通常用於讀操作或者具有冪等的寫操作,需要注意的是重試會...

dubbo 集群容錯

在集群呼叫失敗時,dubbo 提供了多種容錯方案,預設為 failover 重試。集群容錯模式 failover cluster 失敗自動切換,當出現失敗,重試其它伺服器。通常用於讀操作,但重試會帶來更長延遲。可通過 retries 2 來設定重試次數 不含第一次 重試次數配置如下 dubbo se...

Dubbo 集群容錯

二.dubbo集群容錯模式 三.cluster介面及實現類結構圖 四.原始碼解析 4.其它模式 參考原始碼 五.實現自定義cluster 六.使用自定義cluster 這裡不是使用所有服務提供者初始化invoked物件,只是使用了指定長度初始化空的list陣列 list invoked newarr...