- private static final Cluster cluster = ExtensionLoader.getExtensionLoader(Cluster.class).getAdaptiveExtension();
集群策略,默认为failover。
-
private static final RouterFactory routerFactory = ExtensionLoader.getExtensionLoader (RouterFactory.class).getAdaptiveExtension()路由工厂,可以通过监控中心或治理中心配置。
-
private static final ConfiguratorFactory configuratorFactory = ExtensionLoader.getExtensionLoader(ConfiguratorFactory.class).getAdaptiveExtension();配置实现工厂类。
-
private final String serviceKey; 服务key,默认为服务接口名。com.alibaba.dubbo.registry.RegistryService,注册中心在Dubbo中也是使用服务暴露。
-
private final Class< T > serviceType;服务提供者接口类,例如interface com.alibaba.dubbo.demo.DemoService
-
private final Map< String, String> queryMap:服务消费者URL中的所有属性。
-
private final URL directoryUrl;注册中心URL,只保留消息消费者URL查询属性,也就是queryMap。
-
private final String[] serviceMethods:引用服务提供者方法数组。
-
private final boolean multiGroup:是否引用多个服务组。
-
private Protocol protocol:协议。
-
private Registry registry:注册中心实现者。
-
private volatile List< Configurator> configurators;配置信息。
-
private volatile Map< String, Invoker< T>> urlInvokerMap; 服务URL对应的Invoker(服务提供者调用器)。
-
private volatile Map< String, List< Invoker< T>>> methodInvokerMap; methodName : List< Invoker< T >>,
dubbo:method 对应的Invoker缓存表。
- private volatile Set< URL > cachedInvokerUrls; 当前缓存的所有URL提供者URL。
2、RegistryDirectory 构造方法详解
public RegistryDirectory(Class serviceType, URL url) { // @1
super(url);
if (serviceType == null)
throw new IllegalArgumentException(“service type is null.”);
if (url.getServiceKey() == null || url.getServiceKey().length() == 0)
throw new IllegalArgumentException(“registry serviceKey is null.”);
this.serviceType = serviceType;
this.serviceKey = url.getServiceKey(); // @2
this.queryMap = StringUtils.parseQueryString(url.getParameterAndDecoded(Constants.REFER_KEY)); // @3
this.overrideDirectoryUrl = this.directoryUrl = url.setPath(url.getServiceInterface()).clearParameters().addParameters(queryMap).removeParameter(Constants.MONITOR_KEY); //@4
String group = directoryUrl.getParameter(Constants.GROUP_KEY, “”);
this.multiGroup = group != null && ("*".equals(group) || group.contains(","));
String methods = queryMap.get(Constants.METHODS_KEY);
this.serviceMethods = methods == null ? null : Constants.COMMA_SPLIT_PATTERN.split(methods); // @5
}
代码@1:参数描述,serviceType:消费者引用的服务< dubbo:reference interface="" …/>;URL url:注册中心的URL,例如:
zookeeper://127.0.0.1:2181/com.alibaba.dubbo.registry.RegistryService?application=demo-consumer&dubbo=2.0.0&pid=5552&qos.port=3