1. 更详细的duboo的集群路由和负载均衡机制分析
首先进入XXClusterInvoker类:
invoke(final Invocation invocation)-> Directory.list(invocation)
进入XXDirectory(RegistryDirectory)类:
list(invocation)->doList(Invocation invocation)-> router.route(invokers,getConsumerUrl(), invocation);
进入XXRouter类:
route(List<Invoker<T>> invokers, URL url,Invocation invocation)
返回XXClusterInvoker类:
->doInvoke(Invocation invocation, final List<Invoker<T>>invokers, LoadBalance loadbalance)-> select(LoadBalance loadbalance,Invocation invocation, List<Invoker<T>> invokers,List<Invoker<T>> selected)-> doselect(LoadBalance loadbalance,Invocation invocation, List<Invoker<T>> invokers,List<Invoker<T>>)-> loadbalance.select(invokers, getUrl(),invocation);
进入XX loadbalance类:
-> doSelect(List<Invoker<T>> arg0, URL arg1,Invocation arg2)
---整个cluster的调度流程总体如上述
2.在这个流程中我们可以对三到四个层面进行扩展重写
(1)Cluster和ClusterInvoker
(2)Directory
(3)Router
(4)loadbalance
--其中(1)和(4)已经实践过没问题,(2)和(3)的扩展没试过,尤其是router的扩展貌似不能直接在XML配置文件上使用,而是要手工写到注册中心。