| <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Apache Dubbo – Dubbo 配置</title><link>https://dubbo.apache.org/zh-cn/docs/references/configuration/</link><description>Recent content in Dubbo 配置 on Apache Dubbo</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><atom:link href="https://dubbo.apache.org/zh-cn/docs/references/configuration/index.xml" rel="self" type="application/rss+xml"/><item><title>Docs: 配置概述</title><link>https://dubbo.apache.org/zh-cn/docs/references/configuration/overview/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docs/references/configuration/overview/</guid><description> |
| <div class="pageinfo pageinfo-primary"> |
| <p>此文档已经不再维护。您当前查看的是快照版本。如果想要查看最新版本的文档,请参阅<a href="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/config/overview/">最新版本</a>。</p> |
| </div> |
| <p>本文主要介绍Dubbo配置概况,包括配置组件、配置来源、配置方式及配置加载流程。</p> |
| <h2 id="配置组件">配置组件</h2> |
| <p>Dubbo框架的配置项比较繁多,为了更好地管理各种配置,将其按照用途划分为不同的组件,最终所有配置项都会汇聚到URL中,传递给后续处理模块。</p> |
| <p>常用配置组件如下:</p> |
| <ul> |
| <li>application: Dubbo应用配置</li> |
| <li>registry: 注册中心</li> |
| <li>protocol: 服务提供者RPC协议</li> |
| <li>config-center: 配置中心</li> |
| <li>metadata-report: 元数据中心</li> |
| <li>service: 服务提供者配置</li> |
| <li>reference: 远程服务引用配置</li> |
| <li>provider: service的默认配置或分组配置</li> |
| <li>consumer: reference的默认配置或分组配置</li> |
| <li>module: 模块配置</li> |
| <li>monitor: 监控配置</li> |
| <li>metrics: 指标配置</li> |
| <li>ssl: SSL/TLS配置</li> |
| </ul> |
| <h3 id="consumer-与-reference的关系">consumer 与 reference的关系</h3> |
| <p>reference可以指定具体的consumer,如果没有指定consumer则会自动使用全局默认的consumer配置。</p> |
| <p>consumer的属性是reference属性的默认值,可以体现在两个地方:</p> |
| <ol> |
| <li>在刷新属性(属性覆盖)时,先提取其consumer的属性,然后提取reference自身的属性覆盖上去,叠加后的属性集合作为配置来源之一。</li> |
| <li>在组装reference的URL参数时,先附加其consumer的属性,然后附加reference自身的属性。</li> |
| </ol> |
| <blockquote> |
| <p>可以将consumer组件理解为reference组件的虚拟分组,根据需要可以定义多个不同的consumer,不同的consumer设置特定的默认值, |
| 然后在reference中指定consumer或者将&lt;dubbo:reference /&gt; 标签嵌套在&lt;dubbo:consumer /&gt;标签之中。</p> |
| </blockquote> |
| <h3 id="provider-与-service的关系">provider 与 service的关系</h3> |
| <p>service可以指定具体的provider,如果没有指定则会自动使用全局默认的provider配置。 |
| provider的属性是service属性的默认值,覆盖规则类似上面的consumer与reference,也可以将provider理解为service的虚拟分组。</p> |
| <h2 id="配置来源">配置来源</h2> |
| <p>从Dubbo支持的配置来源说起,默认有6种配置来源:</p> |
| <ul> |
| <li>JVM System Properties,JVM -D 参数</li> |
| <li>System environment,JVM进程的环境变量</li> |
| <li>Externalized Configuration,外部化配置,从配置中心读取</li> |
| <li>Application Configuration,应用的属性配置,从Spring应用的Environment中提取&quot;dubbo&quot;打头的属性集</li> |
| <li>API / XML /注解等编程接口采集的配置可以被理解成配置来源的一种,是直接面向用户编程的配置采集方式</li> |
| <li>从classpath读取配置文件 dubbo.properties</li> |
| </ul> |
| <h3 id="覆盖关系">覆盖关系</h3> |
| <p>下图展示了配置覆盖关系的优先级,从上到下优先级依次降低:</p> |
| <p><img src="https://dubbo.apache.org/imgs/blog/configuration.jpg" alt="覆盖关系"></p> |
| <p>请参考相关内容:<a href="../properties#%E5%B1%9E%E6%80%A7%E8%A6%86%E7%9B%96">属性覆盖</a>。</p> |
| <h2 id="配置方式">配置方式</h2> |
| <p>按照驱动方式可以分为以下四种方式:</p> |
| <h3 id="api配置">API配置</h3> |
| <p>以Java编码的方式组织配置,包括Raw API和Bootstrap API,具体请参考<a href="../api">API配置</a>。</p> |
| <h3 id="xml配置">XML配置</h3> |
| <p>以XML方式配置各种组件,支持与Spring无缝集成,具体请参考<a href="../xml">XML配置</a>。</p> |
| <h3 id="annotation配置">Annotation配置</h3> |
| <p>以注解方式暴露服务和引用服务接口,支持与Spring无缝集成,具体请参考<a href="../annotation">Annotation配置</a>。</p> |
| <h3 id="属性配置">属性配置</h3> |
| <p>根据属性Key-value生成配置组件,类似SpringBoot的ConfigurationProperties,具体请参考<a href="../properties">属性配置</a>。</p> |
| <p>属性配置的另外一个重要的功能特性是<a href="../properties#%E5%B1%9E%E6%80%A7%E8%A6%86%E7%9B%96">属性覆盖</a>,使用外部属性的值覆盖已创建的配置组件属性。</p> |
| <p>如果要将属性配置放到外部的配置中心,请参考<a href="../external-config">外部化配置</a>。</p> |
| <p>除了外围驱动方式上的差异,Dubbo的配置读取总体上遵循了以下几个原则:</p> |
| <ol> |
| <li>Dubbo 支持了多层级的配置,并按预定优先级自动实现配置间的覆盖,最终所有配置汇总到数据总线URL后驱动后续的服务暴露、引用等流程。</li> |
| <li>配置格式以 Properties 为主,在配置内容上遵循约定的 <code>path-based</code> 的<a href="../properties#%E9%85%8D%E7%BD%AE%E6%A0%BC%E5%BC%8F">命名规范</a></li> |
| </ol> |
| <h2 id="配置加载流程">配置加载流程</h2> |
| <p><img src="https://dubbo.apache.org/imgs/v3/config/config-load.svg" alt="配置加载流程"></p> |
| <p>从上图可以看出,配置加载大概分为两个阶段:</p> |
| <ul> |
| <li>第一阶段为DubboBootstrap初始化之前,在Spring context启动时解析处理XML配置/注解配置/Java-config 或者是执行API配置代码,创建config bean并且加入到ConfigManager中。</li> |
| <li>第二阶段为DubboBootstrap初始化过程,从配置中心读取外部配置,依次处理实例级属性配置和应用级属性配置,最后刷新所有配置实例的属性,也就是<a href="../properties#%E5%B1%9E%E6%80%A7%E8%A6%86%E7%9B%96">属性覆盖</a>。</li> |
| </ul> |
| <h2 id="几种编程配置方式">几种编程配置方式</h2> |
| <p>接下来,我们看一下选择不同的开发方式时,对应到 ServiceConfig、ReferenceConfig 等编程接口采集的配置的变化。</p> |
| <h4 id="spring-xml">Spring XML</h4> |
| <blockquote> |
| <p>参见<a href="https://github.com/apache/dubbo-samples/tree/master/1-basic/dubbo-samples-spring-xml">示例</a></p> |
| </blockquote> |
| <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;!-- dubbo-provier.xml --&gt;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;dubbo:application</span> name=<span style="color:#2aa198">&#34;demo-provider&#34;</span><span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;dubbo:config-center</span> address=<span style="color:#2aa198">&#34;zookeeper://127.0.0.1:2181&#34;</span><span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;dubbo:registry</span> address=<span style="color:#2aa198">&#34;zookeeper://127.0.0.1:2181&#34;</span> simplified=<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:metadata-report</span> address=<span style="color:#2aa198">&#34;redis://127.0.0.1:6379&#34;</span><span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;dubbo:protocol</span> name=<span style="color:#2aa198">&#34;dubbo&#34;</span> port=<span style="color:#2aa198">&#34;20880&#34;</span><span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;bean</span> id=<span style="color:#2aa198">&#34;demoService&#34;</span> class=<span style="color:#2aa198">&#34;org.apache.dubbo.samples.basic.impl.DemoServiceImpl&#34;</span><span style="color:#268bd2">/&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.samples.basic.api.DemoService&#34;</span> ref=<span style="color:#2aa198">&#34;demoService&#34;</span><span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div><h4 id="spring-annotation">Spring Annotation</h4> |
| <blockquote> |
| <p>参见<a href="https://github.com/apache/dubbo-samples/tree/master/1-basic/dubbo-samples-annotation">示例</a></p> |
| </blockquote> |
| <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:#586e75">// AnnotationService服务实现 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">@Service</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">AnnotationServiceImpl</span> <span style="color:#268bd2">implements</span> AnnotationService <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">@Override</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> String <span style="color:#268bd2">sayHello</span><span style="color:#719e07">(</span>String name<span style="color:#719e07">)</span> <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> System<span style="color:#719e07">.</span>out<span style="color:#719e07">.</span>println<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;async provider received: &#34;</span> <span style="color:#719e07">+</span> name<span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">return</span> <span style="color:#2aa198">&#34;annotation: hello, &#34;</span> <span style="color:#719e07">+</span> name<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">}</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-properties" data-lang="properties"><span style="display:flex;"><span> <span style="color:#586e75">## dubbo.properties</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>dubbo.application.name<span style="color:#719e07">=</span><span style="color:#2aa198">annotation-provider</span> |
| </span></span><span style="display:flex;"><span>dubbo.registry.address<span style="color:#719e07">=</span><span style="color:#2aa198">zookeeper://127.0.0.1:2181</span> |
| </span></span><span style="display:flex;"><span>dubbo.protocol.name<span style="color:#719e07">=</span><span style="color:#2aa198">dubbo</span> |
| </span></span><span style="display:flex;"><span>dubbo.protocol.port<span style="color:#719e07">=</span><span style="color:#2aa198">20880</span> |
| </span></span></code></pre></div><h4 id="spring-boot">Spring Boot</h4> |
| <blockquote> |
| <p>参见<a href="https://github.com/apache/dubbo-spring-boot-project/tree/master/dubbo-spring-boot-samples">示例</a></p> |
| </blockquote> |
| <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">## application.properties</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75"># Spring boot application</span> |
| </span></span><span style="display:flex;"><span>spring.application.name<span style="color:#719e07">=</span><span style="color:#2aa198">dubbo-externalized-configuration-provider-sample</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75"># Base packages to scan Dubbo Component: @com.alibaba.dubbo.config.annotation.Service</span> |
| </span></span><span style="display:flex;"><span>dubbo.scan.base-packages<span style="color:#719e07">=</span><span style="color:#2aa198">com.alibaba.boot.dubbo.demo.provider.service</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75"># Dubbo Application</span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">## The default value of dubbo.application.name is ${spring.application.name}</span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">## dubbo.application.name=${spring.application.name}</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75"># Dubbo Protocol</span> |
| </span></span><span style="display:flex;"><span>dubbo.protocol.name<span style="color:#719e07">=</span><span style="color:#2aa198">dubbo</span> |
| </span></span><span style="display:flex;"><span>dubbo.protocol.port<span style="color:#719e07">=</span><span style="color:#2aa198">12345</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">## Dubbo Registry</span> |
| </span></span><span style="display:flex;"><span>dubbo.registry.address<span style="color:#719e07">=</span><span style="color:#2aa198">N/A</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">## DemoService version</span> |
| </span></span><span style="display:flex;"><span>demo.service.version<span style="color:#719e07">=</span><span style="color:#2aa198">1.0.0</span> |
| </span></span></code></pre></div><h4 id="api">API</h4> |
| <blockquote> |
| <p>参考<a href="https://github.com/apache/dubbo-samples/tree/master/1-basic/dubbo-samples-api">示例</a></p> |
| </blockquote> |
| <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">public</span> <span style="color:#268bd2">static</span> <span style="color:#dc322f">void</span> <span style="color:#268bd2">main</span><span style="color:#719e07">(</span>String<span style="color:#719e07">[]</span> args<span style="color:#719e07">)</span> <span style="color:#268bd2">throws</span> IOException <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> ServiceConfig<span style="color:#719e07">&lt;</span>GreetingsService<span style="color:#719e07">&gt;</span> service <span style="color:#719e07">=</span> <span style="color:#719e07">new</span> ServiceConfig<span style="color:#719e07">&lt;&gt;();</span> |
| </span></span><span style="display:flex;"><span> service<span style="color:#719e07">.</span>setApplication<span style="color:#719e07">(</span><span style="color:#719e07">new</span> ApplicationConfig<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;first-dubbo-provider&#34;</span><span style="color:#719e07">));</span> |
| </span></span><span style="display:flex;"><span> service<span style="color:#719e07">.</span>setRegistry<span style="color:#719e07">(</span><span style="color:#719e07">new</span> RegistryConfig<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;multicast://224.5.6.7:1234&#34;</span><span style="color:#719e07">));</span> |
| </span></span><span style="display:flex;"><span> service<span style="color:#719e07">.</span>setInterface<span style="color:#719e07">(</span>GreetingsService<span style="color:#719e07">.</span>class<span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> service<span style="color:#719e07">.</span>setRef<span style="color:#719e07">(</span><span style="color:#719e07">new</span> GreetingsServiceImpl<span style="color:#719e07">());</span> |
| </span></span><span style="display:flex;"><span> service<span style="color:#719e07">.</span>export<span style="color:#719e07">();</span> |
| </span></span><span style="display:flex;"><span> System<span style="color:#719e07">.</span>out<span style="color:#719e07">.</span>println<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;first-dubbo-provider is running.&#34;</span><span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> System<span style="color:#719e07">.</span>in<span style="color:#719e07">.</span>read<span style="color:#719e07">();</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">}</span> |
| </span></span></code></pre></div></description></item><item><title>Docs: API 配置</title><link>https://dubbo.apache.org/zh-cn/docs/references/configuration/api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docs/references/configuration/api/</guid><description> |
| <div class="pageinfo pageinfo-primary"> |
| <p>此文档已经不再维护。您当前查看的是快照版本。如果想要查看最新版本的文档,请参阅<a href="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/config/api/">最新版本</a>。</p> |
| </div> |
| <p>通过API编码方式组装配置,启动Dubbo,发布及订阅服务。此方式可以支持动态创建ReferenceConfig/ServiceConfig,结合泛化调用可以满足API Gateway或测试平台的需要。</p> |
| <blockquote> |
| <p>API 属性与XML配置项一一对应,各属性含义请参见:<a href="../../../references/xml/">XML配置参考手册</a>,比如:<code>ApplicationConfig.setName(&quot;xxx&quot;)</code> 对应 <code>&lt;dubbo:application name=&quot;xxx&quot; /&gt;</code></p> |
| </blockquote> |
| <blockquote> |
| <p>API使用范围说明:API 仅用于 OpenAPI, ESB, Test, Mock, Gateway 等系统集成,普通服务提供方或消费方,请采用<a href="../xml">XML 配置</a> 或 |
| <a href="../annotation">注解配置</a> 或 <a href="../properties">属性配置</a> 方式使用 Dubbo</p> |
| </blockquote> |
| <blockquote> |
| <p>参考<a href="https://github.com/apache/dubbo-samples/tree/master/1-basic/dubbo-samples-api">API示例</a></p> |
| </blockquote> |
| <h2 id="服务提供者">服务提供者</h2> |
| <p>通过ServiceConfig暴露服务接口,发布服务接口到注册中心。</p> |
| <blockquote> |
| <p>注意:为了更好支持Dubbo3的应用级服务发现,推荐使用新的DubboBootstrap API。</p> |
| </blockquote> |
| <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:#719e07">import</span> org.apache.dubbo.config.ApplicationConfig<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.config.RegistryConfig<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.config.ProviderConfig<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.config.ServiceConfig<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> com.xxx.DemoService<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> com.xxx.DemoServiceImpl<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">DemoProvider</span> <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> <span style="color:#268bd2">static</span> <span style="color:#dc322f">void</span> <span style="color:#268bd2">main</span><span style="color:#719e07">(</span>String<span style="color:#719e07">[]</span> args<span style="color:#719e07">)</span> <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// 服务实现 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> DemoService demoService <span style="color:#719e07">=</span> <span style="color:#719e07">new</span> DemoServiceImpl<span style="color:#719e07">();</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// 当前应用配置 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> ApplicationConfig application <span style="color:#719e07">=</span> <span style="color:#719e07">new</span> ApplicationConfig<span style="color:#719e07">();</span> |
| </span></span><span style="display:flex;"><span> application<span style="color:#719e07">.</span>setName<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;demo-provider&#34;</span><span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// 连接注册中心配置 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> RegistryConfig registry <span style="color:#719e07">=</span> <span style="color:#719e07">new</span> RegistryConfig<span style="color:#719e07">();</span> |
| </span></span><span style="display:flex;"><span> registry<span style="color:#719e07">.</span>setAddress<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;zookeeper://10.20.130.230:2181&#34;</span><span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// 服务提供者协议配置 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> ProtocolConfig protocol <span style="color:#719e07">=</span> <span style="color:#719e07">new</span> ProtocolConfig<span style="color:#719e07">();</span> |
| </span></span><span style="display:flex;"><span> protocol<span style="color:#719e07">.</span>setName<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;dubbo&#34;</span><span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> protocol<span style="color:#719e07">.</span>setPort<span style="color:#719e07">(</span>12345<span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> protocol<span style="color:#719e07">.</span>setThreads<span style="color:#719e07">(</span>200<span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// 注意:ServiceConfig为重对象,内部封装了与注册中心的连接,以及开启服务端口 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#586e75">// 服务提供者暴露服务配置 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> ServiceConfig<span style="color:#719e07">&lt;</span>DemoService<span style="color:#719e07">&gt;</span> service <span style="color:#719e07">=</span> <span style="color:#719e07">new</span> ServiceConfig<span style="color:#719e07">&lt;</span>DemoService<span style="color:#719e07">&gt;();</span> <span style="color:#586e75">// 此实例很重,封装了与注册中心的连接,请自行缓存,否则可能造成内存和连接泄漏 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> service<span style="color:#719e07">.</span>setApplication<span style="color:#719e07">(</span>application<span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> service<span style="color:#719e07">.</span>setRegistry<span style="color:#719e07">(</span>registry<span style="color:#719e07">);</span> <span style="color:#586e75">// 多个注册中心可以用setRegistries() |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> service<span style="color:#719e07">.</span>setProtocol<span style="color:#719e07">(</span>protocol<span style="color:#719e07">);</span> <span style="color:#586e75">// 多个协议可以用setProtocols() |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> service<span style="color:#719e07">.</span>setInterface<span style="color:#719e07">(</span>DemoService<span style="color:#719e07">.</span>class<span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> service<span style="color:#719e07">.</span>setRef<span style="color:#719e07">(</span>demoService<span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> service<span style="color:#719e07">.</span>setVersion<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;1.0.0&#34;</span><span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// 暴露及注册服务 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> service<span style="color:#719e07">.</span>export<span style="color:#719e07">();</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// 挂起等待(防止进程退出) |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> System<span style="color:#719e07">.</span>in<span style="color:#719e07">.</span>read<span style="color:#719e07">();</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">}</span> |
| </span></span></code></pre></div><h2 id="服务消费者">服务消费者</h2> |
| <p>通过ReferenceConfig引用远程服务,从注册中心订阅服务接口。</p> |
| <blockquote> |
| <p>注意:为了更好支持Dubbo3的应用级服务发现,推荐使用新的DubboBootstrap API。</p> |
| </blockquote> |
| <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:#719e07">import</span> org.apache.dubbo.config.ApplicationConfig<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.config.RegistryConfig<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.config.ConsumerConfig<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.config.ReferenceConfig<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> com.xxx.DemoService<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">DemoConsumer</span> <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> <span style="color:#268bd2">static</span> <span style="color:#dc322f">void</span> <span style="color:#268bd2">main</span><span style="color:#719e07">(</span>String<span style="color:#719e07">[]</span> args<span style="color:#719e07">)</span> <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// 当前应用配置 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> ApplicationConfig application <span style="color:#719e07">=</span> <span style="color:#719e07">new</span> ApplicationConfig<span style="color:#719e07">();</span> |
| </span></span><span style="display:flex;"><span> application<span style="color:#719e07">.</span>setName<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;demo-consumer&#34;</span><span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// 连接注册中心配置 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> RegistryConfig registry <span style="color:#719e07">=</span> <span style="color:#719e07">new</span> RegistryConfig<span style="color:#719e07">();</span> |
| </span></span><span style="display:flex;"><span> registry<span style="color:#719e07">.</span>setAddress<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;zookeeper://10.20.130.230:2181&#34;</span><span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// 注意:ReferenceConfig为重对象,内部封装了与注册中心的连接,以及与服务提供方的连接 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#586e75">// 引用远程服务 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> ReferenceConfig<span style="color:#719e07">&lt;</span>DemoService<span style="color:#719e07">&gt;</span> reference <span style="color:#719e07">=</span> <span style="color:#719e07">new</span> ReferenceConfig<span style="color:#719e07">&lt;</span>DemoService<span style="color:#719e07">&gt;();</span> <span style="color:#586e75">// 此实例很重,封装了与注册中心的连接以及与提供者的连接,请自行缓存,否则可能造成内存和连接泄漏 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> reference<span style="color:#719e07">.</span>setApplication<span style="color:#719e07">(</span>application<span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> reference<span style="color:#719e07">.</span>setRegistry<span style="color:#719e07">(</span>registry<span style="color:#719e07">);</span> <span style="color:#586e75">// 多个注册中心可以用setRegistries() |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> reference<span style="color:#719e07">.</span>setInterface<span style="color:#719e07">(</span>DemoService<span style="color:#719e07">.</span>class<span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> reference<span style="color:#719e07">.</span>setVersion<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;1.0.0&#34;</span><span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// 和本地bean一样使用demoService |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#586e75">// 注意:此代理对象内部封装了所有通讯细节,对象较重,请缓存复用 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> DemoService demoService <span style="color:#719e07">=</span> reference<span style="color:#719e07">.</span>get<span style="color:#719e07">();</span> |
| </span></span><span style="display:flex;"><span> demoService<span style="color:#719e07">.</span>sayHello<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;Dubbo&#34;</span><span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">}</span> |
| </span></span></code></pre></div><h2 id="bootstrap-api">Bootstrap API</h2> |
| <p>通过DubboBootstrap API可以减少重复配置,更好控制启动过程,支持批量发布/订阅服务接口,还可以更好支持Dubbo3的应用级服务发现。</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:#719e07">import</span> org.apache.dubbo.config.bootstrap.DubboBootstrap<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.config.ApplicationConfig<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.config.RegistryConfig<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.config.ProviderConfig<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.config.ServiceConfig<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> com.xxx.DemoService<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> com.xxx.DemoServiceImpl<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">DemoProvider</span> <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> <span style="color:#268bd2">static</span> <span style="color:#dc322f">void</span> <span style="color:#268bd2">main</span><span style="color:#719e07">(</span>String<span style="color:#719e07">[]</span> args<span style="color:#719e07">)</span> <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span> ConfigCenterConfig configCenter <span style="color:#719e07">=</span> <span style="color:#719e07">new</span> ConfigCenterConfig<span style="color:#719e07">();</span> |
| </span></span><span style="display:flex;"><span> configCenter<span style="color:#719e07">.</span>setAddress<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;zookeeper://127.0.0.1:2181&#34;</span><span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// 服务提供者协议配置 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> ProtocolConfig protocol <span style="color:#719e07">=</span> <span style="color:#719e07">new</span> ProtocolConfig<span style="color:#719e07">();</span> |
| </span></span><span style="display:flex;"><span> protocol<span style="color:#719e07">.</span>setName<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;dubbo&#34;</span><span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> protocol<span style="color:#719e07">.</span>setPort<span style="color:#719e07">(</span>12345<span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> protocol<span style="color:#719e07">.</span>setThreads<span style="color:#719e07">(</span>200<span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// 注意:ServiceConfig为重对象,内部封装了与注册中心的连接,以及开启服务端口 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#586e75">// 服务提供者暴露服务配置 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> ServiceConfig<span style="color:#719e07">&lt;</span>DemoService<span style="color:#719e07">&gt;</span> demoServiceConfig <span style="color:#719e07">=</span> <span style="color:#719e07">new</span> ServiceConfig<span style="color:#719e07">&lt;&gt;();</span> |
| </span></span><span style="display:flex;"><span> demoServiceConfig<span style="color:#719e07">.</span>setInterface<span style="color:#719e07">(</span>DemoService<span style="color:#719e07">.</span>class<span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> demoServiceConfig<span style="color:#719e07">.</span>setRef<span style="color:#719e07">(</span><span style="color:#719e07">new</span> DemoServiceImpl<span style="color:#719e07">());</span> |
| </span></span><span style="display:flex;"><span> demoServiceConfig<span style="color:#719e07">.</span>setVersion<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;1.0.0&#34;</span><span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// 第二个服务配置 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> ServiceConfig<span style="color:#719e07">&lt;</span>FooService<span style="color:#719e07">&gt;</span> fooServiceConfig <span style="color:#719e07">=</span> <span style="color:#719e07">new</span> ServiceConfig<span style="color:#719e07">&lt;&gt;();</span> |
| </span></span><span style="display:flex;"><span> fooServiceConfig<span style="color:#719e07">.</span>setInterface<span style="color:#719e07">(</span>FooService<span style="color:#719e07">.</span>class<span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> fooServiceConfig<span style="color:#719e07">.</span>setRef<span style="color:#719e07">(</span><span style="color:#719e07">new</span> FooServiceImpl<span style="color:#719e07">());</span> |
| </span></span><span style="display:flex;"><span> fooServiceConfig<span style="color:#719e07">.</span>setVersion<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;1.0.0&#34;</span><span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">...</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// 通过DubboBootstrap简化配置组装,控制启动过程 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> DubboBootstrap<span style="color:#719e07">.</span>getInstance<span style="color:#719e07">()</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">.</span>application<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;demo-provider&#34;</span><span style="color:#719e07">)</span> <span style="color:#586e75">// 应用配置 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">.</span>registry<span style="color:#719e07">(</span><span style="color:#719e07">new</span> RegistryConfig<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;zookeeper://127.0.0.1:2181&#34;</span><span style="color:#719e07">))</span> <span style="color:#586e75">// 注册中心配置 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">.</span>protocol<span style="color:#719e07">(</span>protocol<span style="color:#719e07">)</span> <span style="color:#586e75">// 全局默认协议配置 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">.</span>service<span style="color:#719e07">(</span>demoServiceConfig<span style="color:#719e07">)</span> <span style="color:#586e75">// 添加ServiceConfig |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">.</span>service<span style="color:#719e07">(</span>fooServiceConfig<span style="color:#719e07">)</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">.</span>start<span style="color:#719e07">()</span> <span style="color:#586e75">// 启动Dubbo |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">.</span>await<span style="color:#719e07">();</span> <span style="color:#586e75">// 挂起等待(防止进程退出) |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">}</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><span style="color:#719e07">import</span> org.apache.dubbo.config.bootstrap.DubboBootstrap<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.config.ApplicationConfig<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.config.RegistryConfig<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.config.ProviderConfig<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.config.ServiceConfig<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> com.xxx.DemoService<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> com.xxx.DemoServiceImpl<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">DemoConsumer</span> <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> <span style="color:#268bd2">static</span> <span style="color:#dc322f">void</span> <span style="color:#268bd2">main</span><span style="color:#719e07">(</span>String<span style="color:#719e07">[]</span> args<span style="color:#719e07">)</span> <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// 引用远程服务 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> ReferenceConfig<span style="color:#719e07">&lt;</span>DemoService<span style="color:#719e07">&gt;</span> demoServiceReference <span style="color:#719e07">=</span> <span style="color:#719e07">new</span> ReferenceConfig<span style="color:#719e07">&lt;</span>DemoService<span style="color:#719e07">&gt;();</span> |
| </span></span><span style="display:flex;"><span> demoServiceReference<span style="color:#719e07">.</span>setInterface<span style="color:#719e07">(</span>DemoService<span style="color:#719e07">.</span>class<span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> demoServiceReference<span style="color:#719e07">.</span>setVersion<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;1.0.0&#34;</span><span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span> ReferenceConfig<span style="color:#719e07">&lt;</span>FooService<span style="color:#719e07">&gt;</span> fooServiceReference <span style="color:#719e07">=</span> <span style="color:#719e07">new</span> ReferenceConfig<span style="color:#719e07">&lt;</span>FooService<span style="color:#719e07">&gt;();</span> |
| </span></span><span style="display:flex;"><span> fooServiceReference<span style="color:#719e07">.</span>setInterface<span style="color:#719e07">(</span>FooService<span style="color:#719e07">.</span>class<span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> fooServiceReference<span style="color:#719e07">.</span>setVersion<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;1.0.0&#34;</span><span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// 通过DubboBootstrap简化配置组装,控制启动过程 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> DubboBootstrap bootstrap <span style="color:#719e07">=</span> DubboBootstrap<span style="color:#719e07">.</span>getInstance<span style="color:#719e07">();</span> |
| </span></span><span style="display:flex;"><span> bootstrap<span style="color:#719e07">.</span>application<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;demo-consumer&#34;</span><span style="color:#719e07">)</span> <span style="color:#586e75">// 应用配置 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">.</span>registry<span style="color:#719e07">(</span><span style="color:#719e07">new</span> RegistryConfig<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;zookeeper://127.0.0.1:2181&#34;</span><span style="color:#719e07">))</span> <span style="color:#586e75">// 注册中心配置 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">.</span>reference<span style="color:#719e07">(</span>demoServiceReference<span style="color:#719e07">)</span> <span style="color:#586e75">// 添加ReferenceConfig |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">.</span>service<span style="color:#719e07">(</span>fooServiceReference<span style="color:#719e07">)</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">.</span>start<span style="color:#719e07">();</span> <span style="color:#586e75">// 启动Dubbo |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">...</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// 和本地bean一样使用demoService |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#586e75">// 通过Interface获取远程服务接口代理,不需要依赖ReferenceConfig对象 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> DemoService demoService <span style="color:#719e07">=</span> DubboBootstrap<span style="color:#719e07">.</span>getInstance<span style="color:#719e07">().</span>getCache<span style="color:#719e07">().</span>get<span style="color:#719e07">(</span>DemoService<span style="color:#719e07">.</span>class<span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> demoService<span style="color:#719e07">.</span>sayHello<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;Dubbo&#34;</span><span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span> FooService fooService <span style="color:#719e07">=</span> DubboBootstrap<span style="color:#719e07">.</span>getInstance<span style="color:#719e07">().</span>getCache<span style="color:#719e07">().</span>get<span style="color:#719e07">(</span>FooService<span style="color:#719e07">.</span>class<span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> fooService<span style="color:#719e07">.</span>greeting<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;Dubbo&#34;</span><span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">}</span> |
| </span></span></code></pre></div><h2 id="其它配置">其它配置</h2> |
| <p>API配置能力与XML配置是等价的,其它的各种配置都可以用API设置。</p> |
| <p>下面只列出不同的地方,其它参见上面的写法。</p> |
| <h3 id="基本配置">基本配置</h3> |
| <p>可以在DubboBootstrap中设置全局基本配置,包括应用配置、协议配置、注册中心、配置中心、元数据中心、模块、监控、SSL、provider配置、consumer配置等。</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:#586e75">// 注册中心 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span>RegistryConfig registry <span style="color:#719e07">=</span> <span style="color:#719e07">new</span> RegistryConfig<span style="color:#719e07">();</span> |
| </span></span><span style="display:flex;"><span>registry<span style="color:#719e07">.</span>setAddress<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;zookeeper://192.168.10.1:2181&#34;</span><span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">...</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">// 服务提供者协议配置 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span>ProtocolConfig protocol <span style="color:#719e07">=</span> <span style="color:#719e07">new</span> ProtocolConfig<span style="color:#719e07">();</span> |
| </span></span><span style="display:flex;"><span>protocol<span style="color:#719e07">.</span>setName<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;dubbo&#34;</span><span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span>protocol<span style="color:#719e07">.</span>setPort<span style="color:#719e07">(</span>12345<span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span>protocol<span style="color:#719e07">.</span>setThreads<span style="color:#719e07">(</span>200<span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">...</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">// 配置中心 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span>ConfigCenterConfig configCenter <span style="color:#719e07">=</span> <span style="color:#719e07">new</span> ConfigCenterConfig<span style="color:#719e07">();</span> |
| </span></span><span style="display:flex;"><span>configCenter<span style="color:#719e07">.</span>setAddress<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;zookeeper://192.168.10.2:2181&#34;</span><span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">...</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">// 元数据中心 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span>MetadataReportConfig metadataReport <span style="color:#719e07">=</span> <span style="color:#719e07">new</span> MetadataReportConfig<span style="color:#719e07">();</span> |
| </span></span><span style="display:flex;"><span>metadataReport<span style="color:#719e07">.</span>setAddress<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;zookeeper://192.168.10.3:2181&#34;</span><span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">...</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">// Metrics |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span>MetricsConfig metrics <span style="color:#719e07">=</span> <span style="color:#719e07">new</span> MetricsConfig<span style="color:#719e07">();</span> |
| </span></span><span style="display:flex;"><span>metrics<span style="color:#719e07">.</span>setProtocol<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;dubbo&#34;</span><span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">...</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">// SSL |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span>SslConfig ssl <span style="color:#719e07">=</span> <span style="color:#719e07">new</span> SslConfig<span style="color:#719e07">();</span> |
| </span></span><span style="display:flex;"><span>ssl<span style="color:#719e07">.</span>setServerKeyCertChainPath<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;/path/ssl/server-key-cert-chain&#34;</span><span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span>ssl<span style="color:#719e07">.</span>setServerPrivateKeyPath<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;/path/ssl/server-private-key&#34;</span><span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">...</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">// Provider配置(ServiceConfig默认配置) |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span>ProviderConfig provider <span style="color:#719e07">=</span> <span style="color:#719e07">new</span> ProviderConfig<span style="color:#719e07">();</span> |
| </span></span><span style="display:flex;"><span>provider<span style="color:#719e07">.</span>setGroup<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;demo&#34;</span><span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span>provider<span style="color:#719e07">.</span>setVersion<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;1.0.0&#34;</span><span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">...</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">// Consumer配置(ReferenceConfig默认配置) |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span>ConsumerConfig consumer <span style="color:#719e07">=</span> <span style="color:#719e07">new</span> ConsumerConfig<span style="color:#719e07">();</span> |
| </span></span><span style="display:flex;"><span>consumer<span style="color:#719e07">.</span>setGroup<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;demo&#34;</span><span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span>consumer<span style="color:#719e07">.</span>setVersion<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;1.0.0&#34;</span><span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span>consumer<span style="color:#719e07">.</span>setTimeout<span style="color:#719e07">(</span>2000<span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">...</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>DubboBootstrap<span style="color:#719e07">.</span>getInstance<span style="color:#719e07">()</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">.</span>application<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;demo-app&#34;</span><span style="color:#719e07">)</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">.</span>registry<span style="color:#719e07">(</span>registry<span style="color:#719e07">)</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">.</span>protocol<span style="color:#719e07">(</span>protocol<span style="color:#719e07">)</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">.</span>configCenter<span style="color:#719e07">(</span>configCenter<span style="color:#719e07">)</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">.</span>metadataReport<span style="color:#719e07">(</span>metadataReport<span style="color:#719e07">)</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">.</span>module<span style="color:#719e07">(</span><span style="color:#719e07">new</span> ModuleConfig<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;module&#34;</span><span style="color:#719e07">))</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">.</span>metrics<span style="color:#719e07">(</span>metrics<span style="color:#719e07">)</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">.</span>ssl<span style="color:#719e07">(</span>ssl<span style="color:#719e07">)</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">.</span>provider<span style="color:#719e07">(</span>provider<span style="color:#719e07">)</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">.</span>consumer<span style="color:#719e07">(</span>consumer<span style="color:#719e07">)</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">...</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">.</span>start<span style="color:#719e07">();</span> |
| </span></span></code></pre></div><h3 id="方法级设置">方法级设置</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-java" data-lang="java"><span style="display:flex;"><span><span style="color:#719e07">...</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">// 方法级配置 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span>List<span style="color:#719e07">&lt;</span>MethodConfig<span style="color:#719e07">&gt;</span> methods <span style="color:#719e07">=</span> <span style="color:#719e07">new</span> ArrayList<span style="color:#719e07">&lt;</span>MethodConfig<span style="color:#719e07">&gt;();</span> |
| </span></span><span style="display:flex;"><span>MethodConfig method <span style="color:#719e07">=</span> <span style="color:#719e07">new</span> MethodConfig<span style="color:#719e07">();</span> |
| </span></span><span style="display:flex;"><span>method<span style="color:#719e07">.</span>setName<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;sayHello&#34;</span><span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span>method<span style="color:#719e07">.</span>setTimeout<span style="color:#719e07">(</span>10000<span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span>method<span style="color:#719e07">.</span>setRetries<span style="color:#719e07">(</span>0<span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span>methods<span style="color:#719e07">.</span>add<span style="color:#719e07">(</span>method<span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">// 引用远程服务 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span>ReferenceConfig<span style="color:#719e07">&lt;</span>DemoService<span style="color:#719e07">&gt;</span> reference <span style="color:#719e07">=</span> <span style="color:#719e07">new</span> ReferenceConfig<span style="color:#719e07">&lt;</span>DemoService<span style="color:#719e07">&gt;();</span> <span style="color:#586e75">// 此实例很重,封装了与注册中心的连接以及与提供者的连接,请自行缓存,否则可能造成内存和连接泄漏 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span><span style="color:#719e07">...</span> |
| </span></span><span style="display:flex;"><span>reference<span style="color:#719e07">.</span>setMethods<span style="color:#719e07">(</span>methods<span style="color:#719e07">);</span> <span style="color:#586e75">// 设置方法级配置 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">...</span> |
| </span></span></code></pre></div><h3 id="点对点直连">点对点直连</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-java" data-lang="java"><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">...</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">// 此实例很重,封装了与注册中心的连接以及与提供者的连接,请自行缓存,否则可能造成内存和连接泄漏 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span>ReferenceConfig<span style="color:#719e07">&lt;</span>DemoService<span style="color:#719e07">&gt;</span> reference <span style="color:#719e07">=</span> <span style="color:#719e07">new</span> ReferenceConfig<span style="color:#719e07">&lt;</span>DemoService<span style="color:#719e07">&gt;();</span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">// 如果点对点直连,可以用reference.setUrl()指定目标地址,设置url后将绕过注册中心, |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75">// 其中,协议对应provider.setProtocol()的值,端口对应provider.setPort()的值, |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75">// 路径对应service.setPath()的值,如果未设置path,缺省path为接口名 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span>reference<span style="color:#719e07">.</span>setUrl<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;dubbo://10.20.130.230:20880/com.xxx.DemoService&#34;</span><span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">...</span> |
| </span></span></code></pre></div></description></item><item><title>Docs: XML 配置</title><link>https://dubbo.apache.org/zh-cn/docs/references/configuration/xml/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docs/references/configuration/xml/</guid><description> |
| <div class="pageinfo pageinfo-primary"> |
| <p>此文档已经不再维护。您当前查看的是快照版本。如果想要查看最新版本的文档,请参阅<a href="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/config/xml/">最新版本</a>。</p> |
| </div> |
| <p>有关 XML 的详细配置项,请参见:<a href="../../../references/xml">XML配置参考手册</a>。如果不想使用 Spring 配置,而希望通过 API 的方式进行调用,请参见:<a href="../api">API配置</a>。想知道如何使用配置,请参见:<a href="../../../quick-start">快速启动</a>。</p> |
| <p>请在此查看文档描述的<a href="https://github.com/apache/dubbo-samples/tree/master/1-basic/dubbo-samples-spring-xml">完整示例</a></p> |
| <h2 id="providerxml-示例">provider.xml 示例</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;beans</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> xmlns=<span style="color:#2aa198">&#34;http://www.springframework.org/schema/beans&#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.xsd |
| </span></span></span><span style="display:flex;"><span><span style="color:#2aa198"> 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:#268bd2">&lt;dubbo:application</span> name=<span style="color:#2aa198">&#34;demo-provider&#34;</span><span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;dubbo:registry</span> address=<span style="color:#2aa198">&#34;zookeeper://127.0.0.1:2181&#34;</span><span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;dubbo:protocol</span> name=<span style="color:#2aa198">&#34;dubbo&#34;</span> port=<span style="color:#2aa198">&#34;20890&#34;</span><span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;bean</span> id=<span style="color:#2aa198">&#34;demoService&#34;</span> class=<span style="color:#2aa198">&#34;org.apache.dubbo.samples.basic.impl.DemoServiceImpl&#34;</span><span style="color:#268bd2">/&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.samples.basic.api.DemoService&#34;</span> ref=<span style="color:#2aa198">&#34;demoService&#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><h2 id="consumerxml示例">consumer.xml示例</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;beans</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> xmlns=<span style="color:#2aa198">&#34;http://www.springframework.org/schema/beans&#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.xsd |
| </span></span></span><span style="display:flex;"><span><span style="color:#2aa198"> 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:#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:registry</span> group=<span style="color:#2aa198">&#34;aaa&#34;</span> address=<span style="color:#2aa198">&#34;zookeeper://127.0.0.1:2181&#34;</span><span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;dubbo:reference</span> id=<span style="color:#2aa198">&#34;demoService&#34;</span> check=<span style="color:#2aa198">&#34;false&#34;</span> interface=<span style="color:#2aa198">&#34;org.apache.dubbo.samples.basic.api.DemoService&#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>所有标签都支持自定义参数,用于不同扩展点实现的特殊配置,如:</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:protocol</span> name=<span style="color:#2aa198">&#34;jms&#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;queue&#34;</span> value=<span style="color:#2aa198">&#34;your_queue&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;/dubbo:protocol&gt;</span> |
| </span></span></code></pre></div><p>或: <sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></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;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> xmlns:p=<span style="color:#2aa198">&#34;http://www.springframework.org/schema/p&#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:#268bd2">&lt;dubbo:protocol</span> name=<span style="color:#2aa198">&#34;jms&#34;</span> p:queue=<span style="color:#2aa198">&#34;your_queue&#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><h2 id="配置之间的关系">配置之间的关系</h2> |
| <p><img src="https://dubbo.apache.org/imgs/user/dubbo-config.jpg" alt="dubbo-config"></p> |
| <table> |
| <thead> |
| <tr> |
| <th>标签</th> |
| <th>用途</th> |
| <th>解释</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td><code>&lt;dubbo:service/&gt;</code></td> |
| <td>服务配置</td> |
| <td>用于暴露一个服务,定义服务的元信息,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心</td> |
| </tr> |
| <tr> |
| <td><code>&lt;dubbo:reference/&gt;</code> <sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup></td> |
| <td>引用配置</td> |
| <td>用于创建一个远程服务代理,一个引用可以指向多个注册中心</td> |
| </tr> |
| <tr> |
| <td><code>&lt;dubbo:protocol/&gt;</code></td> |
| <td>协议配置</td> |
| <td>用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受</td> |
| </tr> |
| <tr> |
| <td><code>&lt;dubbo:application/&gt;</code></td> |
| <td>应用配置</td> |
| <td>用于配置当前应用信息,不管该应用是提供者还是消费者</td> |
| </tr> |
| <tr> |
| <td><code>&lt;dubbo:module/&gt;</code></td> |
| <td>模块配置</td> |
| <td>用于配置当前模块信息,可选</td> |
| </tr> |
| <tr> |
| <td><code>&lt;dubbo:registry/&gt;</code></td> |
| <td>注册中心配置</td> |
| <td>用于配置连接注册中心相关信息</td> |
| </tr> |
| <tr> |
| <td><code>&lt;dubbo:monitor/&gt;</code></td> |
| <td>监控中心配置</td> |
| <td>用于配置连接监控中心相关信息,可选</td> |
| </tr> |
| <tr> |
| <td><code>&lt;dubbo:provider/&gt;</code></td> |
| <td>提供方配置</td> |
| <td>当 ProtocolConfig 和 ServiceConfig 某属性没有配置时,采用此缺省值,可选</td> |
| </tr> |
| <tr> |
| <td><code>&lt;dubbo:consumer/&gt;</code></td> |
| <td>消费方配置</td> |
| <td>当 ReferenceConfig 某属性没有配置时,采用此缺省值,可选</td> |
| </tr> |
| <tr> |
| <td><code>&lt;dubbo:method/&gt;</code></td> |
| <td>方法配置</td> |
| <td>用于 ServiceConfig 和 ReferenceConfig 指定方法级的配置信息</td> |
| </tr> |
| <tr> |
| <td><code>&lt;dubbo:argument/&gt;</code></td> |
| <td>参数配置</td> |
| <td>用于指定方法参数配置</td> |
| </tr> |
| </tbody> |
| </table> |
| <h2 id="不同粒度配置的覆盖关系">不同粒度配置的覆盖关系</h2> |
| <p>以 timeout 为例,下图显示了配置的查找顺序,其它 retries, loadbalance, actives 等类似:</p> |
| <ul> |
| <li>方法级优先,接口级次之,全局配置再次之。</li> |
| <li>如果级别一样,则消费方优先,提供方次之。</li> |
| </ul> |
| <p>其中,服务提供方配置,通过 URL 经由注册中心传递给消费方。</p> |
| <p><img src="https://dubbo.apache.org/imgs/user/dubbo-config-override.jpg" alt="dubbo-config-override"></p> |
| <p>(建议由服务提供方设置超时,因为一个方法需要执行多长时间,服务提供方更清楚,如果一个消费方同时引用多个服务,就不需要关心每个服务的超时设置)。</p> |
| <p>理论上 ReferenceConfig 中除了<code>interface</code>这一项,其他所有配置项都可以缺省不配置,框架会自动使用ConsumerConfig,ServiceConfig, ProviderConfig等提供的缺省配置。</p> |
| <div class="footnotes" role="doc-endnotes"> |
| <hr> |
| <ol> |
| <li id="fn:1"> |
| <p><code>2.1.0</code> 开始支持,注意声明:<code>xmlns:p=&quot;http://www.springframework.org/schema/p&quot;</code>&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p> |
| </li> |
| <li id="fn:2"> |
| <p>引用缺省是延迟初始化的,只有引用被注入到其它 Bean,或被 <code>getBean()</code> 获取,才会初始化。如果需要饥饿加载,即没有人引用也立即生成动态代理,可以配置:<code>&lt;dubbo:reference ... init=&quot;true&quot; /&gt;</code>&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p> |
| </li> |
| </ol> |
| </div></description></item><item><title>Docs: 注解配置</title><link>https://dubbo.apache.org/zh-cn/docs/references/configuration/annotation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docs/references/configuration/annotation/</guid><description> |
| <div class="pageinfo pageinfo-primary"> |
| <p>此文档已经不再维护。您当前查看的是快照版本。如果想要查看最新版本的文档,请参阅<a href="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/config/annotation/">最新版本</a>。</p> |
| </div> |
| <div class="alert alert-primary" role="alert"> |
| <h4 class="alert-heading">提示</h4> |
| 需要 <code>2.6.3</code> 及以上版本支持。 点此查看 <a href="https://github.com/apache/dubbo-samples/tree/master/1-basic/dubbo-samples-annotation">完整示例</a> |
| </div> |
| <h2 id="服务提供方">服务提供方</h2> |
| <h3 id="service注解暴露服务"><code>Service</code>注解暴露服务</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-java" data-lang="java"><span style="display:flex;"><span><span style="color:#268bd2">@Service</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">AnnotationServiceImpl</span> <span style="color:#268bd2">implements</span> AnnotationService <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">@Override</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> String <span style="color:#268bd2">sayHello</span><span style="color:#719e07">(</span>String name<span style="color:#719e07">)</span> <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">return</span> <span style="color:#2aa198">&#34;annotation: hello, &#34;</span> <span style="color:#719e07">+</span> name<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">}</span> |
| </span></span></code></pre></div><h3 id="增加应用共享配置">增加应用共享配置</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-properties" data-lang="properties"><span style="display:flex;"><span><span style="color:#586e75"># dubbo-provider.properties</span> |
| </span></span><span style="display:flex;"><span>dubbo.application.name<span style="color:#719e07">=</span><span style="color:#2aa198">annotation-provider</span> |
| </span></span><span style="display:flex;"><span>dubbo.registry.address<span style="color:#719e07">=</span><span style="color:#2aa198">zookeeper://127.0.0.1:2181</span> |
| </span></span><span style="display:flex;"><span>dubbo.protocol.name<span style="color:#719e07">=</span><span style="color:#2aa198">dubbo</span> |
| </span></span><span style="display:flex;"><span>dubbo.protocol.port<span style="color:#719e07">=</span><span style="color:#2aa198">20880</span> |
| </span></span></code></pre></div><h3 id="指定spring扫描路径">指定Spring扫描路径</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-java" data-lang="java"><span style="display:flex;"><span><span style="color:#268bd2">@Configuration</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">@EnableDubbo</span><span style="color:#719e07">(</span>scanBasePackages <span style="color:#719e07">=</span> <span style="color:#2aa198">&#34;org.apache.dubbo.samples.simple.annotation.impl&#34;</span><span style="color:#719e07">)</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">@PropertySource</span><span style="color:#719e07">(</span><span style="color:#2aa198">&#34;classpath:/spring/dubbo-provider.properties&#34;</span><span style="color:#719e07">)</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">static</span> <span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">ProviderConfiguration</span> <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">}</span> |
| </span></span></code></pre></div><h2 id="服务消费方">服务消费方</h2> |
| <h3 id="reference注解引用服务"><code>Reference</code>注解引用服务</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-java" data-lang="java"><span style="display:flex;"><span><span style="color:#268bd2">@Component</span><span style="color:#719e07">(</span><span style="color:#2aa198">&#34;annotationAction&#34;</span><span style="color:#719e07">)</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">AnnotationAction</span> <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">@Reference</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">private</span> AnnotationService annotationService<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> String <span style="color:#268bd2">doSayHello</span><span style="color:#719e07">(</span>String name<span style="color:#719e07">)</span> <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">return</span> annotationService<span style="color:#719e07">.</span>sayHello<span style="color:#719e07">(</span>name<span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">}</span> |
| </span></span></code></pre></div><h3 id="增加应用共享配置-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-properties" data-lang="properties"><span style="display:flex;"><span><span style="color:#586e75"># dubbo-consumer.properties</span> |
| </span></span><span style="display:flex;"><span>dubbo.application.name<span style="color:#719e07">=</span><span style="color:#2aa198">annotation-consumer</span> |
| </span></span><span style="display:flex;"><span>dubbo.registry.address<span style="color:#719e07">=</span><span style="color:#2aa198">zookeeper://127.0.0.1:2181</span> |
| </span></span><span style="display:flex;"><span>dubbo.consumer.timeout<span style="color:#719e07">=</span><span style="color:#2aa198">3000</span> |
| </span></span></code></pre></div><h3 id="指定spring扫描路径-1">指定Spring扫描路径</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-java" data-lang="java"><span style="display:flex;"><span><span style="color:#268bd2">@Configuration</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">@EnableDubbo</span><span style="color:#719e07">(</span>scanBasePackages <span style="color:#719e07">=</span> <span style="color:#2aa198">&#34;org.apache.dubbo.samples.simple.annotation.action&#34;</span><span style="color:#719e07">)</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">@PropertySource</span><span style="color:#719e07">(</span><span style="color:#2aa198">&#34;classpath:/spring/dubbo-consumer.properties&#34;</span><span style="color:#719e07">)</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">@ComponentScan</span><span style="color:#719e07">(</span>value <span style="color:#719e07">=</span> <span style="color:#719e07">{</span><span style="color:#2aa198">&#34;org.apache.dubbo.samples.simple.annotation.action&#34;</span><span style="color:#719e07">})</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">static</span> <span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">ConsumerConfiguration</span> <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">}</span> |
| </span></span></code></pre></div><h3 id="调用服务">调用服务</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-java" data-lang="java"><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">static</span> <span style="color:#dc322f">void</span> <span style="color:#268bd2">main</span><span style="color:#719e07">(</span>String<span style="color:#719e07">[]</span> args<span style="color:#719e07">)</span> <span style="color:#268bd2">throws</span> Exception <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> AnnotationConfigApplicationContext context <span style="color:#719e07">=</span> <span style="color:#719e07">new</span> AnnotationConfigApplicationContext<span style="color:#719e07">(</span>ConsumerConfiguration<span style="color:#719e07">.</span>class<span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> context<span style="color:#719e07">.</span>start<span style="color:#719e07">();</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">final</span> AnnotationAction annotationAction <span style="color:#719e07">=</span> <span style="color:#719e07">(</span>AnnotationAction<span style="color:#719e07">)</span> context<span style="color:#719e07">.</span>getBean<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;annotationAction&#34;</span><span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> String hello <span style="color:#719e07">=</span> annotationAction<span style="color:#719e07">.</span>doSayHello<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;world&#34;</span><span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">}</span> |
| </span></span></code></pre></div></description></item><item><title>Docs: 属性配置</title><link>https://dubbo.apache.org/zh-cn/docs/references/configuration/properties/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docs/references/configuration/properties/</guid><description> |
| <div class="pageinfo pageinfo-primary"> |
| <p>此文档已经不再维护。您当前查看的是快照版本。如果想要查看最新版本的文档,请参阅<a href="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/config/properties/">最新版本</a>。</p> |
| </div> |
| <p>Dubbo属性配置有两个职责:</p> |
| <ol> |
| <li>定义配置:根据属性创建配置组件实例,类似SpringBoot的<code>@ConfigurationProperties</code>的作用。</li> |
| <li>属性覆盖:覆盖已存在的配置组件实例的属性值,类似Spring <code>PropertyOverrideConfigurer</code> 的作用。</li> |
| </ol> |
| <blockquote> |
| <p>一个属性配置的例子 <a href="https://github.com/apache/dubbo-spring-boot-project/tree/master/dubbo-spring-boot-samples">dubbo-spring-boot-samples</a></p> |
| </blockquote> |
| <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">## application.properties</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75"># Spring boot application</span> |
| </span></span><span style="display:flex;"><span> spring.application.name<span style="color:#719e07">=</span><span style="color:#2aa198">dubbo-externalized-configuration-provider-sample</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75"># Base packages to scan Dubbo Component: @com.alibaba.dubbo.config.annotation.Service</span> |
| </span></span><span style="display:flex;"><span> dubbo.scan.base-packages<span style="color:#719e07">=</span><span style="color:#2aa198">com.alibaba.boot.dubbo.demo.provider.service</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75"># Dubbo Application</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">## The default value of dubbo.application.name is ${spring.application.name}</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">## dubbo.application.name=${spring.application.name}</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75"># Dubbo Protocol</span> |
| </span></span><span style="display:flex;"><span> dubbo.protocol.name<span style="color:#719e07">=</span><span style="color:#2aa198">dubbo</span> |
| </span></span><span style="display:flex;"><span> dubbo.protocol.port<span style="color:#719e07">=</span><span style="color:#2aa198">12345</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">## Dubbo Registry</span> |
| </span></span><span style="display:flex;"><span> dubbo.registry.address<span style="color:#719e07">=</span><span style="color:#2aa198">N/A</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">## service default version</span> |
| </span></span><span style="display:flex;"><span> dubbo.provider.version<span style="color:#719e07">=</span><span style="color:#2aa198">1.0.0</span> |
| </span></span></code></pre></div><h2 id="配置来源">配置来源</h2> |
| <p>从Dubbo支持的配置来源说起,默认有6种配置来源:</p> |
| <ul> |
| <li>JVM System Properties,JVM -D 参数</li> |
| <li>System environment,JVM进程的环境变量</li> |
| <li>Externalized Configuration,外部化配置,从配置中心读取</li> |
| <li>Application Configuration,应用的属性配置,从Spring应用的Environment中提取&quot;dubbo&quot;打头的属性集</li> |
| <li>API / XML /注解等编程接口采集的配置可以被理解成配置来源的一种,是直接面向用户编程的配置采集方式</li> |
| <li>从classpath读取配置文件 dubbo.properties</li> |
| </ul> |
| <p>关于dubbo.properties属性:</p> |
| <ol> |
| <li>如果在 classpath 下有超过一个 dubbo.properties 文件,比如,两个 jar 包都各自包含了 dubbo.properties,dubbo 将随机选择一个加载,并且打印错误日志。</li> |
| <li>Dubbo 可以自动加载 classpath 根目录下的 dubbo.properties,但是你同样可以使用 JVM 参数来指定路径:<code>-Ddubbo.properties.file=xxx.properties</code>。</li> |
| </ol> |
| <h3 id="覆盖关系">覆盖关系</h3> |
| <p>下图展示了配置覆盖关系的优先级,从上到下优先级依次降低:</p> |
| <p><img src="https://dubbo.apache.org/imgs/blog/configuration.jpg" alt="覆盖关系"></p> |
| <p>请参考相关内容:<a href="../properties#%E5%B1%9E%E6%80%A7%E8%A6%86%E7%9B%96">属性覆盖</a>。</p> |
| <h2 id="处理流程">处理流程</h2> |
| <p>属性配置处理流程请查看 <a href="../overview#%E9%85%8D%E7%BD%AE%E5%8A%A0%E8%BD%BD%E6%B5%81%E7%A8%8B">配置加载流程</a>。</p> |
| <h2 id="配置格式">配置格式</h2> |
| <p>目前Dubbo支持的所有配置都是<code>.properties</code>格式的,包括<code>-D</code>、<code>Externalized Configuration</code>等,<code>.properties</code>中的所有配置项遵循一种<code>path-based</code>的配置格式。</p> |
| <p>在Spring应用中也可以将属性配置放到<code>application.yml</code>中,其树层次结构的方式可读性更好一些。</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"># 应用级配置(无id)</span> |
| </span></span><span style="display:flex;"><span>dubbo.{config-type}.{config-item}<span style="color:#719e07">=</span><span style="color:#2aa198">{config-item-value}</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75"># 实例级配置(指定id或name)</span> |
| </span></span><span style="display:flex;"><span>dubbo.{config-type}s.{config-id}.{config-item}<span style="color:#719e07">=</span><span style="color:#2aa198">{config-item-value}</span> |
| </span></span><span style="display:flex;"><span>dubbo.{config-type}s.{config-name}.{config-item}<span style="color:#719e07">=</span><span style="color:#2aa198">{config-item-value}</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75"># 服务接口配置</span> |
| </span></span><span style="display:flex;"><span>dubbo.service.{interface-name}.{config-item}<span style="color:#719e07">=</span><span style="color:#2aa198">{config-item-value}</span> |
| </span></span><span style="display:flex;"><span>dubbo.reference.{interface-name}.{config-item}<span style="color:#719e07">=</span><span style="color:#2aa198">{config-item-value}</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75"># 方法配置</span> |
| </span></span><span style="display:flex;"><span>dubbo.service.{interface-name}.{method-name}.{config-item}<span style="color:#719e07">=</span><span style="color:#2aa198">{config-item-value}</span> |
| </span></span><span style="display:flex;"><span>dubbo.reference.{interface-name}.{method-name}.{config-item}<span style="color:#719e07">=</span><span style="color:#2aa198">{config-item-value}</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75"># 方法argument配置</span> |
| </span></span><span style="display:flex;"><span>dubbo.reference.{interface-name}.{method-name}.{argument-index}.{config-item}<span style="color:#719e07">=</span><span style="color:#2aa198">{config-item-value}</span> |
| </span></span></code></pre></div><h3 id="应用级配置无id">应用级配置(无id)</h3> |
| <p>应用级配置的格式为:配置类型单数前缀,无id/name。</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"># 应用级配置(无id)</span> |
| </span></span><span style="display:flex;"><span>dubbo.{config-type}.{config-item}<span style="color:#719e07">=</span><span style="color:#2aa198">{config-item-value}</span> |
| </span></span></code></pre></div><ul> |
| <li>如果该类型的配置不存在任何实例时,则将使用应用级配置的属性创建默认实例。</li> |
| <li>如果该类型的配置存在一个或多个实例,且没有找到配置实例对应的配置时,则将应用级配置的属性用于属性覆盖。详细请参考<a href="../properties#%E5%B1%9E%E6%80%A7%E8%A6%86%E7%9B%96">属性覆盖</a>。</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-properties" data-lang="properties"><span style="display:flex;"><span>dubbo.application.name<span style="color:#719e07">=</span><span style="color:#2aa198">demo-provider</span> |
| </span></span><span style="display:flex;"><span>dubbo.application.qos-enable<span style="color:#719e07">=</span><span style="color:#2aa198">false</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>dubbo.registry.address<span style="color:#719e07">=</span><span style="color:#2aa198">zookeeper://127.0.0.1:2181</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>dubbo.protocol.name<span style="color:#719e07">=</span><span style="color:#2aa198">dubbo</span> |
| </span></span><span style="display:flex;"><span>dubbo.protocol.port<span style="color:#719e07">=</span><span style="color:#2aa198">-1</span> |
| </span></span></code></pre></div><h3 id="实例级配置指定id或name">实例级配置(指定id或name)</h3> |
| <p>针对某个实例的属性配置需要指定id或者name,其前缀格式为:配置类型复数前缀 + id/name。</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"># 实例级配置(指定id或name)</span> |
| </span></span><span style="display:flex;"><span>dubbo.{config-type}s.{config-id}.{config-item}<span style="color:#719e07">=</span><span style="color:#2aa198">{config-item-value}</span> |
| </span></span><span style="display:flex;"><span>dubbo.{config-type}s.{config-name}.{config-item}<span style="color:#719e07">=</span><span style="color:#2aa198">{config-item-value}</span> |
| </span></span></code></pre></div><ul> |
| <li>如果不存在该id或者name的实例,则根据属性创建配置组件实例。</li> |
| <li>如果已存在相同id或name的实例,则提取该前缀的属性集合用于属性覆盖。详细请参考<a href="../properties#%E5%B1%9E%E6%80%A7%E8%A6%86%E7%9B%96">属性覆盖</a>。</li> |
| <li>具体的配置复数形式请参考<a href="../properties#%E5%8D%95%E5%A4%8D%E6%95%B0%E9%85%8D%E7%BD%AE%E5%AF%B9%E7%85%A7%E8%A1%A8">单复数配置对照表</a></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-properties" data-lang="properties"><span style="display:flex;"><span>dubbo.registries.unit1.address<span style="color:#719e07">=</span><span style="color:#2aa198">zookeeper://127.0.0.1:2181</span> |
| </span></span><span style="display:flex;"><span>dubbo.registries.unit2.address<span style="color:#719e07">=</span><span style="color:#2aa198">zookeeper://127.0.0.1:2182</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>dubbo.protocols.dubbo.name<span style="color:#719e07">=</span><span style="color:#2aa198">dubbo</span> |
| </span></span><span style="display:flex;"><span>dubbo.protocols.dubbo.port<span style="color:#719e07">=</span><span style="color:#2aa198">20880</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>dubbo.protocols.hessian.name<span style="color:#719e07">=</span><span style="color:#2aa198">hessian</span> |
| </span></span><span style="display:flex;"><span>dubbo.protocols.hessian.port<span style="color:#719e07">=</span><span style="color:#2aa198">8089</span> |
| </span></span></code></pre></div><h3 id="服务接口配置">服务接口配置</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-properties" data-lang="properties"><span style="display:flex;"><span>dubbo.service.org.apache.dubbo.samples.api.DemoService.timeout<span style="color:#719e07">=</span><span style="color:#2aa198">5000</span> |
| </span></span><span style="display:flex;"><span>dubbo.reference.org.apache.dubbo.samples.api.DemoService.timeout<span style="color:#719e07">=</span><span style="color:#2aa198">6000</span> |
| </span></span></code></pre></div><h3 id="方法配置">方法配置</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-properties" data-lang="properties"><span style="display:flex;"><span><span style="color:#586e75"># 方法配置</span> |
| </span></span><span style="display:flex;"><span>dubbo.service.{interface-name}.{method-name}.{config-item}<span style="color:#719e07">=</span><span style="color:#2aa198">{config-item-value}</span> |
| </span></span><span style="display:flex;"><span>dubbo.reference.{interface-name}.{method-name}.{config-item}<span style="color:#719e07">=</span><span style="color:#2aa198">{config-item-value}</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75"># 方法argument配置</span> |
| </span></span><span style="display:flex;"><span>dubbo.reference.{interface-name}.{method-name}.{argument-index}.{config-item}<span style="color:#719e07">=</span><span style="color:#2aa198">{config-item-value}</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-properties" data-lang="properties"><span style="display:flex;"><span>dubbo.reference.org.apache.dubbo.samples.api.DemoService.sayHello.timeout<span style="color:#719e07">=</span><span style="color:#2aa198">7000</span> |
| </span></span><span style="display:flex;"><span>dubbo.reference.org.apache.dubbo.samples.api.DemoService.sayHello.oninvoke<span style="color:#719e07">=</span><span style="color:#2aa198">notifyService.onInvoke</span> |
| </span></span><span style="display:flex;"><span>dubbo.reference.org.apache.dubbo.samples.api.DemoService.sayHello.onreturn<span style="color:#719e07">=</span><span style="color:#2aa198">notifyService.onReturn</span> |
| </span></span><span style="display:flex;"><span>dubbo.reference.org.apache.dubbo.samples.api.DemoService.sayHello.onthrow<span style="color:#719e07">=</span><span style="color:#2aa198">notifyService.onThrow</span> |
| </span></span><span style="display:flex;"><span>dubbo.reference.org.apache.dubbo.samples.api.DemoService.sayHello.0.callback<span style="color:#719e07">=</span><span style="color:#2aa198">true</span> |
| </span></span></code></pre></div><p>等价于XML配置:</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:reference</span> interface=<span style="color:#2aa198">&#34;org.apache.dubbo.samples.api.DemoService&#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;sayHello&#34;</span> timeout=<span style="color:#2aa198">&#34;7000&#34;</span> oninvoke=<span style="color:#2aa198">&#34;notifyService.onInvoke&#34;</span> |
| </span></span><span style="display:flex;"><span> onreturn=<span style="color:#2aa198">&#34;notifyService.onReturn&#34;</span> onthrow=<span style="color:#2aa198">&#34;notifyService.onThrow&#34;</span><span style="color:#268bd2">&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;dubbo:argument</span> index=<span style="color:#2aa198">&#34;0&#34;</span> callback=<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:method&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;/dubbo:reference&gt;</span> |
| </span></span></code></pre></div><h3 id="参数配置">参数配置</h3> |
| <p>parameters参数为map对象,支持xxx.parameters=[{key:value},{key:value}]方式进行配置。</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.application.parameters<span style="color:#719e07">=</span><span style="color:#2aa198">[{item1:value1},{item2:value2}]</span> |
| </span></span><span style="display:flex;"><span>dubbo.reference.org.apache.dubbo.samples.api.DemoService.parameters<span style="color:#719e07">=</span><span style="color:#2aa198">[{item3:value3}]</span> |
| </span></span></code></pre></div><h3 id="传输层配置">传输层配置</h3> |
| <p>triple协议采用Http2做底层通信协议,允许使用者自定义Http2的<a href="https://datatracker.ietf.org/doc/html/rfc7540#section-6.5.2">6个settings参数</a></p> |
| <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"># 通知对端header压缩索引表的上限个数</span> |
| </span></span><span style="display:flex;"><span>dubbo.rpc.tri.header-table-size<span style="color:#719e07">=</span><span style="color:#2aa198">4096</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75"># 启用服务端推送功能</span> |
| </span></span><span style="display:flex;"><span>dubbo.rpc.tri.enable-push<span style="color:#719e07">=</span><span style="color:#2aa198">false</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75"># 通知对端允许的最大并发流数</span> |
| </span></span><span style="display:flex;"><span>dubbo.rpc.tri.max-concurrent-streams<span style="color:#719e07">=</span><span style="color:#2aa198">2147483647</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75"># 声明发送端的窗口大小</span> |
| </span></span><span style="display:flex;"><span>dubbo.rpc.tri.initial-window-size<span style="color:#719e07">=</span><span style="color:#2aa198">1048576</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75"># 设置帧的最大字节数</span> |
| </span></span><span style="display:flex;"><span>dubbo.rpc.tri.max-frame-size<span style="color:#719e07">=</span><span style="color:#2aa198">32768</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75"># 通知对端header未压缩的最大字节数</span> |
| </span></span><span style="display:flex;"><span>dubbo.rpc.tri.max-header-list-size<span style="color:#719e07">=</span><span style="color:#2aa198">8192</span> |
| </span></span></code></pre></div><p>等价于yml配置:</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:#268bd2">dubbo</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">rpc</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">tri</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">header-table-size</span>: <span style="color:#2aa198">4096</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">enable-push</span>: <span style="color:#cb4b16">false</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">max-concurrent-streams</span>: <span style="color:#2aa198">2147483647</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">initial-window-size</span>: <span style="color:#2aa198">1048576</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">max-frame-size</span>: <span style="color:#2aa198">32768</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">max-header-list-size</span>: <span style="color:#2aa198">8192</span> |
| </span></span></code></pre></div><h3 id="属性与xml配置映射规则">属性与XML配置映射规则</h3> |
| <p>可以将 xml 的 tag 名和属性名组合起来,用 ‘.’ 分隔。每行一个属性。</p> |
| <ul> |
| <li><code>dubbo.application.name=foo</code> 相当于 <code>&lt;dubbo:application name=&quot;foo&quot; /&gt;</code></li> |
| <li><code>dubbo.registry.address=10.20.153.10:9090</code> 相当于 <code>&lt;dubbo:registry address=&quot;10.20.153.10:9090&quot; /&gt; </code></li> |
| </ul> |
| <p>如果在 xml 配置中有超过一个的 tag,那么你可以使用 ‘id’ 进行区分。如果你不指定id,它将作用于所有 tag。</p> |
| <ul> |
| <li><code>dubbo.protocols.rmi.port=1099</code> 相当于 <code>&lt;dubbo:protocol id=&quot;rmi&quot; name=&quot;rmi&quot; port=&quot;1099&quot; /&gt; </code></li> |
| <li><code>dubbo.registries.china.address=10.20.153.10:9090</code> 相当于 <code>&lt;dubbo:registry id=&quot;china&quot; address=&quot;10.20.153.10:9090&quot; /&gt;</code></li> |
| </ul> |
| <h2 id="属性覆盖">属性覆盖</h2> |
| <p>属性覆盖是指用配置的属性值覆盖config bean实例的属性,类似Spring <a href="https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/config/PropertyOverrideConfigurer.html">PropertyOverrideConfigurer</a> 的作用。</p> |
| <blockquote> |
| <p>Property resource configurer that overrides bean property values in an application context definition. It pushes values from a properties file into bean definitions. |
| Configuration lines are expected to be of the following form:</p> |
| <p>beanName.property=value</p> |
| </blockquote> |
| <p>但与<code>PropertyOverrideConfigurer</code>的不同之处是,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-properties" data-lang="properties"><span style="display:flex;"><span><span style="color:#586e75">#1. 指定id的实例级配置</span> |
| </span></span><span style="display:flex;"><span>dubbo.{config-type}s.{config-id}.{config-item}<span style="color:#719e07">=</span><span style="color:#2aa198">{config-item-value}</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">#2. 指定name的实例级配置</span> |
| </span></span><span style="display:flex;"><span>dubbo.{config-type}s.{config-name}.{config-item}<span style="color:#719e07">=</span><span style="color:#2aa198">{config-item-value}</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">#3. 应用级配置(单数配置)</span> |
| </span></span><span style="display:flex;"><span>dubbo.{config-type}.{config-item}<span style="color:#719e07">=</span><span style="color:#2aa198">{config-item-value}</span> |
| </span></span></code></pre></div><p>属性覆盖处理流程:</p> |
| <p>按照优先级从高到低依次查找,如果找到此前缀开头的属性,则选定使用这个前缀提取属性,忽略后面的配置。</p> |
| <p><img src="https://dubbo.apache.org/imgs/v3/config/properties-override.svg" alt="属性覆盖流程"></p> |
| <h2 id="单复数配置对照表">单复数配置对照表</h2> |
| <p>复数配置的命名与普通单词变复数的规则相同:</p> |
| <ol> |
| <li>字母y结尾时,去掉y,改为ies</li> |
| <li>字母s结尾时,加es</li> |
| <li>其它加s</li> |
| </ol> |
| <table> |
| <thead> |
| <tr> |
| <th>Config Type</th> |
| <th>单数配置</th> |
| <th>复数配置</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td>application</td> |
| <td>dubbo.application.xxx=xxx</td> |
| <td>dubbo.applications.{id}.xxx=xxx <br/> dubbo.applications.{name}.xxx=xxx</td> |
| </tr> |
| <tr> |
| <td>protocol</td> |
| <td>dubbo.protocol.xxx=xxx</td> |
| <td>dubbo.protocols.{id}.xxx=xxx <br/> dubbo.protocols.{name}.xxx=xxx</td> |
| </tr> |
| <tr> |
| <td>module</td> |
| <td>dubbo.module.xxx=xxx</td> |
| <td>dubbo.modules.{id}.xxx=xxx <br/> dubbo.modules.{name}.xxx=xxx</td> |
| </tr> |
| <tr> |
| <td>registry</td> |
| <td>dubbo.registry.xxx=xxx</td> |
| <td>dubbo.registries.{id}.xxx=xxx</td> |
| </tr> |
| <tr> |
| <td>monitor</td> |
| <td>dubbo.monitor.xxx=xxx</td> |
| <td>dubbo.monitors.{id}.xxx=xxx</td> |
| </tr> |
| <tr> |
| <td>config-center</td> |
| <td>dubbo.config-center.xxx=xxx</td> |
| <td>dubbo.config-centers.{id}.xxx=xxx</td> |
| </tr> |
| <tr> |
| <td>metadata-report</td> |
| <td>dubbo.metadata-report.xxx=xxx</td> |
| <td>dubbo.metadata-reports.{id}.xxx=xxx</td> |
| </tr> |
| <tr> |
| <td>ssl</td> |
| <td>dubbo.ssl.xxx=xxx</td> |
| <td>dubbo.ssls.{id}.xxx=xxx</td> |
| </tr> |
| <tr> |
| <td>metrics</td> |
| <td>dubbo.metrics.xxx=xxx</td> |
| <td>dubbo.metricses.{id}.xxx=xxx</td> |
| </tr> |
| <tr> |
| <td>provider</td> |
| <td>dubbo.provider.xxx=xxx</td> |
| <td>dubbo.providers.{id}.xxx=xxx</td> |
| </tr> |
| <tr> |
| <td>consumer</td> |
| <td>dubbo.consumer.xxx=xxx</td> |
| <td>dubbo.consumers.{id}.xxx=xxx</td> |
| </tr> |
| <tr> |
| <td>service</td> |
| <td>dubbo.service.{interfaceName}.xxx=xxx</td> |
| <td>无</td> |
| </tr> |
| <tr> |
| <td>reference</td> |
| <td>dubbo.reference.{interfaceName}.xxx=xxx</td> |
| <td>无</td> |
| </tr> |
| <tr> |
| <td>method</td> |
| <td>dubbo.service.{interfaceName}.{methodName}.xxx=xxx <br/> dubbo.reference.{interfaceName}.{methodName}.xxx=xxx</td> |
| <td>无</td> |
| </tr> |
| <tr> |
| <td>argument</td> |
| <td>dubbo.service.{interfaceName}.{methodName}.{arg-index}.xxx=xxx</td> |
| <td>无</td> |
| </tr> |
| </tbody> |
| </table></description></item><item><title>Docs: 外部化配置</title><link>https://dubbo.apache.org/zh-cn/docs/references/configuration/external-config/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docs/references/configuration/external-config/</guid><description> |
| <div class="pageinfo pageinfo-primary"> |
| <p>此文档已经不再维护。您当前查看的是快照版本。如果想要查看最新版本的文档,请参阅<a href="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/config/principle/#33-%E5%A4%96%E9%83%A8%E5%8C%96%E9%85%8D%E7%BD%AE">最新版本</a>。</p> |
| </div> |
| <h3 id="外部化配置">外部化配置</h3> |
| <p>外部化配置目的之一是实现配置的集中式管理,这部分业界已经有很多成熟的专业配置系统如 Apollo, Nacos 等,Dubbo 所做的主要是保证能配合这些系统正常工作。</p> |
| <p>外部化配置和其他本地配置在内容和格式上并无区别,可以简单理解为 <code>dubbo.properties</code> 的外部化存储,配置中心更适合将一些公共配置如注册中心、元数据中心配置等抽取以便做集中管理。</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"># 将注册中心地址、元数据中心地址等配置集中管理,可以做到统一环境、减少开发侧感知。</span> |
| </span></span><span style="display:flex;"><span>dubbo.registry.address<span style="color:#719e07">=</span><span style="color:#2aa198">zookeeper://127.0.0.1:2181</span> |
| </span></span><span style="display:flex;"><span>dubbo.registry.simplified<span style="color:#719e07">=</span><span style="color:#2aa198">true</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>dubbo.metadata-report.address<span style="color:#719e07">=</span><span style="color:#2aa198">zookeeper://127.0.0.1:2181</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>dubbo.protocol.name<span style="color:#719e07">=</span><span style="color:#2aa198">dubbo</span> |
| </span></span><span style="display:flex;"><span>dubbo.protocol.port<span style="color:#719e07">=</span><span style="color:#2aa198">20880</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>dubbo.application.qos.port<span style="color:#719e07">=</span><span style="color:#2aa198">33333</span> |
| </span></span></code></pre></div><ul> |
| <li> |
| <p>优先级</p> |
| <p>外部化配置默认较本地配置有更高的优先级,因此这里配置的内容会覆盖本地配置值,关于 各配置形式间的<a href="../overview#%E8%A6%86%E7%9B%96%E5%85%B3%E7%B3%BB">覆盖关系</a> 有单独一章说明。</p> |
| </li> |
| <li> |
| <p>作用域</p> |
| <p>外部化配置有全局和应用两个级别,全局配置是所有应用共享的,应用级配置是由每个应用自己维护且只对自身可见的。当前已支持的扩展实现有Zookeeper、Apollo、Nacos。</p> |
| </li> |
| </ul> |
| <h3 id="配置中心">配置中心</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:config-center</span> address=<span style="color:#2aa198">&#34;zookeeper://127.0.0.1:2181&#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-properties" data-lang="properties"><span style="display:flex;"><span>dubbo.config-center.address<span style="color:#719e07">=</span><span style="color:#2aa198">zookeeper://127.0.0.1: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-java" data-lang="java"><span style="display:flex;"><span>ConfigCenterConfig configCenter <span style="color:#719e07">=</span> <span style="color:#719e07">new</span> ConfigCenterConfig<span style="color:#719e07">();</span> |
| </span></span><span style="display:flex;"><span>configCenter<span style="color:#719e07">.</span>setAddress<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;zookeeper://127.0.0.1:2181&#34;</span><span style="color:#719e07">);</span> |
| </span></span></code></pre></div><h4 id="zookeeper">Zookeeper</h4> |
| <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:config-center</span> address=<span style="color:#2aa198">&#34;zookeeper://127.0.0.1:2181&#34;</span><span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div><p>默认所有的配置都存储在 <code>/dubbo/config</code> 节点,具体节点结构图如下:</p> |
| <p><img src="https://dubbo.apache.org/imgs/user/zk-configcenter.jpg" alt="zk-configcenter.jpg"></p> |
| <ul> |
| <li>namespace,用于不同配置的环境隔离。</li> |
| <li>config,Dubbo约定的固定节点,不可更改,所有配置和服务治理规则都存储在此节点下。</li> |
| <li>dubbo/application,分别用来隔离全局配置、应用级别配置:dubbo是默认group值,application对应应用名</li> |
| <li>dubbo.properties,此节点的node value存储具体配置内容</li> |
| </ul> |
| <h4 id="apollo">Apollo</h4> |
| <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:config-center</span> protocol=<span style="color:#2aa198">&#34;apollo&#34;</span> address=<span style="color:#2aa198">&#34;127.0.0.1:2181&#34;</span><span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div><p>Apollo中的一个核心概念是命名空间 - namespace(和上面zookeeper的namespace概念不同),在这里全局和应用级别配置就是通过命名空间来区分的。</p> |
| <p>默认情况下,Dubbo会从名叫<code>dubbo</code>(由于 Apollo 不支持特殊后缀 <code>.properties</code> )的命名空间中读取全局配置(<code>&lt;dubbo:config-center namespace=&quot;your namespace&quot;&gt;</code>)</p> |
| <p><img src="https://dubbo.apache.org/imgs/user/apollo-configcenter-dubbo.png" alt="apollo-configcenter-dubbo.png"></p> |
| <p>由于 Apollo 也默认将会在 <code>dubbo</code> namespace 中存储服务治理规则(如路由规则),建议通过单独配置 <code>group</code> 将服务治理和配置文件托管分离开,以 XML 配置方式为例:</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</span> namespace=<span style="color:#2aa198">&#34;governance&#34;</span> group =<span style="color:#2aa198">&#34;dubbo&#34;</span><span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div><p>这里,服务治理规则将存储在 governance namespace,而配置文件将存储在 dubbo namespace,如下图所示: |
| <img src="https://dubbo.apache.org/imgs/user/apollo-configcenter-governance-dubbo.png" alt="apollo-configcenter-governance-dubbo.png"></p> |
| <blockquote> |
| <p>关于文件配置托管,相当于是把 <code>dubbo.properties</code> 配置文件的内容存储在了 Apollo 中,应用通过关联共享的 <code>dubbo</code> namespace 继承公共配置, |
| 应用也可以按照 Apollo 的做法来覆盖个别配置项。</p> |
| </blockquote> |
| <h4 id="nacos">Nacos</h4> |
| <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:config-center</span> address=<span style="color:#2aa198">&#34;nacos://127.0.0.1:8848?username=nacos&amp;password=nacos&#34;</span><span style="color:#268bd2">&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;/dubbo:config-center&gt;</span> |
| </span></span></code></pre></div><p>Nacos虽然也存在命名空间 - namespace 的概念,但在 namespace 之下,还存在 group 概念。即通过 namespace 和 group 以及 dataId 去定位一个配置项,在不指定 namespace 的情况下,默认使用 <code>public</code> 作为默认的命名空间。</p> |
| <p>在默认情况下,全局配置会读取 namespace : <code>public</code>,dataId: <code>dubbo.properties</code>,group: <code>dubbo</code> 配置项中的内容作为全局配置。应用级别的 group 和全局级别的 group 存在一点差异, 应用级别会读取 namespace: <code>public</code>,dataId: <code>dubbo.properties</code>,group: <code>your application name</code> 作为应用级别的配置。</p> |
| <p>全局: |
| <img src="https://dubbo.apache.org/imgs/user/nacos-configcenter-global-properties.png" alt="nacos-configcenter-global-properties.png"></p> |
| <p>应用级别: |
| <img src="https://dubbo.apache.org/imgs/user/nacos-configcenter-application-properties.png" alt="nacos-configcenter-application-properties.png"></p> |
| <h3 id="自己加载外部化配置">自己加载外部化配置</h3> |
| <p>所谓 Dubbo 对配置中心的支持,本质上就是把 <code>.properties</code> 从远程拉取到本地,然后和本地的配置做一次融合。理论上只要 Dubbo 框架能拿到需要的配置就可以正常的启动,它并不关心这些配置是自己加载到的还是应用直接塞给它的,所以Dubbo还提供了以下API,让用户将自己组织好的配置塞给 Dubbo 框架(配置加载的过程是用户要完成的),这样 Dubbo 框架就不再直接和 Apollo 或 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-java" data-lang="java"><span style="display:flex;"><span><span style="color:#586e75">// 应用自行加载配置 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span>Map<span style="color:#719e07">&lt;</span>String<span style="color:#719e07">,</span> String<span style="color:#719e07">&gt;</span> dubboConfigurations <span style="color:#719e07">=</span> <span style="color:#719e07">new</span> HashMap<span style="color:#719e07">&lt;&gt;();</span> |
| </span></span><span style="display:flex;"><span>dubboConfigurations<span style="color:#719e07">.</span>put<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;dubbo.registry.address&#34;</span><span style="color:#719e07">,</span> <span style="color:#2aa198">&#34;zookeeper://127.0.0.1:2181&#34;</span><span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span>dubboConfigurations<span style="color:#719e07">.</span>put<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;dubbo.registry.simplified&#34;</span><span style="color:#719e07">,</span> <span style="color:#2aa198">&#34;true&#34;</span><span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">//将组织好的配置塞给Dubbo框架 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span>ConfigCenterConfig configCenter <span style="color:#719e07">=</span> <span style="color:#719e07">new</span> ConfigCenterConfig<span style="color:#719e07">();</span> |
| </span></span><span style="display:flex;"><span>configCenter<span style="color:#719e07">.</span>setExternalConfig<span style="color:#719e07">(</span>dubboConfigurations<span style="color:#719e07">);</span> |
| </span></span></code></pre></div></description></item><item><title>Docs: 自动加载环境变量</title><link>https://dubbo.apache.org/zh-cn/docs/references/configuration/environment-variables/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docs/references/configuration/environment-variables/</guid><description> |
| <div class="pageinfo pageinfo-primary"> |
| <p>此文档已经不再维护。您当前查看的是快照版本。如果想要查看最新版本的文档,请参阅<a href="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/config/principle/#33-%E5%A4%96%E9%83%A8%E5%8C%96%E9%85%8D%E7%BD%AE">最新版本</a>。</p> |
| </div> |
| <p>从 2.7.3 版本开始,Dubbo 会自动从约定 key 中读取配置,并将配置以 Key-Value 的形式写入到URL中。</p> |
| <p>支持的 key 有以下两个:</p> |
| <ol> |
| <li> |
| <p><code>dubbo.labels</code>,指定一些列配置到 URL 中的键值对,通常通过 JVM -D 或系统环境变量指定。</p> |
| <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"># JVM</span> |
| </span></span><span style="display:flex;"><span>-Ddubbo.labels <span style="color:#719e07">=</span> <span style="color:#2aa198">&#34;tag1=value1; tag2=value2&#34;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75"># 环境变量</span> |
| </span></span><span style="display:flex;"><span>DUBBO_LABELS <span style="color:#719e07">=</span> <span style="color:#2aa198">&#34;tag1=value1; tag2=value2&#34;</span> |
| </span></span></code></pre></div><p>最终生成的 URL 会包含 tag1、tag2 两个 key: <code>dubbo://xxx?tag1=value1&amp;tag2=value2</code></p> |
| </li> |
| <li> |
| <p><code>dubbo.env.keys</code>,指定环境变量 key 值,Dubbo 会尝试从环境变量加载每个 key</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"># JVM</span> |
| </span></span><span style="display:flex;"><span>-Ddubbo.env.keys <span style="color:#719e07">=</span> <span style="color:#2aa198">&#34;DUBBO_TAG1, DUBBO_TAG2&#34;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75"># 环境变量</span> |
| </span></span><span style="display:flex;"><span>DUBBO_ENV_KEYS <span style="color:#719e07">=</span> <span style="color:#2aa198">&#34;DUBBO_TAG1, DUBBO_TAG2&#34;</span> |
| </span></span></code></pre></div><p>最终生成的 URL 会包含 DUBBO_TAG1、DUBBO_TAG2 两个 key: <code>dubbo://xxx?DUBBO_TAG1=value1&amp;DUBBO_TAG2=value2</code></p> |
| </li> |
| </ol></description></item></channel></rss> |