服务治理
Dubbo提供了集群部署、路由、负载均衡等容错机制,在客户端引用服务时,由MockClusterInvoker封装具体的集群策略类,默认是FailoverCluster类,具体逻辑见《4.4.2 远程引用服务》部分。
由集群策略类将Directory中的多个Invoker伪装成一个Invoker,对上层调用端是透明的,不同的集群策略有不同的处理方式。主要流程基本是一致的。
1)首先调用MockClusterInvoker.invoke方法,判断是调用Mock功能还是具体的集群策略类,具体逻辑见《消费端调用》部分。后续调用具体集群策略类的invoke方法。
2)调用Directory.list获取Invoker列表;
3)调用Router.route进行路由选择;
4)LoadBalance进行负载均衡选择;
5)最后获取Invoker对象;
1 集群
一、服务的集群
上图是集群服务的Invoker类的封装顺序。其中,FailoverClusterInovker是默认的集群策略类。
二、注册中心的集群
对于注册中心的Invoker代理的创建,在ReferenceConfig.createProxy方法中处理。
若在消费端配置一个注册地址的,则直接由代理工厂Protocol$Adpative根据注册地址URL中的协议选择RegistryProtocol类,然后调用该类的refer ()方法创建Invoker代理对象并封装成MockClusterInvoker对象返回;
若在消费端配置多个注册地址的,则执行以下逻辑:
1、以每个注册地址URL为参数调用RegistryProtocol. refer ()方法创建Invoker代理对象并封装成MockClusterInvoker对象,生成了Invoker代理列表;
2、选择注册地址列表中最后一个注册地址作为创建最外层MockClusterInvoker对象的URL地址,大致逻辑是:
2.1)在该URL地址中增加cluster参数以及值“available”,表示在存在多个注册地址的情况下只能使用AvailableCluster集群策略;
2.2)使用StaticDirectory