| <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Apache Dubbo – 注册中心</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/registry/</link><description>Recent content in 注册中心 on Apache Dubbo</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><atom:link href="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/registry/index.xml" rel="self" type="application/rss+xml"/><item><title>Overview: 注册中心概述</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/registry/overview/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/registry/overview/</guid><description> |
| <p>注册中心是 Dubbo 服务治理的核心组件,Dubbo 依赖注册中心的协调实现服务(地址)发现,自动化的服务发现是微服务实现动态扩缩容、负载均衡、、流量治理的基础。Dubbo 的服务发现机制经历了 Dubbo2 时代的接口级服务发现、Dubbo3 时代的应用级服务发现,具体可参见 <a href="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/concepts-and-architecture/service-discovery/">服务发现机制</a> 解析了解具体演进过程。</p> |
| <h2 id="基本使用">基本使用</h2> |
| <p>开发应用时必须指定 Dubbo 注册中心(registry)组件,配置很简单,只需指定注册中心的集群地址即可:</p> |
| <p>以 Spring Boot 开发为例,在 application.yml 增加 registry 配置项目</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span>dubbo |
| </span></span><span style="display:flex;"><span> registry |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">address</span>: {protocol}://{cluster-address} |
| </span></span></code></pre></div><p>其中,protocol 为选择的配置中心类型,cluster-address 为访问注册中心的集群地址,如</p> |
| <p><code>address: nacos://localhost:8848</code></p> |
| <p>如需集群格式地址可使用 backup 参数</p> |
| <p><code>address: nacos://localhost:8848?backup=localshot:8846,localshot:8847</code></p> |
| <blockquote> |
| <p>应用必须指定 Dubbo 注册中心,即使不启用注册中心也要配置(可通过设置地址为空 address=&lsquo;N/A&rsquo; )。</p> |
| </blockquote> |
| <p>除了 其余根据每个配置中心的不同,可以参考 <a href="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/config/properties/#registry">registry 配置参考手册</a>或通过 parameters 参数进行扩展。</p> |
| <h2 id="配置中心与元数据中心">配置中心与元数据中心</h2> |
| <p>配置中心、元数据中心是实现 Dubbo 高阶服务治理能力的基础组件,相比于注册中心通常这两个组件的配置是可选的。</p> |
| <p>为了兼容 2.6 及老版本的配置,对于部分注册中心类型(如 Zookeeper、Nacos 等),Dubbo 会同时将其用作元数据中心和配置中心。</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span>dubbo |
| </span></span><span style="display:flex;"><span> registry |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">address</span>: nacos://localhost:8848 |
| </span></span></code></pre></div><p>框架解析后的默认行为</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span>dubbo |
| </span></span><span style="display:flex;"><span> registry |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">address</span>: nacos://localhost:8848 |
| </span></span><span style="display:flex;"><span> config-center |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">address</span>: nacos://localhost:8848 |
| </span></span><span style="display:flex;"><span> metadata-report |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">address</span>: nacos://localhost:8848 |
| </span></span></code></pre></div><p>可以通过以下两个参数来调整或控制默认行为</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span>dubbo |
| </span></span><span style="display:flex;"><span> registry |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">address</span>: nacos://localhost:8848 |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">use-as-config-center</span>: <span style="color:#cb4b16">false</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">use-as-metadata-report</span>: <span style="color:#cb4b16">false</span> |
| </span></span></code></pre></div><h2 id="注册中心生态">注册中心生态</h2> |
| <p>Dubbo 主干目前支持的主流注册中心实现包括</p> |
| <ul> |
| <li>Zookeeper</li> |
| <li>Nacos</li> |
| <li>Redis</li> |
| </ul> |
| <p>同时也支持 Kubernetes、Mesh 体系的服务发现。</p> |
| <p>另外,<a href="https://github.com/apache/dubbo-spi-extensions">Dubbo 扩展生态</a> 还提供了 Consul、Eureka、Etcd 等注册中心扩展实现。也欢迎通过 <a href="../../spi/">registry spi 扩展</a> 贡献更多的注册中心实现到 Dubbo 生态。</p> |
| <p>Dubbo 还支持在一个应用中 <a href="../multiple-registry/">指定多个注册中心</a>,并将服务根据注册中心分组,这样做使得服务分组管理或服务迁移变得更容易。</p></description></item><item><title>Overview: Zookeeper</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/registry/zookeeper/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/registry/zookeeper/</guid><description> |
| <h2 id="1-前置条件">1 前置条件</h2> |
| <ul> |
| <li>了解 <a href="../../../quick-start/spring-boot/">Dubbo 基本开发步骤</a></li> |
| <li>安装并启动 <a href="https://zookeeper.apache.org/">Zookeeper</a></li> |
| </ul> |
| <h2 id="2-使用说明">2 使用说明</h2> |
| <p>在此查看<a href="https://github.com/apache/dubbo-samples/tree/master/3-extensions/registry/dubbo-samples-zookeeper">完整示例代码</a></p> |
| <h3 id="21-增加-maven-依赖">2.1 增加 Maven 依赖</h3> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#268bd2">&lt;properties&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;dubbo.version&gt;</span>3.0.8<span style="color:#268bd2">&lt;/dubbo.version&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;/properties&gt;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dependencies&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;dependency&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;groupId&gt;</span>org.apache.dubbo<span style="color:#268bd2">&lt;/groupId&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;artifactId&gt;</span>dubbo<span style="color:#268bd2">&lt;/artifactId&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;version&gt;</span>${dubbo.version}<span style="color:#268bd2">&lt;/version&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;/dependency&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">&lt;!-- This dependency helps to introduce Curator and Zookeeper dependencies that are necessary for Dubbo to work with zookeeper as transitive dependencies --&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;dependency&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;groupId&gt;</span>org.apache.dubbo<span style="color:#268bd2">&lt;/groupId&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;artifactId&gt;</span>dubbo-dependencies-zookeeper<span style="color:#268bd2">&lt;/artifactId&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;version&gt;</span>${dubbo.version}<span style="color:#268bd2">&lt;/version&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;type&gt;</span>pom<span style="color:#268bd2">&lt;/type&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;/dependency&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;/dependencies&gt;</span> |
| </span></span></code></pre></div><p><code>dubbo-dependencies-zookeeper</code> 将自动为应用增加 Zookeeper 相关客户端的依赖,减少用户使用 Zookeeper 成本,如使用中遇到版本兼容问题,用户也可以不使用 <code>dubbo-dependencies-zookeeper</code>,而是自行添加 Curator、Zookeeper Client 等依赖。</p> |
| <p>由于 Dubbo 使用 Curator 作为与 Zookeeper Server 交互的编程客户端,因此,要特别注意 Zookeeper Server 与 Dubbo 版本依赖的兼容性</p> |
| <table> |
| <thead> |
| <tr> |
| <th>Zookeeper Server 版本</th> |
| <th>Dubbo 版本</th> |
| <th>Dubbo Zookeeper 依赖包</th> |
| <th>说明</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td>3.4.x 及以下</td> |
| <td>3.0.x 及以上</td> |
| <td>dubbo-dependencies-zookeeper</td> |
| <td>传递依赖 Curator 4.x 、Zookeeper 3.4.x</td> |
| </tr> |
| <tr> |
| <td>3.5.x 及以上</td> |
| <td>3.0.x 及以上</td> |
| <td>dubbo-dependencies-zookeeper-curator5</td> |
| <td>传递依赖 Curator 5.x 、Zookeeper 3.7.x</td> |
| </tr> |
| <tr> |
| <td>3.4.x 及以上</td> |
| <td>2.7.x 及以下</td> |
| <td>dubbo-dependencies-zookeeper</td> |
| <td>传递依赖 Curator 4.x 、Zookeeper 3.4.x</td> |
| </tr> |
| <tr> |
| <td>3.5.x 及以上</td> |
| <td>2.7.x 及以下</td> |
| <td>无</td> |
| <td>须自行添加 Curator、Zookeeper 等相关客户端依赖</td> |
| </tr> |
| </tbody> |
| </table> |
| <h3 id="22-配置并启用-zookeeper">2.2 配置并启用 Zookeeper</h3> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#586e75"># application.yml</span> |
| </span></span><span style="display:flex;"><span>dubbo |
| </span></span><span style="display:flex;"><span> registry |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">address</span>: zookeeper://localhost:2181 |
| </span></span></code></pre></div><p>或</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-properties" data-lang="properties"><span style="display:flex;"><span><span style="color:#586e75"># dubbo.properties</span> |
| </span></span><span style="display:flex;"><span>dubbo.registry.address<span style="color:#719e07">=</span><span style="color:#2aa198">zookeeper://localhost:2181</span> |
| </span></span></code></pre></div><p>或</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:registry</span> address=<span style="color:#2aa198">&#34;zookeeper://localhost:2181&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div><p><code>address</code> 是启用 zookeeper 注册中心唯一必须指定的属性,而在生产环境下,<code>address</code> 通常被指定为集群地址,如</p> |
| <p><code>address=zookeeper://10.20.153.10:2181?backup=10.20.153.11:2181,10.20.153.12:2181</code></p> |
| <p>protocol 与 address 分开配置的模式也可以,如</p> |
| <p><code>&lt;dubbo:registry protocol=&quot;zookeeper&quot; address=&quot;10.20.153.10:2181,10.20.153.11:2181,10.20.153.12:2181&quot; /&gt;</code></p> |
| <h2 id="3-高级配置">3 高级配置</h2> |
| <h3 id="31-认证与鉴权">3.1 认证与鉴权</h3> |
| <p>如果 Zookeeper 开启认证,Dubbo 支持指定 username、password 的方式传入身份标识。</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#586e75"># application.yml</span> |
| </span></span><span style="display:flex;"><span>dubbo |
| </span></span><span style="display:flex;"><span> registry |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">address</span>: zookeeper://localhost:2181 |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">username</span>: hello |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">password</span>: <span style="color:#2aa198">1234</span> |
| </span></span></code></pre></div><p>也可以直接将参数扩展在 address 上 <code>address=zookeeper://hello:1234@localhost:2181</code></p> |
| <h3 id="32-分组隔离">3.2 分组隔离</h3> |
| <p>通过指定 <code>group</code> 属性,可以在同一个 Zookeeper 集群内实现微服务地址的逻辑隔离。比如可以在一套集群内隔离出多套开发环境,在地址发现层面实现隔离。</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#586e75"># application.yml</span> |
| </span></span><span style="display:flex;"><span>dubbo |
| </span></span><span style="display:flex;"><span> registry |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">address</span>: zookeeper://localhost:2181 |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">group</span>: daily1 |
| </span></span></code></pre></div><h3 id="33-其他扩展配置">3.3 其他扩展配置</h3> |
| <p>配置连接、会话过期时间</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#586e75"># application.yml</span> |
| </span></span><span style="display:flex;"><span>dubbo |
| </span></span><span style="display:flex;"><span> registry |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">address</span>: zookeeper://localhost:2181 |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">timeout</span>: <span style="color:#2aa198">30</span> * <span style="color:#2aa198">1000</span>* <span style="color:#586e75"># 连接超时时间,默认 30s</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">session</span>: <span style="color:#2aa198">60</span> * <span style="color:#2aa198">1000</span>* <span style="color:#586e75"># 会话超时时间,默认 60s</span> |
| </span></span></code></pre></div><p>Zookeeper 注册中心还支持其他一些控制参数,具体可参见<a href="../../config/properties#registry">Registry 配置项手册</a></p> |
| <h2 id="4-工作原理">4 工作原理</h2> |
| <h3 id="41-dubbo2-节点结构">4.1 Dubbo2 节点结构</h3> |
| <p><img src="https://dubbo.apache.org/imgs/user/zookeeper.jpg" alt="/user-guide/images/zookeeper.jpg"></p> |
| <p>流程:</p> |
| <ul> |
| <li>服务提供者启动时: 向 <code>/dubbo/com.foo.BarService/providers</code> 目录下写入自己的 URL 地址。</li> |
| <li>服务消费者启动时: 订阅 <code>/dubbo/com.foo.BarService/providers</code> 目录下的提供者 URL 地址。并向 <code>/dubbo/com.foo.BarService/consumers</code> 目录下写入自己的 URL 地址</li> |
| <li>监控中心启动时: 订阅 <code>/dubbo/com.foo.BarService</code> 目录下的所有提供者和消费者 URL 地址。</li> |
| </ul> |
| <p>支持以下功能:</p> |
| <ul> |
| <li>当提供者出现断电等异常停机时,注册中心能自动删除提供者信息</li> |
| <li>当注册中心重启时,能自动恢复注册数据,以及订阅请求</li> |
| <li>当会话过期时,能自动恢复注册数据,以及订阅请求</li> |
| <li>当设置 <code>&lt;dubbo:registry check=&quot;false&quot; /&gt;</code> 时,记录失败注册和订阅请求,后台定时重试</li> |
| <li>可通过 <code>&lt;dubbo:registry username=&quot;admin&quot; password=&quot;1234&quot; /&gt;</code> 设置 zookeeper 登录信息</li> |
| <li>可通过 <code>&lt;dubbo:registry group=&quot;dubbo&quot; /&gt;</code> 设置 zookeeper 的根节点,不配置将使用默认的根节点。</li> |
| <li>支持 <code>*</code> 号通配符 <code>&lt;dubbo:reference group=&quot;*&quot; version=&quot;*&quot; /&gt;</code>,可订阅服务的所有分组和所有版本的提供者</li> |
| </ul> |
| <h3 id="42-dubbo3-节点结构">4.2 Dubbo3 节点结构</h3></description></item><item><title>Overview: Nacos</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/registry/nacos/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/registry/nacos/</guid><description> |
| <h2 id="1-前置条件">1 前置条件</h2> |
| <ul> |
| <li>了解 <a href="../../../quick-start/spring-boot/">Dubbo 基本开发步骤</a></li> |
| <li>安装并启动 <a href="https://nacos.io/zh-cn/docs/quick-start.html">Nacos 服务</a></li> |
| </ul> |
| <blockquote> |
| <p>当Dubbo使用<code>3.0.0</code>及以上版本时,需要使用Nacos <code>2.0.0</code>及以上版本。</p> |
| </blockquote> |
| <h2 id="2-使用说明">2 使用说明</h2> |
| <p>在此查看<a href="https://github.com/apache/dubbo-samples/tree/master/3-extensions/registry/dubbo-samples-nacos/dubbo-samples-nacos-registry">完整示例代码</a></p> |
| <h3 id="21-增加依赖">2.1 增加依赖</h3> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#268bd2">&lt;dependencies&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;dependency&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;groupId&gt;</span>org.apache.dubbo<span style="color:#268bd2">&lt;/groupId&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;artifactId&gt;</span>dubbo<span style="color:#268bd2">&lt;/artifactId&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;version&gt;</span>3.0.9<span style="color:#268bd2">&lt;/version&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;/dependency&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;dependency&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;groupId&gt;</span>com.alibaba.nacos<span style="color:#268bd2">&lt;/groupId&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;artifactId&gt;</span>nacos-client<span style="color:#268bd2">&lt;/artifactId&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;version&gt;</span>2.1.0<span style="color:#268bd2">&lt;/version&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;/dependency&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">&lt;!-- Introduce Dubbo Nacos extension, or you can add Nacos dependency directly as shown above--&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">&lt;!-- |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> &lt;dependency&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> &lt;groupId&gt;org.apache.dubbo&lt;/groupId&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> &lt;artifactId&gt;dubbo-registry-nacos&lt;/artifactId&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> &lt;version&gt;3.0.9&lt;/version&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> &lt;/dependency&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> --&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;/dependencies&gt;</span> |
| </span></span></code></pre></div><p>增加 Dubbo 与 Nacos 依赖</p> |
| <blockquote> |
| <p>Dubbo <code>3.0.0</code> 及以上版本需 nacos-client <code>2.0.0</code> 及以上版本</p> |
| </blockquote> |
| <h3 id="22-配置并启用-nacos">2.2 配置并启用 Nacos</h3> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#586e75"># application.yml (Spring Boot)</span> |
| </span></span><span style="display:flex;"><span>dubbo |
| </span></span><span style="display:flex;"><span> registry |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">address</span>: nacos://localhost:8848 |
| </span></span></code></pre></div><p>或</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-properties" data-lang="properties"><span style="display:flex;"><span><span style="color:#586e75"># dubbo.properties</span> |
| </span></span><span style="display:flex;"><span>dubbo.registry.address<span style="color:#719e07">=</span><span style="color:#2aa198">nacos://localhost:8848</span> |
| </span></span></code></pre></div><p>或</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:registry</span> address=<span style="color:#2aa198">&#34;nacos://localhost:8848&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div><p>启用应用,查看注册后的效果或工作原理,请查看 <a href="#4-%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86">工作原理</a>。</p> |
| <h2 id="3-高级配置">3 高级配置</h2> |
| <h3 id="31-认证">3.1 认证</h3> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#586e75"># application.yml (Spring Boot)</span> |
| </span></span><span style="display:flex;"><span>dubbo |
| </span></span><span style="display:flex;"><span> registry |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">address</span>: nacos://localhost:8848?username=nacos&amp;password=nacos |
| </span></span></code></pre></div><p>或</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-properties" data-lang="properties"><span style="display:flex;"><span><span style="color:#586e75"># dubbo.properties</span> |
| </span></span><span style="display:flex;"><span>dubbo.registry.address<span style="color:#719e07">:</span> <span style="color:#2aa198">nacos://nacos:nacos@localhost:8848</span> |
| </span></span></code></pre></div><h3 id="32-自定义命名空间">3.2 自定义命名空间</h3> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#586e75"># application.yml (Spring Boot)</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">dubbo</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">registry</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">address</span>: nacos://localhost:8848?namespace=5cbb70a5-xxx-xxx-xxx-d43479ae0932 |
| </span></span></code></pre></div><p>或者</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#586e75"># application.yml (Spring Boot)</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">dubbo</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">registry</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">address</span>: nacos://localhost:8848 |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">parameters.namespace</span>: 5cbb70a5-xxx-xxx-xxx-d43479ae0932 |
| </span></span></code></pre></div><h3 id="33-自定义分组">3.3 自定义分组</h3> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#586e75"># application.yml</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">dubbo</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">registry</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">address</span>: nacos://localhost:8848 |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">group</span>: dubbo |
| </span></span></code></pre></div><blockquote> |
| <p>如果不配置的话,group 是由 Nacos 默认指定。group 和 namespace 在 Nacos 中代表不同的隔离层次,通常来说 namespace 用来隔离不同的用户或环境,group 用来对同一环境内的数据做进一步归组。</p> |
| </blockquote> |
| <h3 id="34-注册接口级消费者">3.4 注册接口级消费者</h3> |
| <p>Dubbo3.0.0版本以后,增加了是否注册消费者的参数,如果需要将消费者注册到nacos注册中心上,需要将参数(register-consumer-url)设置为true,默认是false。</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#586e75"># application.yml</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">dubbo</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">registry</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">address</span>: nacos://localhost:8848?register-consumer-url=true |
| </span></span></code></pre></div><p>或者</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#586e75"># application.yml</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">dubbo</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">registry</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">address</span>: nacos://localhost:8848 |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">parameters.register-consumer-url</span>: <span style="color:#cb4b16">true</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span></code></pre></div><h3 id="35-更多配置">3.5 更多配置</h3> |
| <table> |
| <thead> |
| <tr> |
| <th>参数名</th> |
| <th>中文描述</th> |
| <th>默认值</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td>username</td> |
| <td>连接Nacos Server的用户名</td> |
| <td>nacos</td> |
| </tr> |
| <tr> |
| <td>paasword</td> |
| <td>连接Nacos Server的密码</td> |
| <td>nacos</td> |
| </tr> |
| <tr> |
| <td>backup</td> |
| <td>备用地址</td> |
| <td>空</td> |
| </tr> |
| <tr> |
| <td>namespace</td> |
| <td>命名空间的ID</td> |
| <td>public</td> |
| </tr> |
| <tr> |
| <td>group</td> |
| <td>分组名称</td> |
| <td>DEFAULT_GROUP</td> |
| </tr> |
| <tr> |
| <td>register-consumer-url</td> |
| <td>是否注册消费端</td> |
| <td>false</td> |
| </tr> |
| <tr> |
| <td>com.alibaba.nacos.naming.log.filename</td> |
| <td>初始化日志文件名</td> |
| <td>naming.log</td> |
| </tr> |
| <tr> |
| <td>endpoint</td> |
| <td>连接Nacos Server指定的连接点,可参考<a href="https://nacos.io/zh-cn/blog/address-server.html">文档</a></td> |
| <td>空</td> |
| </tr> |
| <tr> |
| <td>endpointPort</td> |
| <td>连接Nacos Server指定的连接点端口,可以参考<a href="https://nacos.io/zh-cn/blog/address-server.html">文档</a></td> |
| <td>空</td> |
| </tr> |
| <tr> |
| <td>endpointQueryParams</td> |
| <td>endpoint查参数询</td> |
| <td>空</td> |
| </tr> |
| <tr> |
| <td>isUseCloudNamespaceParsing</td> |
| <td>是否解析云环境中的namespace参数</td> |
| <td>true</td> |
| </tr> |
| <tr> |
| <td>isUseEndpointParsingRule</td> |
| <td>是否开启endpoint 参数规则解析</td> |
| <td>true</td> |
| </tr> |
| <tr> |
| <td>namingLoadCacheAtStart</td> |
| <td>启动时是否优先读取本地缓存</td> |
| <td>true</td> |
| </tr> |
| <tr> |
| <td>namingCacheRegistryDir</td> |
| <td>指定缓存子目录,位置为 &hellip;/nacos/{SUB_DIR}/naming</td> |
| <td>空</td> |
| </tr> |
| <tr> |
| <td>namingClientBeatThreadCount</td> |
| <td>客户端心跳的线程池大小</td> |
| <td>机器的CPU数的一半</td> |
| </tr> |
| <tr> |
| <td>namingPollingThreadCount</td> |
| <td>客户端定时轮询数据更新的线程池大小</td> |
| <td>机器的CPU数的一半</td> |
| </tr> |
| <tr> |
| <td>namingRequestDomainMaxRetryCount</td> |
| <td>client通过HTTP向Nacos Server请求的重试次数</td> |
| <td>3</td> |
| </tr> |
| <tr> |
| <td>namingPushEmptyProtection</td> |
| <td>在服务没有有效(健康)实例时,是否开启保护,开启后则会使用旧的服务实例</td> |
| <td>false</td> |
| </tr> |
| <tr> |
| <td>push.receiver.udp.port</td> |
| <td>客户端UDP的端口</td> |
| <td>空</td> |
| </tr> |
| </tbody> |
| </table> |
| <p>在nacos-server@<code>1.0.0</code>版本后,支持客户端通过上报一些包含特定的元数据的实例到服务端来控制实例的一些行为。</p> |
| <table> |
| <thead> |
| <tr> |
| <th>参数名</th> |
| <th>中文描述</th> |
| <th>默认值</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td>preserved.heart.beat.timeout</td> |
| <td>该实例在不发送心跳后,从健康到不健康的时间(毫秒)</td> |
| <td>15000</td> |
| </tr> |
| <tr> |
| <td>preserved.ip.delete.timeout</td> |
| <td>该实例在不发送心跳后,被服务端下掉该实例的时间(毫秒)</td> |
| <td>30000</td> |
| </tr> |
| <tr> |
| <td>preserved.heart.beat.interval</td> |
| <td>该实例在客户端上报心跳的间隔时间(毫秒)</td> |
| <td>5000</td> |
| </tr> |
| <tr> |
| <td>preserved.instance.id.generator</td> |
| <td>该实例的id生成策略,值为<code>snowflake</code>时,从0开始增加</td> |
| <td>simple</td> |
| </tr> |
| <tr> |
| <td>preserved.register.source</td> |
| <td>注册实例注册时服务框架类型(例如Dubbo,Spring Cloud等)</td> |
| <td>空</td> |
| </tr> |
| </tbody> |
| </table> |
| <p>这些参数都可以类似 <code>namespace</code> 的方式通过通过参数扩展配置到 Nacos,如</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-properties" data-lang="properties"><span style="display:flex;"><span>dubbo.registry.parameters.preserved.heart.beat.timeout<span style="color:#719e07">=</span><span style="color:#2aa198">5000</span> |
| </span></span></code></pre></div><h2 id="4-工作原理">4 工作原理</h2> |
| <p>以下仅为展示 Nacos 作为 Dubbo 注册中心的工作原理,Dubbo 服务运维建议使用 <a href="https://github.com/apache/dubbo-admin">Dubbo Admin</a></p> |
| <h3 id="41-dubbo2-注册数据">4.1 Dubbo2 注册数据</h3> |
| <p>随后,重启您的 Dubbo 应用,Dubbo 的服务提供和消费信息在 Nacos 控制台中可以显示:</p> |
| <p><img src="https://dubbo.apache.org/imgs/blog/dubbo-registry-nacos-1.png" alt="dubbo-registry-nacos-1.png"></p> |
| <p>如图所示,服务名前缀为 <code>providers:</code> 的信息为服务提供者的元信息,<code>consumers:</code> 则代表服务消费者的元信息。点击“<strong>详情</strong>”可查看服务状态详情:</p> |
| <p><img src="https://dubbo.apache.org/imgs/blog/dubbo-registry-nacos-2.png" alt="image-dubbo-registry-nacos-2.png"></p> |
| <h3 id="42-dubbo3-注册数据">4.2 Dubbo3 注册数据</h3> |
| <p>应用级服务发现的 &ldquo;服务名&rdquo; 为应用名</p> |
| <blockquote> |
| <p>Dubbo3 默认采用 &ldquo;应用级服务发现 + 接口级服务发现&rdquo; 的双注册模式,因此会发现应用级服务(应用名)和接口级服务(接口名)同时出现在 Nacos 控制台,可以通过配置 <code>dubbo.registry.register-mode=instance/interface/all</code> 来改变注册行为。</p> |
| </blockquote></description></item><item><title>Overview: Multicast</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/registry/multicast/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/registry/multicast/</guid><description> |
| <p>Multicast 注册中心不需要启动任何中心节点,只要广播地址一样,就可以互相发现。</p> |
| <p><img src="https://dubbo.apache.org/imgs/user/multicast.jpg" alt="/user-guide/images/multicast.jpg"></p> |
| <h2 id="1-使用说明">1 使用说明</h2> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:registry</span> address=<span style="color:#2aa198">&#34;multicast://224.5.6.7:1234&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div><p>或</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:registry</span> protocol=<span style="color:#2aa198">&#34;multicast&#34;</span> address=<span style="color:#2aa198">&#34;224.5.6.7:1234&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div><h4 id="注意">注意:</h4> |
| <p>为了减少广播量,Dubbo 缺省使用单播发送提供者地址信息给消费者。 |
| 如果一个机器上同时启了多个消费者进程,消费者需声明 <code>unicast=false</code>,否则只会有一个消费者能收到消息; 当服务者和消费者运行在同一台机器上,消费者同样需要声明<code>unicast=false</code>,否则消费者无法收到消息,导致No provider available for the service异常:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:application</span> name=<span style="color:#2aa198">&#34;demo-consumer&#34;</span><span style="color:#268bd2">&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;dubbo:parameter</span> key=<span style="color:#2aa198">&#34;unicast&#34;</span> value=<span style="color:#2aa198">&#34;false&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;/dubbo:application&gt;</span> |
| </span></span></code></pre></div><p>或</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:consumer&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;dubbo:parameter</span> key=<span style="color:#2aa198">&#34;unicast&#34;</span> value=<span style="color:#2aa198">&#34;false&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;/dubbo:consumer&gt;</span> |
| </span></span></code></pre></div><h2 id="2-工作原理">2 工作原理</h2> |
| <h3 id="21-基本流程">2.1 基本流程</h3> |
| <ol start="0"> |
| <li>提供方启动时广播自己的地址</li> |
| <li>消费方启动时广播订阅请求</li> |
| <li>提供方收到订阅请求时,单播自己的地址给订阅者,如果设置了 <code>unicast=false</code>,则广播给订阅者</li> |
| <li>消费方收到提供方地址时,连接该地址进行 RPC 调用。</li> |
| </ol> |
| <h3 id="22-使用限制">2.2 使用限制</h3> |
| <p>组播受网络结构限制,只适合小规模应用或开发阶段使用。组播地址段: 224.0.0.0 - 239.255.255.255</p></description></item><item><title>Overview: Redis</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/registry/redis/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/registry/redis/</guid><description> |
| <h2 id="前置条件">前置条件</h2> |
| <ul> |
| <li>了解 <a href="../../../quick-start/spring-boot/">Dubbo 基本开发步骤</a></li> |
| <li>安装并启动 <a href="http://redis.io">Redis</a> 服务</li> |
| </ul> |
| <h2 id="使用说明">使用说明</h2> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:registry</span> address=<span style="color:#2aa198">&#34;redis://10.20.153.10:6379&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div><p>或</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:registry</span> address=<span style="color:#2aa198">&#34;redis://10.20.153.10:6379?backup=10.20.153.11:6379,10.20.153.12:6379&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div><p>或</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:registry</span> protocol=<span style="color:#2aa198">&#34;redis&#34;</span> address=<span style="color:#2aa198">&#34;10.20.153.10:6379&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div><p>或</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:registry</span> protocol=<span style="color:#2aa198">&#34;redis&#34;</span> address=<span style="color:#2aa198">&#34;10.20.153.10:6379,10.20.153.11:6379,10.20.153.12:6379&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div><h2 id="选项">选项</h2> |
| <ul> |
| <li>可通过 <code>&lt;dubbo:registry group=&quot;dubbo&quot; /&gt;</code> 设置 redis 中 key 的前缀,缺省为 <code>dubbo</code>。</li> |
| <li>可通过 <code>&lt;dubbo:registry cluster=&quot;replicate&quot; /&gt;</code> 设置 redis 集群策略,缺省为 <code>failover</code>: |
| <ul> |
| <li><code>failover</code>: 只写入和读取任意一台,失败时重试另一台,需要服务器端自行配置数据同步</li> |
| <li><code>replicate</code>: 在客户端同时写入所有服务器,只读取单台,服务器端不需要同步,注册中心集群增大,性能压力也会更大</li> |
| </ul> |
| </li> |
| </ul> |
| <h2 id="工作原理">工作原理</h2> |
| <p>基于 Redis [^1] 实现的注册中心。</p> |
| <p>Redis 过期数据通过心跳的方式检测脏数据,服务器时间必须同步,并且对服务器有一定压力,否则过期检测会不准确</p> |
| <p><img src="https://dubbo.apache.org/imgs/user/dubbo-redis-registry.jpg" alt="/user-guide/images/dubbo-redis-registry.jpg"></p> |
| <p>使用 Redis 的 Key/Map 结构存储数据结构:</p> |
| <ul> |
| <li>主 Key 为服务名和类型</li> |
| <li>Map 中的 Key 为 URL 地址</li> |
| <li>Map 中的 Value 为过期时间,用于判断脏数据,脏数据由监控中心删除 [^3]</li> |
| </ul> |
| <p>使用 Redis 的 Publish/Subscribe 事件通知数据变更:</p> |
| <ul> |
| <li>通过事件的值区分事件类型:<code>register</code>, <code>unregister</code>, <code>subscribe</code>, <code>unsubscribe</code></li> |
| <li>普通消费者直接订阅指定服务提供者的 Key,只会收到指定服务的 <code>register</code>, <code>unregister</code> 事件</li> |
| <li>监控中心通过 <code>psubscribe</code> 功能订阅 <code>/dubbo/*</code>,会收到所有服务的所有变更事件</li> |
| </ul> |
| <p>调用过程:</p> |
| <ol start="0"> |
| <li>服务提供方启动时,向 <code>Key:/dubbo/com.foo.BarService/providers</code> 下,添加当前提供者的地址</li> |
| <li>并向 <code>Channel:/dubbo/com.foo.BarService/providers</code> 发送 <code>register</code> 事件</li> |
| <li>服务消费方启动时,从 <code>Channel:/dubbo/com.foo.BarService/providers</code> 订阅 <code>register</code> 和 <code>unregister</code> 事件</li> |
| <li>并向 <code>Key:/dubbo/com.foo.BarService/consumers</code> 下,添加当前消费者的地址</li> |
| <li>服务消费方收到 <code>register</code> 和 <code>unregister</code> 事件后,从 <code>Key:/dubbo/com.foo.BarService/providers</code> 下获取提供者地址列表</li> |
| <li>服务监控中心启动时,从 <code>Channel:/dubbo/*</code> 订阅 <code>register</code> 和 <code>unregister</code>,以及 <code>subscribe</code> 和<code>unsubsribe </code>事件</li> |
| <li>服务监控中心收到 <code>register</code> 和 <code>unregister</code> 事件后,从 <code>Key:/dubbo/com.foo.BarService/providers</code> 下获取提供者地址列表</li> |
| <li>服务监控中心收到 <code>subscribe</code> 和 <code>unsubsribe</code> 事件后,从 <code>Key:/dubbo/com.foo.BarService/consumers</code> 下获取消费者地址列表</li> |
| </ol></description></item><item><title>Overview: 多注册中心</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/registry/multiple-registry/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/registry/multiple-registry/</guid><description> |
| <h2 id="1-关联服务与多注册中心">1 关联服务与多注册中心</h2> |
| <h3 id="11-全局默认注册中心">1.1 全局默认注册中心</h3> |
| <p>Dubbo 注册中心和服务是独立配置的,通常开发者不用设置服务和注册中心组件之间的关联关系,Dubbo 框架会将自动执行以下动作:</p> |
| <ul> |
| <li>对于所有的 Service 服务,向所有全局默认注册中心注册服务地址。</li> |
| <li>对于所有的 Reference 服务,从所有全局默认注册中心订阅服务地址。</li> |
| </ul> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yml" data-lang="yml"><span style="display:flex;"><span><span style="color:#586e75"># application.yml (Spring Boot)</span> |
| </span></span><span style="display:flex;"><span>dubbo |
| </span></span><span style="display:flex;"><span> registries |
| </span></span><span style="display:flex;"><span> beijingRegistry |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">address</span>: zookeeper://localhost:2181 |
| </span></span><span style="display:flex;"><span> shanghaiRegistry |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">address</span>: zookeeper://localhost:2182 |
| </span></span></code></pre></div><div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#268bd2">@DubboService</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">DemoServiceImpl</span> <span style="color:#268bd2">implements</span> DemoService {} |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">@DubboService</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">HelloServiceImpl</span> <span style="color:#268bd2">implements</span> HelloService {} |
| </span></span></code></pre></div><p>以上以 Spring Boot 开发为例(XML、API 方式类似)配置了两个全局默认注册中心 beijingRegistry 和 shanghaiRegistry,服务 DemoService 与 HelloService 会分别注册到两个默认注册中心。</p> |
| <p>除了上面讲到的框架自动为服务设置全局注册中心之外,有两种方式可以灵活调整服务与多注册中心间的关联。</p> |
| <h3 id="12-设置全局默认注册中心">1.2 设置全局默认注册中心</h3> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yml" data-lang="yml"><span style="display:flex;"><span><span style="color:#586e75"># application.yml (Spring Boot)</span> |
| </span></span><span style="display:flex;"><span>dubbo |
| </span></span><span style="display:flex;"><span> registries |
| </span></span><span style="display:flex;"><span> beijingRegistry |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">address</span>: zookeeper://localhost:2181 |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">default</span>: <span style="color:#cb4b16">true</span> |
| </span></span><span style="display:flex;"><span> shanghaiRegistry |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">address</span>: zookeeper://localhost:2182 |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">default</span>: <span style="color:#cb4b16">false</span> |
| </span></span></code></pre></div><p><code>default</code> 用来设置全局默认注册中心,默认值为 <code>true</code> 即被视作全局注册中心。未指定注册中心 id 的服务将自动注册或订阅全局默认注册中心。</p> |
| <h3 id="13-显示关联服务与注册中心">1.3 显示关联服务与注册中心</h3> |
| <p>通过在 Dubbo 服务定义组件上增加 registry 配置,将服务与注册中心关联起来。</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#268bd2">@DubboServiceregistry</span> <span style="color:#719e07">=</span> {<span style="color:#2aa198">&#34;beijingRegistry&#34;</span>} |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">DemoServiceImpl</span> <span style="color:#268bd2">implements</span> DemoService {} |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">@DubboServiceregistry</span> <span style="color:#719e07">=</span> {<span style="color:#2aa198">&#34;shanghaiRegistry&#34;</span>} |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">HelloServiceImpl</span> <span style="color:#268bd2">implements</span> HelloService {} |
| </span></span></code></pre></div><p>增加以上配置后,DemoService 将只注册到 beijingRegistry,而 HelloService 将注册到 shanghaiRegistry。</p> |
| <h2 id="2-多注册中心订阅">2 多注册中心订阅</h2> |
| <p>服务订阅由于涉及到地址聚合和路由选址,因此逻辑会更加复杂一些。从单个服务订阅的视角,如果存在多注册中心订阅的情况,则可以根据注册中心间的地址是否聚合分为两种场景。</p> |
| <h3 id="21-多注册中心地址不聚合">2.1 多注册中心地址不聚合</h3> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:registry</span> id=<span style="color:#2aa198">&#34;hangzhouRegistry&#34;</span> address=<span style="color:#2aa198">&#34;10.20.141.150:9090&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:registry</span> id=<span style="color:#2aa198">&#34;qingdaoRegistry&#34;</span> address=<span style="color:#2aa198">&#34;10.20.141.151:9010&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div><p>如以上所示独立配置的注册中心组件,地址列表在消费端默认是完全隔离的,负载均衡选址要经过两步:</p> |
| <ol> |
| <li>注册中心集群间选址,选定一个集群</li> |
| <li>注册中心集群内选址,在集群内进行地址筛选</li> |
| </ol> |
| <p><img src="https://dubbo.apache.org/imgs/v3/registry/no-aggregation.png" alt="multi-registris-no-aggregation"></p> |
| <p>下面我们着重分析下如何控制 <strong>注册中心集群间选址</strong>,可选的策略有如下几种 |
| <strong>随机</strong> |
| 每次请求都随机的分配到一个注册中心集群</p> |
| <blockquote> |
| <p>随机的过程中会有可用性检查,即每个集群要确保至少有一个地址可用才有可能被选到。</p> |
| </blockquote> |
| <p><strong>preferred 优先</strong></p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:registry</span> id=<span style="color:#2aa198">&#34;hangzhouRegistry&#34;</span> address=<span style="color:#2aa198">&#34;10.20.141.150:9090&#34;</span> preferred=<span style="color:#2aa198">&#34;true&#34;</span><span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:registry</span> id=<span style="color:#2aa198">&#34;qingdaoRegistry&#34;</span> address=<span style="color:#2aa198">&#34;10.20.141.151:9010&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div><p>如果有注册中心集群配置了 <code>preferred=&quot;true&quot;</code>,则所有流量都会被路由到这个集群。</p> |
| <p><strong>weighted</strong></p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:registry</span> id=<span style="color:#2aa198">&#34;hangzhouRegistry&#34;</span> address=<span style="color:#2aa198">&#34;10.20.141.150:9090&#34;</span> weight=<span style="color:#2aa198">&#34;100&#34;</span><span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:registry</span> id=<span style="color:#2aa198">&#34;qingdaoRegistry&#34;</span> address=<span style="color:#2aa198">&#34;10.20.141.151:9010&#34;</span> weight=<span style="color:#2aa198">&#34;10&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div><p>基于权重的随机负载均衡,以上集群间会有大概 10:1 的流量分布。</p> |
| <p><strong>同 zone 优先</strong></p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:registry</span> id=<span style="color:#2aa198">&#34;hangzhouRegistry&#34;</span> address=<span style="color:#2aa198">&#34;10.20.141.150:9090&#34;</span> zone=<span style="color:#2aa198">&#34;hangzhou&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:registry</span> id=<span style="color:#2aa198">&#34;qingdaoRegistry&#34;</span> address=<span style="color:#2aa198">&#34;10.20.141.151:9010&#34;</span> zone=<span style="color:#2aa198">&#34;qingdao&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div><div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span>RpcContext.getContext().setAttachment(<span style="color:#2aa198">&#34;registry_zone&#34;</span>, <span style="color:#2aa198">&#34;qingdao&#34;</span>); |
| </span></span></code></pre></div><p>根据 Invocation 中带的流量参数或者在当前节点通过 context 上下文设置的参数,流量会被精确的引导到对应的集群。</p> |
| <h3 id="22-多注册中心地址聚合">2.2 多注册中心地址聚合</h3> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:registry</span> address=<span style="color:#2aa198">&#34;multiple://127.0.0.1:2181?separator=;&amp;reference-registry=zookeeper://address11?backup=address12,address13;zookeeper://address21?backup=address22,address23&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div><p>这里增加了一个特殊的 multiple 协议开头的注册中心,其中:</p> |
| <ul> |
| <li><code>multiple://127.0.0.1:2181</code> 并没有什么具体含义,只是一个特定格式的占位符,地址可以随意指定</li> |
| <li><code>reference-registry</code> 指定了要聚合的注册中心集群的列表,示例中有两个集群,分别是 <code>zookeeper://address11?backup=address12,address13</code> 和 <code>zookeeper://address21?backup=address22,address23</code>,其中还特别指定了集群分隔符 <code>separator=&quot;;&quot;</code></li> |
| </ul> |
| <p>如下图所示,不同注册中心集群的地址会被聚合到一个地址池后在消费端做负载均衡或路由选址。</p> |
| <p><img src="https://dubbo.apache.org/imgs/v3/registry/aggregation.png" alt="multi-registris-aggregation"></p> |
| <p>在 3.1.0 版本及之后,还支持每个注册中心集群上设置特定的 attachments 属性,以实现对该注册中心集群下的地址做特定标记,后续配合 Router 组件扩展如 TagRouter 等就可以实现跨机房间的流量治理能力。</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:registry</span> address=<span style="color:#2aa198">&#34;multiple://127.0.0.1:2181?separator=;&amp;reference-registry=zookeeper://address11?attachments=zone=hangzhou,tag=middleware;zookeeper://address21&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div><p>增加 <code>attachments=zone=hangzhou,tag=middleware</code> 后,所有来自该注册中心的 URL 地址将自动携带 <code>zone</code> 和 <code>tag</code> 两个标识,方便消费端更灵活的做流量治理。</p> |
| <h2 id="3-场景示例">3 场景示例</h2> |
| <h3 id="31-场景一跨区域注册服务">3.1 场景一:跨区域注册服务</h3> |
| <p>比如:中文站有些服务来不及在青岛部署,只在杭州部署,而青岛的其它应用需要引用此服务,就可以将服务同时注册到两个注册中心。</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:registry</span> id=<span style="color:#2aa198">&#34;hangzhouRegistry&#34;</span> address=<span style="color:#2aa198">&#34;10.20.141.150:9090&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:registry</span> id=<span style="color:#2aa198">&#34;qingdaoRegistry&#34;</span> address=<span style="color:#2aa198">&#34;10.20.141.151:9010&#34;</span> default=<span style="color:#2aa198">&#34;false&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">&lt;!-- 向多个注册中心注册 --&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:service</span> interface=<span style="color:#2aa198">&#34;com.alibaba.hello.api.HelloService&#34;</span> version=<span style="color:#2aa198">&#34;1.0.0&#34;</span> ref=<span style="color:#2aa198">&#34;helloService&#34;</span> registry=<span style="color:#2aa198">&#34;hangzhouRegistry,qingdaoRegistry&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div><h3 id="32-场景二根据业务实现隔离">3.2 场景二:根据业务实现隔离</h3> |
| <p>CRM 有些服务是专门为国际站设计的,有些服务是专门为中文站设计的。</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#586e75">&lt;!-- 多注册中心配置 --&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:registry</span> id=<span style="color:#2aa198">&#34;chinaRegistry&#34;</span> address=<span style="color:#2aa198">&#34;10.20.141.150:9090&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:registry</span> id=<span style="color:#2aa198">&#34;intlRegistry&#34;</span> address=<span style="color:#2aa198">&#34;10.20.154.177:9010&#34;</span> default=<span style="color:#2aa198">&#34;false&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">&lt;!-- 向中文站注册中心注册 --&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:service</span> interface=<span style="color:#2aa198">&#34;com.alibaba.hello.api.HelloService&#34;</span> version=<span style="color:#2aa198">&#34;1.0.0&#34;</span> ref=<span style="color:#2aa198">&#34;helloService&#34;</span> registry=<span style="color:#2aa198">&#34;chinaRegistry&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">&lt;!-- 向国际站注册中心注册 --&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:service</span> interface=<span style="color:#2aa198">&#34;com.alibaba.hello.api.DemoService&#34;</span> version=<span style="color:#2aa198">&#34;1.0.0&#34;</span> ref=<span style="color:#2aa198">&#34;demoService&#34;</span> registry=<span style="color:#2aa198">&#34;intlRegistry&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div><h3 id="33-场景三根据业务调用服务">3.3 场景三:根据业务调用服务</h3> |
| <p>CRM 需同时调用中文站和国际站的 PC2 服务,PC2 在中文站和国际站均有部署,接口及版本号都一样,但连的数据库不一样。</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#586e75">&lt;!-- 多注册中心配置 --&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:registry</span> id=<span style="color:#2aa198">&#34;chinaRegistry&#34;</span> address=<span style="color:#2aa198">&#34;10.20.141.150:9090&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:registry</span> id=<span style="color:#2aa198">&#34;intlRegistry&#34;</span> address=<span style="color:#2aa198">&#34;10.20.154.177:9010&#34;</span> default=<span style="color:#2aa198">&#34;false&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">&lt;!-- 引用中文站服务 --&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:reference</span> id=<span style="color:#2aa198">&#34;chinaHelloService&#34;</span> interface=<span style="color:#2aa198">&#34;com.alibaba.hello.api.HelloService&#34;</span> version=<span style="color:#2aa198">&#34;1.0.0&#34;</span> registry=<span style="color:#2aa198">&#34;chinaRegistry&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">&lt;!-- 引用国际站站服务 --&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:reference</span> id=<span style="color:#2aa198">&#34;intlHelloService&#34;</span> interface=<span style="color:#2aa198">&#34;com.alibaba.hello.api.HelloService&#34;</span> version=<span style="color:#2aa198">&#34;1.0.0&#34;</span> registry=<span style="color:#2aa198">&#34;intlRegistry&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div><p>如果只是测试环境临时需要连接两个不同注册中心,使用竖号分隔多个不同注册中心地址:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#586e75">&lt;!-- 多注册中心配置,竖号分隔表示同时连接多个不同注册中心,同一注册中心的多个集群地址用逗号分隔 --&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:registry</span> address=<span style="color:#2aa198">&#34;10.20.141.150:9090|10.20.154.177:9010&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">&lt;!-- 引用服务 --&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:reference</span> id=<span style="color:#2aa198">&#34;helloService&#34;</span> interface=<span style="color:#2aa198">&#34;com.alibaba.hello.api.HelloService&#34;</span> version=<span style="color:#2aa198">&#34;1.0.0&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div></description></item><item><title>Overview: Simple 注册中心</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/registry/simple/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/registry/simple/</guid><description> |
| <div class="pageinfo pageinfo-primary"> |
| <p>此功能在 Dubbo 2.7 中已移除,请迁移选择<a href="../">其他注册中心</a>。</p> |
| </div> |
| <p>Simple 注册中心本身就是一个普通的 Dubbo 服务,可以减少第三方依赖,使整体通讯方式一致。</p> |
| <h2 id="配置">配置</h2> |
| <p>将 Simple 注册中心暴露成 Dubbo 服务:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#719e07">&lt;?xml version=&#34;1.0&#34; encoding=&#34;UTF-8&#34;?&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;beans</span> xmlns=<span style="color:#2aa198">&#34;http://www.springframework.org/schema/beans&#34;</span> |
| </span></span><span style="display:flex;"><span> xmlns:xsi=<span style="color:#2aa198">&#34;http://www.w3.org/2001/XMLSchema-instance&#34;</span> |
| </span></span><span style="display:flex;"><span> xmlns:dubbo=<span style="color:#2aa198">&#34;http://dubbo.apache.org/schema/dubbo&#34;</span> |
| </span></span><span style="display:flex;"><span> xsi:schemaLocation=<span style="color:#2aa198">&#34;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd&#34;</span><span style="color:#268bd2">&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">&lt;!-- 当前应用信息配置 --&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;dubbo:application</span> name=<span style="color:#2aa198">&#34;simple-registry&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">&lt;!-- 暴露服务协议配置 --&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;dubbo:protocol</span> port=<span style="color:#2aa198">&#34;9090&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">&lt;!-- 暴露服务配置 --&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;dubbo:service</span> interface=<span style="color:#2aa198">&#34;org.apache.dubbo.registry.RegistryService&#34;</span> ref=<span style="color:#2aa198">&#34;registryService&#34;</span> registry=<span style="color:#2aa198">&#34;N/A&#34;</span> ondisconnect=<span style="color:#2aa198">&#34;disconnect&#34;</span> callbacks=<span style="color:#2aa198">&#34;1000&#34;</span><span style="color:#268bd2">&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;dubbo:method</span> name=<span style="color:#2aa198">&#34;subscribe&#34;</span><span style="color:#268bd2">&gt;&lt;dubbo:argument</span> index=<span style="color:#2aa198">&#34;1&#34;</span> callback=<span style="color:#2aa198">&#34;true&#34;</span> <span style="color:#268bd2">/&gt;&lt;/dubbo:method&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;dubbo:method</span> name=<span style="color:#2aa198">&#34;unsubscribe&#34;</span><span style="color:#268bd2">&gt;&lt;dubbo:argument</span> index=<span style="color:#2aa198">&#34;1&#34;</span> callback=<span style="color:#2aa198">&#34;false&#34;</span> <span style="color:#268bd2">/&gt;&lt;/dubbo:method&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;/dubbo:service&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">&lt;!-- 简单注册中心实现,可自行扩展实现集群和状态同步 --&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;bean</span> id=<span style="color:#2aa198">&#34;registryService&#34;</span> class=<span style="color:#2aa198">&#34;org.apache.dubbo.registry.simple.SimpleRegistryService&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;/beans&gt;</span> |
| </span></span></code></pre></div><p>引用 Simple Registry 服务:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:registry</span> address=<span style="color:#2aa198">&#34;127.0.0.1:9090&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div><p>或者:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:service</span> interface=<span style="color:#2aa198">&#34;org.apache.dubbo.registry.RegistryService&#34;</span> group=<span style="color:#2aa198">&#34;simple&#34;</span> version=<span style="color:#2aa198">&#34;1.0.0&#34;</span> ... <span style="color:#268bd2">&gt;</span> |
| </span></span></code></pre></div><p>或者:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:registry</span> address=<span style="color:#2aa198">&#34;127.0.0.1:9090&#34;</span> group=<span style="color:#2aa198">&#34;simple&#34;</span> version=<span style="color:#2aa198">&#34;1.0.0&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div><h2 id="适用性说明">适用性说明</h2> |
| <p>此 <code>SimpleRegistryService</code> 只是简单实现,不支持集群,可作为自定义注册中心的参考,但不适合直接用于生产环境。</p></description></item></channel></rss> |