Dubbo 服务目录- 服务提供者列表

Dubbo 学习之路

读一本好书,就是在和高尚的人谈话。——歌德

Dubbo 源码学习 Directory

通过Directory服务消费者可获取到服务提供者的信息,比如 ip、端口、服务协议等。有了服务提供列表信息,服务消费者会根据负载均衡算法选择一个具体的服务提供者,发起远程调用。

另一方面服务提供者集群可能会发生动态变化,服务消费者需要能够感知这些变化,动态调整服务提供者列表。

Directory 接口

public interface Directory<T> extends Node {

    /**
     * get service type.
     *
     * @return service type.
     */
    Class<T> getInterface();

    /**
     * list invokers.
     *
     * @return invokers
     */
    List<Invoker<T>> list(Invocation invocation) throws RpcException;

    List<Invoker<T>> getAllInvokers();

    URL getConsumerUrl();

}

其中最重要的方法list(Invocation invocation)  返回目录下Invokers。

Directory 有两个实现类StaticDirectory和  RegistryDirectory

RegistryDirectory

RegistryDirectory 实现了 NotifyListener , 即具有监听注册中心变化,动态更新服务提供者列表功能。

具体发送调用subscribe(URL url) 参考之前文章 Dubbo 源码学习 | 消费端引用梳理 RegistryProtocol.doRefer相关分析

RegistryDirectory notify  触发invoker列表更新

图片

refreshOverrideAndInvoke 方法会根据注册中心最新的服务提供者url 信息 ,刷新invokers。这里的刷新包含添加新的invoker ,关闭旧的中多余的Invoker 。

图片

StaticDirectory

如果是多注册中心情况,所有注册中心的 invokers 汇总成 StaticDirectory,这里有点类似适配器模式,将多注册中心情况与单注册中心情况进行了同一,Directory 需要配置Cluster 使用。

Cluster join(Directorydirectory) 方法将Directory 中invokers 伪装成一个 virtual invoker。

(参考之前文章 Dubbo 源码学习 | 消费端引用梳理)

图片

总结

Directory是Dubbo集群容错、负载均衡的基础,集群容错与负载均衡建立在多个服务提供者基础上,而Directory作用就是提供服务提供者列表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值