Dubbo 的叢集容錯模式:Available Cluster
阿新 • • 發佈:2019-01-27
本文簡單介紹 Dubbo 中的 Available Cluster(可用的例項)。
簡介
呼叫目前可用的例項(只調用一個),如果當前沒有可用的例項,則丟擲異常。
如何使用
<dubbo:service cluster="available" />
或
<dubbo:reference cluster="available" />
實現邏輯
- 遍歷所有的例項
- 遍歷到第一個可用的例項,呼叫該例項
- 如果沒有可用的例項,則丟擲異常
原始碼
public class AvailableClusterInvoker<T> extends AbstractClusterInvoker<T> {
public AvailableClusterInvoker(Directory<T> directory) {
super(directory);
}
@Override
public Result doInvoke(Invocation invocation, List<Invoker<T>> invokers, LoadBalance loadbalance) throws RpcException {
// 呼叫所有可用的例項
for (Invoker<T> invoker : invokers) {
if (invoker.isAvailable()) {
// 例項可用則呼叫
return invoker.invoke(invocation);
}
}
// 如果沒有可用的例項,則丟擲異常
throw new RpcException("No provider available in " + invokers);
}
}
做個有夢想的程式猿