zoukankan      html  css  js  c++  java
  • dubbo源码4-cluster

    cluster包定义了dubbo集群相关封装,主要使用在消费端。

    cluster包根目录下类定义了集群相关的顶层抽象,主要包括:

    Router: 消费时实现服务端机器过滤功能。 参见 https://dubbo.apache.org/zh/docs/v2.7/user/examples/routing-rule/。代码上体现为传入invoker list返回一个过滤后的invoker list。

    RouteChain: 通过传入的url配置信息获取RouteFactory列表,然后通过RouteFactory列表获取Router列表,该类会维护一个invoker列表,对外提供的接口就是一个route方法,返回经过router列表过滤后的invoker list。

    Directory: 定义一个服务,内部维护该服务的提供者列表(invoker list)。 对外接口主要是获取当前服务的interface和获取该服务的提供者列表(list)。具体实现在cluster包里有StaticDirectory。 

    Cluster:可以理解为集群版本invoker的工厂,该接口主要对外输出的是invoker,接收Directory作为参数。

    LoadBalance: 多服务提供者的负载均衡。 传入服务者列表(invoker list), 返回单个invoker。

    Router和LoadBalance的功能定义比较类似,都是对服务提供者的选择。 Router是实现过滤功能,而LoadBalance是实现选择,比如LoadBalance的实现有一致性hash选择、随机选择、顺序选择等。

    下面从消费者代码看这些类是如何串联起来的:

    首先在服务消费者引用外部服务时会调用ReferenceConfig的get方法。

     get方法内部会调用ReferenceConfig的init方法。

    init内部再调用createProxy方法创建代理:

     createProxy内部通过protocol传入url创建invoker list。 然后通过如下代码创建最终的invoker:

     > 首先创建StaticDirectory。 静态Directory是Directory的一个实现类,主要实现的逻辑是先通过静态传入invoker list,然后通过调用RouteChain进行invoker的过滤获得过滤后的invoker。

    1. 获取静态invoker list

     2. RouteChain过滤:

    > 然后获取指定集群,这里以AvailableCluster为例,直接返回对应的invoker,比如availableCluster直接返回availableClusterInvoker。

    最后在availableclusterinvoker中顺序找到一个available的invoker执行:

    有个疑问点,就是如何通过url获取到invoker list,url中只存储了register的信息,如何通过register最终生成invoker list? todo:

  • 相关阅读:
    delphi res 字符串资源
    delphi label1 文字在窗体上水平来回移动
    delphi Edit
    delphi CoolBar这个怎么弄没了
    delphi Components[i]清除所有edit控件中的内容
    delphi Caption 垂直显示标签文本
    delphi array应用 DayOfWeek星期几判断
    delphi 2010 资源文件使用
    delphi 18 屏蔽和替换 右键菜单
    delphi 16 网页缩放
  • 原文地址:https://www.cnblogs.com/caiyao/p/14911737.html
Copyright © 2011-2022 走看看