| <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Apache Dubbo – 配置手册</title><link>https://dubbo.apache.org/zh-cn/docsv2.7/user/configuration/</link><description>Recent content in 配置手册 on Apache Dubbo</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><atom:link href="https://dubbo.apache.org/zh-cn/docsv2.7/user/configuration/index.xml" rel="self" type="application/rss+xml"/><item><title>Docsv2.7: XML 配置</title><link>https://dubbo.apache.org/zh-cn/docsv2.7/user/configuration/xml/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docsv2.7/user/configuration/xml/</guid><description> |
| <p>有关 XML 的详细配置项,请参见:<a href="../../references/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>Docsv2.7: 动态配置中心</title><link>https://dubbo.apache.org/zh-cn/docsv2.7/user/configuration/config-center/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docsv2.7/user/configuration/config-center/</guid><description> |
| <p>配置中心(v2.7.0)在 Dubbo 中承担两个职责:</p> |
| <ol> |
| <li>外部化配置。启动配置的集中式存储 (简单理解为 dubbo.properties 的外部化存储)。</li> |
| <li>服务治理。服务治理规则的存储与通知。</li> |
| </ol> |
| <p>启用动态配置,以 Zookeeper 为例,可查看 <a href="../../references/xml/dubbo-config-center">动态配置配置项详解</a></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><blockquote> |
| <p>为了兼容 2.6.x 版本配置,在使用 Zookeeper 作为注册中心,且没有显示配置配置中心的情况下,Dubbo 框架会默认将此 Zookeeper 用作配置中心,但将只作服务治理用途。</p> |
| </blockquote> |
| <h2 id="外部化配置">外部化配置</h2> |
| <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="../configuration-load-process">各配置形式间的覆盖关系</a> 有单独一章说明,你也可通过以下选项调整配置中心的优先级:</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>-Ddubbo.config-center.highest-priority<span style="color:#719e07">=</span><span style="color:#2aa198">false</span> |
| </span></span></code></pre></div></li> |
| <li> |
| <p>作用域</p> |
| <p>外部化配置有全局和应用两个级别,全局配置是所有应用共享的,应用级配置是由每个应用自己维护且只对自身可见的。当前已支持的扩展实现有Zookeeper、Apollo。</p> |
| </li> |
| </ul> |
| <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="自己加载外部化配置">自己加载外部化配置</h4> |
| <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><h2 id="服务治理">服务治理</h2> |
| <h4 id="zookeeper-1">Zookeeper</h4> |
| <p>默认节点结构:</p> |
| <p><img src="https://dubbo.apache.org/imgs/user/zk-configcenter-governance.jpg" alt="zk-configcenter-governance"></p> |
| <ul> |
| <li>namespace,用于不同配置的环境隔离。</li> |
| <li>config,Dubbo 约定的固定节点,不可更改,所有配置和服务治理规则都存储在此节点下。</li> |
| <li>dubbo,所有服务治理规则都是全局性的,dubbo 为默认节点</li> |
| <li>configurators/tag-router/condition-router,不同的服务治理规则类型,node value 存储具体规则内容</li> |
| </ul> |
| <h4 id="apollo-1">Apollo</h4> |
| <p>所有的服务治理规则都是全局性的,默认从公共命名空间 <code>dubbo</code> 读取和订阅:</p> |
| <p><img src="https://dubbo.apache.org/imgs/user/apollo-configcenter-governance.jpg" alt="apollo-configcenter-governance.jpg"></p> |
| <p>不同的规则以不同的 key 后缀区分:</p> |
| <ul> |
| <li>configurators,<a href="../../examples/config-rule">覆盖规则</a></li> |
| <li>tag-router,<a href="../../examples/routing-rule">标签路由</a></li> |
| <li>condition-router,<a href="../../examples/routing-rule">条件路由</a></li> |
| </ul></description></item><item><title>Docsv2.7: 属性配置</title><link>https://dubbo.apache.org/zh-cn/docsv2.7/user/configuration/properties/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docsv2.7/user/configuration/properties/</guid><description> |
| <p>如果你的应用足够简单,例如,不需要多注册中心或多协议,并且需要在spring容器中共享配置,那么,我们可以直接使用 <code>dubbo.properties</code> 作为默认配置。</p> |
| <p>Dubbo 可以自动加载 classpath 根目录下的 dubbo.properties,但是你同样可以使用 JVM 参数来指定路径:<code>-Ddubbo.properties.file=xxx.properties</code>。</p> |
| <h1 id="映射规则">映射规则</h1> |
| <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.protocol.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.registry.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> |
| <p>如下,是一个典型的 dubbo.properties 配置样例。</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.name<span style="color:#719e07">=</span><span style="color:#2aa198">foo</span> |
| </span></span><span style="display:flex;"><span>dubbo.application.owner<span style="color:#719e07">=</span><span style="color:#2aa198">bar</span> |
| </span></span><span style="display:flex;"><span>dubbo.registry.address<span style="color:#719e07">=</span><span style="color:#2aa198">10.20.153.10:9090</span> |
| </span></span></code></pre></div><h2 id="重写与优先级">重写与优先级</h2> |
| <p><img src="https://dubbo.apache.org/imgs/user/dubbo-properties-override.jpg" alt="properties-override"></p> |
| <p>优先级从高到低:</p> |
| <ul> |
| <li>JVM -D 参数:当你部署或者启动应用时,它可以轻易地重写配置,比如,改变 dubbo 协议端口;</li> |
| <li>XML:XML 中的当前配置会重写 dubbo.properties 中的;</li> |
| <li>Properties:默认配置,仅仅作用于以上两者没有配置时。</li> |
| </ul> |
| <ol> |
| <li>如果在 classpath 下有超过一个 dubbo.properties 文件,比如,两个 jar 包都各自包含了 dubbo.properties,dubbo 将随机选择一个加载,并且打印错误日志。</li> |
| <li>如果 <code>id</code> 没有在 <code>protocol</code> 中配置,将使用 <code>name</code> 作为默认属性。</li> |
| </ol></description></item><item><title>Docsv2.7: 自动加载环境变量</title><link>https://dubbo.apache.org/zh-cn/docsv2.7/user/configuration/environment-variables/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docsv2.7/user/configuration/environment-variables/</guid><description> |
| <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><item><title>Docsv2.7: API 配置</title><link>https://dubbo.apache.org/zh-cn/docsv2.7/user/configuration/api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docsv2.7/user/configuration/api/</guid><description> |
| <p>API 属性与配置项一对一,各属性含义,请参见:<a href="../../references/xml/">配置参考手册</a>,比如:<code>ApplicationConfig.setName(&quot;xxx&quot;)</code> 对应 <code>&lt;dubbo:application name=&quot;xxx&quot; /&gt;</code> <sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></p> |
| <h2 id="服务提供者">服务提供者</h2> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.rpc.config.ApplicationConfig<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.rpc.config.RegistryConfig<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.rpc.config.ProviderConfig<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.rpc.config.ServiceConfig<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> com.xxx.XxxService<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> com.xxx.XxxServiceImpl<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>XxxService xxxService <span style="color:#719e07">=</span> <span style="color:#719e07">new</span> XxxServiceImpl<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;xxx&#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;10.20.130.230:9090&#34;</span><span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span>registry<span style="color:#719e07">.</span>setUsername<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;aaa&#34;</span><span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span>registry<span style="color:#719e07">.</span>setPassword<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;bbb&#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></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>XxxService<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>XxxService<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>XxxService<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>xxxService<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></code></pre></div><h2 id="服务消费者">服务消费者</h2> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.rpc.config.ApplicationConfig<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.rpc.config.RegistryConfig<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.rpc.config.ConsumerConfig<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.rpc.config.ReferenceConfig<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> com.xxx.XxxService<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;yyy&#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;10.20.130.230:9090&#34;</span><span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span>registry<span style="color:#719e07">.</span>setUsername<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;aaa&#34;</span><span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span>registry<span style="color:#719e07">.</span>setPassword<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;bbb&#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></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>XxxService<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>XxxService<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>XxxService<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一样使用xxxService |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span>XxxService xxxService <span style="color:#719e07">=</span> reference<span style="color:#719e07">.</span>get<span style="color:#719e07">();</span> <span style="color:#586e75">// 注意:此代理对象内部封装了所有通讯细节,对象较重,请缓存复用 |
| </span></span></span></code></pre></div><h2 id="特殊场景">特殊场景</h2> |
| <p>下面只列出不同的地方,其它参见上面的写法</p> |
| <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;createXxx&#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>XxxService<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>XxxService<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>ReferenceConfig<span style="color:#719e07">&lt;</span>XxxService<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>XxxService<span style="color:#719e07">&gt;();</span> <span style="color:#586e75">// 此实例很重,封装了与注册中心的连接以及与提供者的连接,请自行缓存,否则可能造成内存和连接泄漏 |
| </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.XxxService&#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><div class="footnotes" role="doc-endnotes"> |
| <hr> |
| <ol> |
| <li id="fn:1"> |
| <p>API使用范围说明:API 仅用于 OpenAPI, ESB, Test, Mock 等系统集成,普通服务提供方或消费方,请采用<a href="../xml">XML 配置</a>方式使用 Dubbo&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p> |
| </li> |
| </ol> |
| </div></description></item><item><title>Docsv2.7: 注解配置</title><link>https://dubbo.apache.org/zh-cn/docsv2.7/user/configuration/annotation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docsv2.7/user/configuration/annotation/</guid><description> |
| <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>Docsv2.7: 配置加载流程</title><link>https://dubbo.apache.org/zh-cn/docsv2.7/user/configuration/configuration-load-process/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docsv2.7/user/configuration/configuration-load-process/</guid><description> |
| <p>此篇文档主要讲在<strong>应用启动阶段,Dubbo框架如何将所需要的配置采集起来</strong>(包括应用配置、注册中心配置、服务配置等),以完成服务的暴露和引用流程。</p> |
| <p>根据驱动方式的不同(比如Spring或裸API编程)配置形式上肯定会有所差异,具体请参考<a href="../xml">XML配置</a>、<a href="../annotation">Annotation配置</a>、<a href="../api">API配置</a>三篇文档。除了外围驱动方式上的差异,Dubbo的配置读取总体上遵循了以下几个原则:</p> |
| <ol> |
| <li>Dubbo 支持了多层级的配置,并按预定优先级自动实现配置间的覆盖,最终所有配置汇总到数据总线URL后驱动后续的服务暴露、引用等流程。</li> |
| <li>ApplicationConfig、ServiceConfig、ReferenceConfig 可以被理解成配置来源的一种,是直接面向用户编程的配置采集方式。</li> |
| <li>配置格式以 Properties 为主,在配置内容上遵循约定的 <code>path-based</code> 的命名<a href="#%E9%85%8D%E7%BD%AE%E6%A0%BC%E5%BC%8F">规范</a></li> |
| </ol> |
| <h2 id="配置来源">配置来源</h2> |
| <p>首先,从Dubbo支持的配置来源说起,默认有四种配置来源:</p> |
| <ul> |
| <li>JVM System Properties,-D 参数</li> |
| <li>Externalized Configuration,外部化配置</li> |
| <li>ServiceConfig、ReferenceConfig 等编程接口采集的配置</li> |
| <li>本地配置文件 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="../config-center">外部化配置详情</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> |
| <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.{config-type}[.{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 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 style="color:#586e75"># 多配置项</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></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.application.name<span style="color:#719e07">=</span><span style="color:#2aa198">demo-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.port<span style="color:#719e07">=</span><span style="color:#2aa198">-1</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.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><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></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.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>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><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.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><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></channel></rss> |