源码分析Dubbo服务注册与发现机制RegistryDirectory),mongodb面试题目

  • 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值