mirror of
https://github.com/zhwei820/learn.lianglianglee.com.git
synced 2025-11-19 23:53:48 +08:00
fix img
This commit is contained in:
@@ -302,12 +302,12 @@ function hide_canvas() {
|
||||
<li>……</li>
|
||||
</ul>
|
||||
<p>为了解决上述问题,<strong>Dubbo 独立出了一个实现集群功能的模块—— dubbo-cluster</strong>。</p>
|
||||
<p><img src="assets/Ciqc1F-qN92ADHx8AACiY_cvusQ921.png" alt="Drawing 0.png" /></p>
|
||||
<p><img src="assets/Ciqc1F-qN92ADHx8AACiY_cvusQ921.png" alt="png" /></p>
|
||||
<p>dubbo-cluster 结构图</p>
|
||||
<p>作为 dubbo-cluster 模块分析的第一课时,我们就首先来了解一下 dubbo-cluster 模块的架构以及最核心的 Cluster 接口。</p>
|
||||
<h3>Cluster 架构</h3>
|
||||
<p>dubbo-cluster 模块的主要功能是将多个 Provider 伪装成一个 Provider 供 Consumer 调用,其中涉及集群的容错处理、路由规则的处理以及负载均衡。下图展示了 dubbo-cluster 的核心组件:</p>
|
||||
<p><img src="assets/Ciqc1F-qY-CAQ08VAAFAZaC5kyU044.png" alt="Lark20201110-175555.png" /></p>
|
||||
<p><img src="assets/Ciqc1F-qY-CAQ08VAAFAZaC5kyU044.png" alt="png" /></p>
|
||||
<p>Cluster 核心接口图</p>
|
||||
<p>由图我们可以看出,dubbo-cluster 主要包括以下四个核心接口:</p>
|
||||
<ul>
|
||||
@@ -335,7 +335,7 @@ function hide_canvas() {
|
||||
<p><strong>AbstractDirectory 是 Directory 接口的抽象实现</strong>,其中除了维护 Consumer 端的 URL 信息,还维护了一个 RouterChain 对象,用于记录当前使用的 Router 对象集合,也就是后面课时要介绍的路由规则。</p>
|
||||
<p>AbstractDirectory 对 list() 方法的实现也比较简单,就是直接委托给了 doList() 方法,doList() 是个抽象方法,由 AbstractDirectory 的子类具体实现。</p>
|
||||
<p><strong>Directory 接口有 RegistryDirectory 和 StaticDirectory 两个具体实现</strong>,如下图所示:</p>
|
||||
<p><img src="assets/Ciqc1F-qN_-AMVHmAAA3C6TAxsA315.png" alt="Drawing 2.png" /></p>
|
||||
<p><img src="assets/Ciqc1F-qN_-AMVHmAAA3C6TAxsA315.png" alt="png" /></p>
|
||||
<p>Directory 接口继承关系图</p>
|
||||
<p>其中,<strong>RegistryDirectory 实现</strong>中维护的 Invoker 集合会随着注册中心中维护的注册信息<strong>动态</strong>发生变化,这就依赖了 ZooKeeper 等注册中心的推送能力;<strong>StaticDirectory 实现</strong>中维护的 Invoker 集合则是<strong>静态</strong>的,在 StaticDirectory 对象创建完成之后,不会再发生变化。</p>
|
||||
<p>下面我们就来分别介绍 Directory 接口的这两个具体实现。</p>
|
||||
@@ -402,7 +402,7 @@ function hide_canvas() {
|
||||
}
|
||||
</code></pre>
|
||||
<p>我们看到除了作为 NotifyListener 监听器之外,RegistryDirectory 内部还有两个 ConfigurationListener 的内部类(继承关系如下图所示),为了保持连贯,这两个监听器的具体原理我们在后面的课时中会详细介绍,这里先不展开讲述。</p>
|
||||
<p><img src="assets/CgqCHl-qOBmAbzKkAABZPyC5mIA963.png" alt="Drawing 3.png" /></p>
|
||||
<p><img src="assets/CgqCHl-qOBmAbzKkAABZPyC5mIA963.png" alt="png" /></p>
|
||||
<p>RegistryDirectory 内部的 ConfigurationListener 实现</p>
|
||||
<p>通过前面对 Registry 的介绍我们知道,在注册 NotifyListener 的时候,监听的是 providers、configurators 和 routers 三个目录,所以在这三个目录下发生变化的时候,就会触发 RegistryDirectory 的 notify() 方法。</p>
|
||||
<p>在 RegistryDirectory.notify() 方法中,首先会按照 category 对发生变化的 URL 进行分类,分成 configurators、routers、providers 三类,并分别对不同类型的 URL 进行处理:</p>
|
||||
|
||||
Reference in New Issue
Block a user