Dubbo集羣容錯模式之Available實現

注: Dubbo版本是2.6.2java

                          

                                                      圖1 AvailableClusterInvoker的類繼承圖ide

1.Available的含義

    Available,顧名思義,就是可使用的服務提供者。spa

2.Dubbo中是怎麼實現

    核心代碼在AvailableClusterInvoker的doInvoke(Invocation,List<Invoker<T>>,LoadBalance)中,源碼以下。code

@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);
}

    實現比較簡單,循環服務提供者列表,找到第一個可以使用的,即invoker.isAvailable()的,然後調用服務。繼承

3.思考

    1. 若是不能修改服務提供者的avaiable屬性值,那麼會有什麼問題? 假設服務提供者有A、B、C、D,且都是可用的。由源碼可知,若是不能改變Invoker的available屬性值,那麼全部的請求都會落到A上,而B、C、D則沒有被調用,因此慎用。源碼

相關文章
相關標籤/搜索