| <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/references/</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/references/index.xml" rel="self" type="application/rss+xml"/><item><title>Docsv2.7: Schema 配置参考手册</title><link>https://dubbo.apache.org/zh-cn/docsv2.7/user/references/xml/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docsv2.7/user/references/xml/</guid><description> |
| <p>这里以 XML Config <sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> 为准,列举所有配置项 <sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>。其它配置方式,请参见相应转换关系:<a href="../../configuration/properties">属性配置</a>,<a href="../../configuration/annotation">注解配置</a>,<a href="../../configuration/api">API 配置</a>。</p> |
| <p>所有配置项分为三大类,参见下表中的&quot;作用&quot; 一列。</p> |
| <ul> |
| <li>服务发现:表示该配置项用于服务的注册与发现,目的是让消费方找到提供方。</li> |
| <li>服务治理:表示该配置项用于治理服务间的关系,或为开发测试提供便利条件。</li> |
| <li>性能调优:表示该配置项用于调优性能,不同的选项对性能会产生影响。</li> |
| <li>所有配置最终都将转换为 URL <sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup> 表示,并由服务提供方生成,经注册中心传递给消费方,各属性对应 URL 的参数,参见配置项一览表中的 &ldquo;对应URL参数&rdquo; 列。</li> |
| </ul> |
| <div class="footnotes" role="doc-endnotes"> |
| <hr> |
| <ol> |
| <li id="fn:1"> |
| <p>XML Schema: <a href="http://dubbo.apache.org/schema/dubbo/dubbo.xsd">http://dubbo.apache.org/schema/dubbo/dubbo.xsd</a>&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p> |
| </li> |
| <li id="fn:2"> |
| <p>注意:只有 group,interface,version 是服务的匹配条件,三者决定是不是同一个服务,其它配置项均为调优和治理参数。&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p> |
| </li> |
| <li id="fn:3"> |
| <p>URL 格式:<code>protocol://username:password@host:port/path?key=value&amp;key=value</code>&#160;<a href="#fnref:3" 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/references/protocol/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docsv2.7/user/references/protocol/</guid><description> |
| <p>推荐使用 Dubbo 协议。各协议的性能情况,请参见:<a href="../../perf-test">性能测试报告</a></p></description></item><item><title>Docsv2.7: 注册中心参考手册</title><link>https://dubbo.apache.org/zh-cn/docsv2.7/user/references/registry/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docsv2.7/user/references/registry/</guid><description> |
| <p>推荐使用 <a href="zookeeper">Zookeeper 注册中心</a></p></description></item><item><title>Docsv2.7: 元数据参考手册</title><link>https://dubbo.apache.org/zh-cn/docsv2.7/user/references/metadata/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docsv2.7/user/references/metadata/</guid><description> |
| <h2 id="背景">背景</h2> |
| <p>dubbo provider中的服务配置项有接近<a href="https://dubbo.apache.org/zh-cn/docsv2.7/user/references/xml/dubbo-provider/">30个配置项</a>。 排除注册中心服务治理需要之外,很大一部分配置项是provider自己使用,不需要透传给消费者。这部分数据不需要进入注册中心,而只需要以key-value形式持久化存储。 |
| dubbo consumer中的配置项也有<a href="https://dubbo.apache.org/zh-cn/docsv2.7/user/references/xml/dubbo-consumer/">20+个配置项</a>。在注册中心之中,服务消费者列表中只需要关注application,version,group,ip,dubbo版本等少量配置,其他配置也可以以key-value形式持久化存储。 |
| 这些数据是以服务为维度注册进入注册中心,导致了数据量的膨胀,进而引发注册中心(如zookeeper)的网络开销增大,性能降低。<br> |
| 除了上述配置项的存储之外,dubbo服务元数据信息也需要被存储下来。元数据信息包括服务接口,及接口的方法信息。这些信息将被用于服务mock,服务测试。</p> |
| <h2 id="目标">目标</h2> |
| <p>需要将注册中心原来的数据信息和元数据信息保存到独立的key-value的存储中,这个key-value可以是DB,redis或者其他持久化存储。核心代码中支持了zookeeper,redis(推荐)的默认支持。</p> |
| <p>provider存储内容的格式,参见:org.apache.dubbo.metadata.definition.model.FullServiceDefinition。是该类型gson化之后的存储。 |
| Consumer存储内容,为Map格式。从Consumer端注册到注册中心的URL中的获取参数信息。即通过URL.getParameterMap()获取到的Map,进行gson化之后进行存储。</p> |
| <p>详细的内容,可以参考下面的sample输出。</p> |
| <h2 id="配置">配置</h2> |
| <p>默认的元数据存储,额外支持以下几个特性:</p> |
| <ul> |
| <li>失败重试</li> |
| <li>每天定时重刷</li> |
| </ul> |
| <h4 id="失败重试">失败重试</h4> |
| <p>失败重试可以通过retrytimes (重试次数,默认100),retryperiod(重试周期,默认3000ms)进行设置。</p> |
| <h4 id="定时刷新">定时刷新</h4> |
| <p>默认开启,可以通过设置cycleReport=false进行关闭。</p> |
| <h4 id="完整的配置项">完整的配置项:</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-properties" data-lang="properties"><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>dubbo.metadata-report.username<span style="color:#719e07">=</span><span style="color:#2aa198">xxx ##非必须</span> |
| </span></span><span style="display:flex;"><span>dubbo.metadata-report.password<span style="color:#719e07">=</span><span style="color:#2aa198">xxx ##非必须</span> |
| </span></span><span style="display:flex;"><span>dubbo.metadata-report.retry-times<span style="color:#719e07">=</span><span style="color:#2aa198">30 ##非必须,default值100</span> |
| </span></span><span style="display:flex;"><span>dubbo.metadata-report.retry-period<span style="color:#719e07">=</span><span style="color:#2aa198">5000 ##非必须,default值3000</span> |
| </span></span><span style="display:flex;"><span>dubbo.metadata-report.cycle-report<span style="color:#719e07">=</span><span style="color:#2aa198">false ##非必须,default值true</span> |
| </span></span></code></pre></div><blockquote> |
| <p>如果元数据地址(dubbo.metadata-report.address)也不进行配置,整个元数据的写入不会生效,但是不影响程序运行。</p> |
| </blockquote> |
| <p>接下来看几个sample的配置。无论哪种配置方式,都需要引入maven依赖:</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;dependency&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;groupId&gt;</span>org.apache.dubbo<span style="color:#268bd2">&lt;/groupId&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;artifactId&gt;</span>dubbo-metadata-report-zookeeper<span style="color:#268bd2">&lt;/artifactId&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;/dependency&gt;</span> |
| </span></span></code></pre></div><p>如果需要使用redis,可以引入对应的redis的依赖:</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;dependency&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;groupId&gt;</span>org.apache.dubbo<span style="color:#268bd2">&lt;/groupId&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;artifactId&gt;</span>dubbo-metadata-report-redis<span style="color:#268bd2">&lt;/artifactId&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;/dependency&gt;</span> |
| </span></span></code></pre></div><blockquote> |
| <p><strong>完整的sample,查看<a href="https://github.com/dubbo/dubbo-samples/tree/master">sample-2.7</a></strong></p> |
| </blockquote> |
| <h3 id="方式一在配置中心配置">方式一:在配置中心配置</h3> |
| <p>参考sample:dubbo-samples-metadata-report/dubbo-samples-metadata-report-configcenter 工程。</p> |
| <h5 id="配置中心配置">配置中心配置</h5> |
| <p>配置中心的配置,可以参考configcenter的文档。配置的内容如下:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-properties" data-lang="properties"><span style="display:flex;"><span>dubbo.registry.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 style="color:#586e75">### 注意驼峰式风格</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></code></pre></div><p>在sample中,使用了Zookeeper作为配置中心。启动本地zookeeper服务之后,直接运行:org.apache.dubbo.samples.metadatareport.configcenter.ZKTools 就可以完成写入。 |
| 如果配置中心使用了nacos,apollo,这些产品本身支持ops配置。</p> |
| <h5 id="应用配置">应用配置</h5> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-properties" data-lang="properties"><span style="display:flex;"><span><span style="color:#586e75">###dubbo.properties</span> |
| </span></span><span style="display:flex;"><span>dubbo.config-center.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></code></pre></div><p>完成上述两步之后,注册中心地址、元数据地址将从配置中心进行获取。现在可以依次运行Provider类和Consumer类,会在console中得到对应的输出或者直接通过zookeeper的cli查看。</p> |
| <h5 id="provider配置">Provider配置</h5> |
| <p>provider端存储的元数据内容如下:</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-json" data-lang="json"><span style="display:flex;"><span>{ |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;parameters&#34;</span>: { |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;side&#34;</span>: <span style="color:#2aa198">&#34;provider&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;methods&#34;</span>: <span style="color:#2aa198">&#34;sayHello&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;dubbo&#34;</span>: <span style="color:#2aa198">&#34;2.0.2&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;threads&#34;</span>: <span style="color:#2aa198">&#34;100&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;interface&#34;</span>: <span style="color:#2aa198">&#34;org.apache.dubbo.samples.metadatareport.configcenter.api.AnnotationService&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;threadpool&#34;</span>: <span style="color:#2aa198">&#34;fixed&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;version&#34;</span>: <span style="color:#2aa198">&#34;1.1.1&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;generic&#34;</span>: <span style="color:#2aa198">&#34;false&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;revision&#34;</span>: <span style="color:#2aa198">&#34;1.1.1&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;valid&#34;</span>: <span style="color:#2aa198">&#34;true&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;application&#34;</span>: <span style="color:#2aa198">&#34;metadatareport-configcenter-provider&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;default.timeout&#34;</span>: <span style="color:#2aa198">&#34;5000&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;group&#34;</span>: <span style="color:#2aa198">&#34;d-test&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;anyhost&#34;</span>: <span style="color:#2aa198">&#34;true&#34;</span> |
| </span></span><span style="display:flex;"><span> }, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;canonicalName&#34;</span>: <span style="color:#2aa198">&#34;org.apache.dubbo.samples.metadatareport.configcenter.api.AnnotationService&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;codeSource&#34;</span>: <span style="color:#2aa198">&#34;file:/Users/cvictory/workspace/work-mw/dubbo-samples/dubbo-samples-metadata-report/dubbo-samples-metadata-report-configcenter/target/classes/&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;methods&#34;</span>: [{ |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;name&#34;</span>: <span style="color:#2aa198">&#34;sayHello&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;parameterTypes&#34;</span>: [<span style="color:#2aa198">&#34;java.lang.String&#34;</span>], |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;returnType&#34;</span>: <span style="color:#2aa198">&#34;java.lang.String&#34;</span> |
| </span></span><span style="display:flex;"><span> }], |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;types&#34;</span>: [{ |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;type&#34;</span>: <span style="color:#2aa198">&#34;java.lang.String&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;properties&#34;</span>: { |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;value&#34;</span>: { |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;type&#34;</span>: <span style="color:#2aa198">&#34;char[]&#34;</span> |
| </span></span><span style="display:flex;"><span> }, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;hash&#34;</span>: { |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;type&#34;</span>: <span style="color:#2aa198">&#34;int&#34;</span> |
| </span></span><span style="display:flex;"><span> } |
| </span></span><span style="display:flex;"><span> } |
| </span></span><span style="display:flex;"><span> }, { |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;type&#34;</span>: <span style="color:#2aa198">&#34;int&#34;</span> |
| </span></span><span style="display:flex;"><span> }, { |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;type&#34;</span>: <span style="color:#2aa198">&#34;char&#34;</span> |
| </span></span><span style="display:flex;"><span> }] |
| </span></span><span style="display:flex;"><span>} |
| </span></span></code></pre></div><p>provider存储的内容包括了provider服务往注册中心填写的全部参数,以及服务的方法信息(方法名,入参出参的格式)。</p> |
| <h5 id="consumer配置">Consumer配置:</h5> |
| <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-json" data-lang="json"><span style="display:flex;"><span>{ |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;valid&#34;</span>: <span style="color:#2aa198">&#34;true&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;side&#34;</span>: <span style="color:#2aa198">&#34;consumer&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;application&#34;</span>: <span style="color:#2aa198">&#34;metadatareport-configcenter-consumer&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;methods&#34;</span>: <span style="color:#2aa198">&#34;sayHello&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;default.timeout&#34;</span>: <span style="color:#2aa198">&#34;6666&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;dubbo&#34;</span>: <span style="color:#2aa198">&#34;2.0.2&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;interface&#34;</span>: <span style="color:#2aa198">&#34;org.apache.dubbo.samples.metadatareport.configcenter.api.AnnotationService&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;version&#34;</span>: <span style="color:#2aa198">&#34;1.1.1&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;revision&#34;</span>: <span style="color:#2aa198">&#34;1.1.1&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;group&#34;</span>: <span style="color:#2aa198">&#34;d-test&#34;</span> |
| </span></span><span style="display:flex;"><span>} |
| </span></span></code></pre></div><p>consumer端存储了consumer往注册中心填写的全部参数。</p> |
| <p>上面的例子,主要是将元数据地址放在配置中心,在元数据区存储下来的provider端服务信息和consumer端服务信息的展示。 |
| 接下来的两个例子,主要讲解在工程中配置:xml方式,annotation方式。</p> |
| <h3 id="方式二配置在项目中-properties方式引入配置">方式二:配置在项目中-properties方式引入配置</h3> |
| <p>参考sample:dubbo-samples-metadata-report/dubbo-samples-metadata-report-local-properties工程。</p> |
| <h5 id="dubboproperties">dubbo.properties</h5> |
| <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.metadata-report.address<span style="color:#719e07">=</span><span style="color:#2aa198">zookeeper://127.0.0.1:2181</span> |
| </span></span></code></pre></div><p>配置完成这个之后,其余的不用特别关注。也可以直接查看对应的provider和consumer端的服务信息。</p> |
| <h5 id="provider存储的某个服务的内容">provider存储的某个服务的内容:</h5> |
| <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-json" data-lang="json"><span style="display:flex;"><span>{ |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;parameters&#34;</span>: { |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;valid&#34;</span>: <span style="color:#2aa198">&#34;true&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;async&#34;</span>: <span style="color:#2aa198">&#34;true&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;side&#34;</span>: <span style="color:#2aa198">&#34;provider&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;application&#34;</span>: <span style="color:#2aa198">&#34;metadatareport-local-xml-provider&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;methods&#34;</span>: <span style="color:#2aa198">&#34;sayHello&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;dubbo&#34;</span>: <span style="color:#2aa198">&#34;2.0.2&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;interface&#34;</span>: <span style="color:#2aa198">&#34;org.apache.dubbo.samples.metadatareport.local.xml.api.DemoService&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;generic&#34;</span>: <span style="color:#2aa198">&#34;false&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;anyhost&#34;</span>: <span style="color:#2aa198">&#34;true&#34;</span> |
| </span></span><span style="display:flex;"><span> }, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;canonicalName&#34;</span>: <span style="color:#2aa198">&#34;org.apache.dubbo.samples.metadatareport.local.xml.api.DemoService&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;codeSource&#34;</span>: <span style="color:#2aa198">&#34;file:/Users/cvictory/workspace/work-mw/dubbo-samples/dubbo-samples-metadata-report/dubbo-samples-metadata-report-local-xml/target/classes/&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;methods&#34;</span>: [{ |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;name&#34;</span>: <span style="color:#2aa198">&#34;sayHello&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;parameterTypes&#34;</span>: [<span style="color:#2aa198">&#34;java.lang.String&#34;</span>], |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;returnType&#34;</span>: <span style="color:#2aa198">&#34;java.lang.String&#34;</span> |
| </span></span><span style="display:flex;"><span> }], |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;types&#34;</span>: [{ |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;type&#34;</span>: <span style="color:#2aa198">&#34;int&#34;</span> |
| </span></span><span style="display:flex;"><span> }, { |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;type&#34;</span>: <span style="color:#2aa198">&#34;char&#34;</span> |
| </span></span><span style="display:flex;"><span> }, { |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;type&#34;</span>: <span style="color:#2aa198">&#34;java.lang.String&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;properties&#34;</span>: { |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;value&#34;</span>: { |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;type&#34;</span>: <span style="color:#2aa198">&#34;char[]&#34;</span> |
| </span></span><span style="display:flex;"><span> }, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;hash&#34;</span>: { |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;type&#34;</span>: <span style="color:#2aa198">&#34;int&#34;</span> |
| </span></span><span style="display:flex;"><span> } |
| </span></span><span style="display:flex;"><span> } |
| </span></span><span style="display:flex;"><span> }] |
| </span></span><span style="display:flex;"><span>} |
| </span></span></code></pre></div><h5 id="consumer端存储的内容">consumer端存储的内容:</h5> |
| <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-json" data-lang="json"><span style="display:flex;"><span>{ |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;valid&#34;</span>: <span style="color:#2aa198">&#34;true&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;side&#34;</span>: <span style="color:#2aa198">&#34;consumer&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;application&#34;</span>: <span style="color:#2aa198">&#34;metadatareport-local-xml-consumer&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;methods&#34;</span>: <span style="color:#2aa198">&#34;sayHello&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;dubbo&#34;</span>: <span style="color:#2aa198">&#34;2.0.2&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;interface&#34;</span>: <span style="color:#2aa198">&#34;org.apache.dubbo.samples.metadatareport.local.xml.api.DemoService&#34;</span> |
| </span></span><span style="display:flex;"><span>} |
| </span></span></code></pre></div><h3 id="方式三配置在项目中-annotation方式引入配置">方式三:配置在项目中-annotation方式引入配置</h3> |
| <p>参考sample:dubbo-samples-metadata-report/dubbo-samples-metadata-report-local-annotaion工程。</p> |
| <h5 id="bean-引入bean">@Bean 引入bean</h5> |
| <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">@Bean</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">public</span> MetadataReportConfig <span style="color:#268bd2">metadataReportConfig</span><span style="color:#719e07">()</span> <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> MetadataReportConfig metadataReportConfig <span style="color:#719e07">=</span> <span style="color:#719e07">new</span> MetadataReportConfig<span style="color:#719e07">();</span> |
| </span></span><span style="display:flex;"><span> metadataReportConfig<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 style="color:#719e07">return</span> metadataReportConfig<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">}</span> |
| </span></span></code></pre></div><p>引入Bean之后,其余的地方也不需要特别配置。直接查看对应的服务信息:</p> |
| <h5 id="provider存储的某个服务的内容-1">provider存储的某个服务的内容:</h5> |
| <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-json" data-lang="json"><span style="display:flex;"><span>{ |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;parameters&#34;</span>: { |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;side&#34;</span>: <span style="color:#2aa198">&#34;provider&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;methods&#34;</span>: <span style="color:#2aa198">&#34;sayHello&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;dubbo&#34;</span>: <span style="color:#2aa198">&#34;2.0.2&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;interface&#34;</span>: <span style="color:#2aa198">&#34;org.apache.dubbo.samples.metadatareport.local.annotation.api.AnnotationService&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;version&#34;</span>: <span style="color:#2aa198">&#34;1.1.8&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;generic&#34;</span>: <span style="color:#2aa198">&#34;false&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;revision&#34;</span>: <span style="color:#2aa198">&#34;1.1.8&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;valid&#34;</span>: <span style="color:#2aa198">&#34;true&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;application&#34;</span>: <span style="color:#2aa198">&#34;metadatareport-local-annotaion-provider&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;default.timeout&#34;</span>: <span style="color:#2aa198">&#34;1000&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;group&#34;</span>: <span style="color:#2aa198">&#34;d-test&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;anyhost&#34;</span>: <span style="color:#2aa198">&#34;true&#34;</span> |
| </span></span><span style="display:flex;"><span> }, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;canonicalName&#34;</span>: <span style="color:#2aa198">&#34;org.apache.dubbo.samples.metadatareport.local.annotation.api.AnnotationService&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;codeSource&#34;</span>: <span style="color:#2aa198">&#34;file:/Users/cvictory/workspace/work-mw/dubbo-samples/dubbo-samples-metadata-report/dubbo-samples-metadata-report-local-annotaion/target/classes/&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;methods&#34;</span>: [{ |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;name&#34;</span>: <span style="color:#2aa198">&#34;sayHello&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;parameterTypes&#34;</span>: [<span style="color:#2aa198">&#34;java.lang.String&#34;</span>], |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;returnType&#34;</span>: <span style="color:#2aa198">&#34;java.lang.String&#34;</span> |
| </span></span><span style="display:flex;"><span> }], |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;types&#34;</span>: [{ |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;type&#34;</span>: <span style="color:#2aa198">&#34;int&#34;</span> |
| </span></span><span style="display:flex;"><span> }, { |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;type&#34;</span>: <span style="color:#2aa198">&#34;java.lang.String&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;properties&#34;</span>: { |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;value&#34;</span>: { |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;type&#34;</span>: <span style="color:#2aa198">&#34;char[]&#34;</span> |
| </span></span><span style="display:flex;"><span> }, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;hash&#34;</span>: { |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;type&#34;</span>: <span style="color:#2aa198">&#34;int&#34;</span> |
| </span></span><span style="display:flex;"><span> } |
| </span></span><span style="display:flex;"><span> } |
| </span></span><span style="display:flex;"><span> }, { |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;type&#34;</span>: <span style="color:#2aa198">&#34;char&#34;</span> |
| </span></span><span style="display:flex;"><span> }] |
| </span></span><span style="display:flex;"><span>} |
| </span></span></code></pre></div><h5 id="consumer端存储的内容-1">consumer端存储的内容:</h5> |
| <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-json" data-lang="json"><span style="display:flex;"><span>{ |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;valid&#34;</span>: <span style="color:#2aa198">&#34;true&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;side&#34;</span>: <span style="color:#2aa198">&#34;consumer&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;application&#34;</span>: <span style="color:#2aa198">&#34;metadatareport-local-annotaion-consumer&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;methods&#34;</span>: <span style="color:#2aa198">&#34;sayHello&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;dubbo&#34;</span>: <span style="color:#2aa198">&#34;2.0.2&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;interface&#34;</span>: <span style="color:#2aa198">&#34;org.apache.dubbo.samples.metadatareport.local.annotation.api.AnnotationService&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;version&#34;</span>: <span style="color:#2aa198">&#34;1.1.8&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;revision&#34;</span>: <span style="color:#2aa198">&#34;1.1.8&#34;</span>, |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&#34;group&#34;</span>: <span style="color:#2aa198">&#34;d-test&#34;</span> |
| </span></span><span style="display:flex;"><span>} |
| </span></span></code></pre></div><h2 id="扩展">扩展</h2> |
| <h3 id="spi定义">SPI定义</h3> |
| <p>参考:org.apache.dubbo.metadata.store.MetadataReportFactory , org.apache.dubbo.metadata.store.MetadataReport</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#268bd2">@SPI</span><span style="color:#719e07">(</span><span style="color:#2aa198">&#34;redis&#34;</span><span style="color:#719e07">)</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">interface</span> <span style="color:#268bd2">MetadataReportFactory</span> <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">@Adaptive</span><span style="color:#719e07">({</span><span style="color:#2aa198">&#34;protocol&#34;</span><span style="color:#719e07">})</span> |
| </span></span><span style="display:flex;"><span> MetadataReport <span style="color:#268bd2">getMetadataReport</span><span style="color:#719e07">(</span>URL url<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> |
| <p>下面以Redis存储为例进行说明。</p> |
| <p>新建一个project,需要支持以下修改:</p> |
| <h4 id="扩展abstractmetadatareport">扩展AbstractMetadataReport</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-java" data-lang="java"><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">RedisMetadataReport</span> <span style="color:#268bd2">extends</span> AbstractMetadataReport <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">private</span> <span style="color:#268bd2">final</span> <span style="color:#268bd2">static</span> Logger logger <span style="color:#719e07">=</span> LoggerFactory<span style="color:#719e07">.</span>getLogger<span style="color:#719e07">(</span>RedisMetadataReport<span style="color:#719e07">.</span>class<span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">final</span> JedisPool pool<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">RedisMetadataReport</span><span style="color:#719e07">(</span>URL url<span style="color:#719e07">)</span> <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">super</span><span style="color:#719e07">(</span>url<span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> pool <span style="color:#719e07">=</span> <span style="color:#719e07">new</span> JedisPool<span style="color:#719e07">(</span><span style="color:#719e07">new</span> JedisPoolConfig<span style="color:#719e07">(),</span> url<span style="color:#719e07">.</span>getHost<span style="color:#719e07">(),</span> url<span style="color:#719e07">.</span>getPort<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:#268bd2">@Override</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">protected</span> <span style="color:#dc322f">void</span> <span style="color:#268bd2">doStoreProviderMetadata</span><span style="color:#719e07">(</span>ProviderMetadataIdentifier providerMetadataIdentifier<span style="color:#719e07">,</span> String serviceDefinitions<span style="color:#719e07">)</span> <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">this</span><span style="color:#719e07">.</span>storeMetadata<span style="color:#719e07">(</span>providerMetadataIdentifier<span style="color:#719e07">,</span> serviceDefinitions<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:#268bd2">@Override</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">protected</span> <span style="color:#dc322f">void</span> <span style="color:#268bd2">doStoreConsumerMetadata</span><span style="color:#719e07">(</span>ConsumerMetadataIdentifier consumerMetadataIdentifier<span style="color:#719e07">,</span> String value<span style="color:#719e07">)</span> <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">this</span><span style="color:#719e07">.</span>storeMetadata<span style="color:#719e07">(</span>consumerMetadataIdentifier<span style="color:#719e07">,</span> value<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:#268bd2">private</span> <span style="color:#dc322f">void</span> <span style="color:#268bd2">storeMetadata</span><span style="color:#719e07">(</span>MetadataIdentifier metadataIdentifier<span style="color:#719e07">,</span> String v<span style="color:#719e07">)</span> <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">try</span> <span style="color:#719e07">(</span>Jedis jedis <span style="color:#719e07">=</span> pool<span style="color:#719e07">.</span>getResource<span style="color:#719e07">())</span> <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> jedis<span style="color:#719e07">.</span>set<span style="color:#719e07">(</span>metadataIdentifier<span style="color:#719e07">.</span>getIdentifierKey<span style="color:#719e07">()</span> <span style="color:#719e07">+</span> META_DATA_SOTRE_TAG<span style="color:#719e07">,</span> v<span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">}</span> <span style="color:#719e07">catch</span> <span style="color:#719e07">(</span>Throwable e<span style="color:#719e07">)</span> <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> logger<span style="color:#719e07">.</span>error<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;Failed to put &#34;</span> <span style="color:#719e07">+</span> metadataIdentifier <span style="color:#719e07">+</span> <span style="color:#2aa198">&#34; to redis &#34;</span> <span style="color:#719e07">+</span> v <span style="color:#719e07">+</span> <span style="color:#2aa198">&#34;, cause: &#34;</span> <span style="color:#719e07">+</span> e<span style="color:#719e07">.</span>getMessage<span style="color:#719e07">(),</span> e<span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">throw</span> <span style="color:#719e07">new</span> RpcException<span style="color:#719e07">(</span><span style="color:#2aa198">&#34;Failed to put &#34;</span> <span style="color:#719e07">+</span> metadataIdentifier <span style="color:#719e07">+</span> <span style="color:#2aa198">&#34; to redis &#34;</span> <span style="color:#719e07">+</span> v <span style="color:#719e07">+</span> <span style="color:#2aa198">&#34;, cause: &#34;</span> <span style="color:#719e07">+</span> e<span style="color:#719e07">.</span>getMessage<span style="color:#719e07">(),</span> e<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><span style="display:flex;"><span><span style="color:#719e07">}</span> |
| </span></span></code></pre></div><h4 id="扩展-abstractmetadatareportfactory">扩展 AbstractMetadataReportFactory</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-java" data-lang="java"><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">RedisMetadataReportFactory</span> <span style="color:#268bd2">extends</span> AbstractMetadataReportFactory <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> MetadataReport <span style="color:#268bd2">createMetadataReport</span><span style="color:#719e07">(</span>URL url<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:#719e07">new</span> RedisMetadataReport<span style="color:#719e07">(</span>url<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><h4 id="增加-metadatareportfactory">增加 MetadataReportFactory</h4> |
| <blockquote> |
| <p>META-INF/dubbo/internal/org.apache.dubbo.metadata.store.MetadataReportFactory</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>redis<span style="color:#719e07">=</span><span style="color:#2aa198">org.apache.dubbo.metadata.store.redis.RedisMetadataReportFactory</span> |
| </span></span></code></pre></div><p>只要将上面的修改和project打包成jar包,然后配置元数据中心的url:redis://10.20.153.10:6379。</p> |
| <p>至此,一个自定义的元数据存储就可以运行了。</p></description></item><item><title>Docsv2.7: API 参考手册</title><link>https://dubbo.apache.org/zh-cn/docsv2.7/user/references/api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docsv2.7/user/references/api/</guid><description> |
| <p>Dubbo 的常规功能,都保持零侵入,但有些功能不得不用 API 侵入才能实现。</p> |
| <div class="alert alert-primary" role="alert"> |
| <h4 class="alert-heading">提示</h4> |
| Dubbo 中除这里声明以外的接口或类,都是内部接口或扩展接口,普通用户请不要直接依赖,否则升级版本可能出现不兼容。 |
| </div> |
| <p>API 汇总如下:</p> |
| <h2 id="配置-api">配置 API</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-fallback" data-lang="fallback"><span style="display:flex;"><span>org.apache.dubbo.config.ServiceConfig |
| </span></span><span style="display:flex;"><span>org.apache.dubbo.config.ReferenceConfig |
| </span></span><span style="display:flex;"><span>org.apache.dubbo.config.ProtocolConfig |
| </span></span><span style="display:flex;"><span>org.apache.dubbo.config.RegistryConfig |
| </span></span><span style="display:flex;"><span>org.apache.dubbo.config.MonitorConfig |
| </span></span><span style="display:flex;"><span>org.apache.dubbo.config.ApplicationConfig |
| </span></span><span style="display:flex;"><span>org.apache.dubbo.config.ModuleConfig |
| </span></span><span style="display:flex;"><span>org.apache.dubbo.config.ProviderConfig |
| </span></span><span style="display:flex;"><span>org.apache.dubbo.config.ConsumerConfig |
| </span></span><span style="display:flex;"><span>org.apache.dubbo.config.MethodConfig |
| </span></span><span style="display:flex;"><span>org.apache.dubbo.config.ArgumentConfig |
| </span></span></code></pre></div><p>详细参见:<a href="../../configuration/api">API配置</a></p> |
| <h2 id="注解-api">注解 API</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-fallback" data-lang="fallback"><span style="display:flex;"><span>org.apache.dubbo.config.annotation.Service |
| </span></span><span style="display:flex;"><span>org.apache.dubbo.config.annotation.Reference |
| </span></span></code></pre></div><p>详细参见:<a href="../../configuration/annotation">注解配置</a></p> |
| <h2 id="模型-api">模型 API</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-fallback" data-lang="fallback"><span style="display:flex;"><span>org.apache.dubbo.common.URL |
| </span></span><span style="display:flex;"><span>org.apache.dubbo.rpc.RpcException |
| </span></span></code></pre></div><h2 id="上下文-api">上下文 API</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-fallback" data-lang="fallback"><span style="display:flex;"><span>org.apache.dubbo.rpc.RpcContext |
| </span></span></code></pre></div><p>详细参见:<a href="../../examples/context">上下文信息</a> &amp; <a href="../../examples/attachment">隐式传参</a> &amp; <a href="../../examples/async-call">异步调用</a></p> |
| <h2 id="服务-api">服务 API</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-fallback" data-lang="fallback"><span style="display:flex;"><span>org.apache.dubbo.rpc.service.GenericService |
| </span></span><span style="display:flex;"><span>org.apache.dubbo.rpc.service.GenericException |
| </span></span></code></pre></div><p>详细参见:<a href="../../examples/generic-reference">泛化引用</a> &amp; <a href="../../examples/generic-service">泛化实现</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-fallback" data-lang="fallback"><span style="display:flex;"><span>org.apache.dubbo.rpc.service.EchoService |
| </span></span></code></pre></div><p>详细参见:<a href="../../examples/echo-service">回声测试</a></p></description></item><item><title>Docsv2.7: 在线运维命令参考手册</title><link>https://dubbo.apache.org/zh-cn/docsv2.7/user/references/qos/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docsv2.7/user/references/qos/</guid><description> |
| <p>dubbo <code>2.5.8</code> 新版本增加了 QOS 模块,提供了新的 telnet 命令支持。</p> |
| <h2 id="端口">端口</h2> |
| <p>新版本的 telnet 端口 与 dubbo 协议的端口是不同的端口,默认为 <code>22222</code>,可通过配置文件<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-fallback" data-lang="fallback"><span style="display:flex;"><span>dubbo.application.qos.port=33333 |
| </span></span></code></pre></div><p>或者通过设置 JVM 参数:</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-fallback" data-lang="fallback"><span style="display:flex;"><span>-Ddubbo.application.qos.port=33333 |
| </span></span></code></pre></div><h2 id="安全">安全</h2> |
| <p>默认情况下,dubbo 接收任何主机发起的命令,可通过配置文件<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-fallback" data-lang="fallback"><span style="display:flex;"><span>dubbo.application.qos.accept.foreign.ip=false |
| </span></span></code></pre></div><p>或者通过设置 JVM 参数:</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-fallback" data-lang="fallback"><span style="display:flex;"><span>-Ddubbo.application.qos.accept.foreign.ip=false |
| </span></span></code></pre></div><p>拒绝远端主机发出的命令,只允许服务本机执行</p> |
| <h2 id="telnet-与-http-协议">telnet 与 http 协议</h2> |
| <p>telnet 模块现在同时支持 http 协议和 telnet 协议,方便各种情况的使用</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-fallback" data-lang="fallback"><span style="display:flex;"><span>➜ ~ telnet localhost 22222 |
| </span></span><span style="display:flex;"><span>Trying ::1... |
| </span></span><span style="display:flex;"><span>telnet: connect to address ::1: Connection refused |
| </span></span><span style="display:flex;"><span>Trying 127.0.0.1... |
| </span></span><span style="display:flex;"><span>Connected to localhost. |
| </span></span><span style="display:flex;"><span>Escape character is &#39;^]&#39;. |
| </span></span><span style="display:flex;"><span> ████████▄ ███ █▄ ▀█████████▄ ▀█████████▄ ▄██████▄ |
| </span></span><span style="display:flex;"><span> ███ ▀███ ███ ███ ███ ███ ███ ███ ███ ███ |
| </span></span><span style="display:flex;"><span> ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ |
| </span></span><span style="display:flex;"><span> ███ ███ ███ ███ ▄███▄▄▄██▀ ▄███▄▄▄██▀ ███ ███ |
| </span></span><span style="display:flex;"><span> ███ ███ ███ ███ ▀▀███▀▀▀██▄ ▀▀███▀▀▀██▄ ███ ███ |
| </span></span><span style="display:flex;"><span> ███ ███ ███ ███ ███ ██▄ ███ ██▄ ███ ███ |
| </span></span><span style="display:flex;"><span> ███ ▄███ ███ ███ ███ ███ ███ ███ ███ ███ |
| </span></span><span style="display:flex;"><span> ████████▀ ████████▀ ▄█████████▀ ▄█████████▀ ▀██████▀ |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>dubbo&gt;ls |
| </span></span><span style="display:flex;"><span>As Provider side: |
| </span></span><span style="display:flex;"><span>+----------------------------------+---+ |
| </span></span><span style="display:flex;"><span>| Provider Service Name |PUB| |
| </span></span><span style="display:flex;"><span>+----------------------------------+---+ |
| </span></span><span style="display:flex;"><span>|org.apache.dubbo.demo.DemoService| N | |
| </span></span><span style="display:flex;"><span>+----------------------------------+---+ |
| </span></span><span style="display:flex;"><span>As Consumer side: |
| </span></span><span style="display:flex;"><span>+---------------------+---+ |
| </span></span><span style="display:flex;"><span>|Consumer Service Name|NUM| |
| </span></span><span style="display:flex;"><span>+---------------------+---+ |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>dubbo&gt; |
| </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-fallback" data-lang="fallback"><span style="display:flex;"><span>➜ ~ curl &#34;localhost:22222/ls?arg1=xxx&amp;arg2=xxxx&#34; |
| </span></span><span style="display:flex;"><span>As Provider side: |
| </span></span><span style="display:flex;"><span>+----------------------------------+---+ |
| </span></span><span style="display:flex;"><span>| Provider Service Name |PUB| |
| </span></span><span style="display:flex;"><span>+----------------------------------+---+ |
| </span></span><span style="display:flex;"><span>|org.apache.dubbo.demo.DemoService| N | |
| </span></span><span style="display:flex;"><span>+----------------------------------+---+ |
| </span></span><span style="display:flex;"><span>As Consumer side: |
| </span></span><span style="display:flex;"><span>+---------------------+---+ |
| </span></span><span style="display:flex;"><span>|Consumer Service Name|NUM| |
| </span></span><span style="display:flex;"><span>+---------------------+---+ |
| </span></span></code></pre></div><h2 id="支持的命令">支持的命令</h2> |
| <h3 id="ls-列出消费者和提供者">ls 列出消费者和提供者</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-fallback" data-lang="fallback"><span style="display:flex;"><span>dubbo&gt;ls |
| </span></span><span style="display:flex;"><span>As Provider side: |
| </span></span><span style="display:flex;"><span>+----------------------------------+---+ |
| </span></span><span style="display:flex;"><span>| Provider Service Name |PUB| |
| </span></span><span style="display:flex;"><span>+----------------------------------+---+ |
| </span></span><span style="display:flex;"><span>|org.apache.dubbo.demo.DemoService| Y | |
| </span></span><span style="display:flex;"><span>+----------------------------------+---+ |
| </span></span><span style="display:flex;"><span>As Consumer side: |
| </span></span><span style="display:flex;"><span>+---------------------+---+ |
| </span></span><span style="display:flex;"><span>|Consumer Service Name|NUM| |
| </span></span><span style="display:flex;"><span>+---------------------+---+ |
| </span></span></code></pre></div><p>列出 dubbo 的所提供的服务和消费的服务,以及消费的服务地址数</p> |
| <h3 id="online-上线服务命令">Online 上线服务命令</h3> |
| <p>当使用延迟发布功能的时候(通过设置 org.apache.dubbo.config.AbstractServiceConfig#register 为 false),后续需要上线的时候,可通过 Online 命令</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-fallback" data-lang="fallback"><span style="display:flex;"><span>//上线所有服务 |
| </span></span><span style="display:flex;"><span>dubbo&gt;online |
| </span></span><span style="display:flex;"><span>OK |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>//根据正则,上线部分服务 |
| </span></span><span style="display:flex;"><span>dubbo&gt;online com.* |
| </span></span><span style="display:flex;"><span>OK |
| </span></span></code></pre></div><p>常见使用场景:</p> |
| <ul> |
| <li>当线上的 QPS 比较高的时候,当刚重启机器的时候,由于没有进行JIT 预热或相关资源没有预热,可能会导致大量超时,这个时候,可通过分批发布服务,逐渐加大流量</li> |
| <li>当由于某台机器由于某种原因,需要下线服务,然后又需要重新上线服务</li> |
| </ul> |
| <h3 id="offline-下线服务命令">Offline 下线服务命令</h3> |
| <p>由于故障等原因,需要临时下线服务保持现场,可以使用 Offline 下线命令。</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-fallback" data-lang="fallback"><span style="display:flex;"><span>//下线所有服务 |
| </span></span><span style="display:flex;"><span>dubbo&gt;offline |
| </span></span><span style="display:flex;"><span>OK |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>//根据正则,下线部分服务 |
| </span></span><span style="display:flex;"><span>dubbo&gt;offline com.* |
| </span></span><span style="display:flex;"><span>OK |
| </span></span></code></pre></div><h3 id="help-命令">help 命令</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-fallback" data-lang="fallback"><span style="display:flex;"><span>//列出所有命令 |
| </span></span><span style="display:flex;"><span>dubbo&gt;help |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>//列出单个命令的具体使用情况 |
| </span></span><span style="display:flex;"><span>dubbo&gt;help online |
| </span></span><span style="display:flex;"><span>+--------------+----------------------------------------------------------------------------------+ |
| </span></span><span style="display:flex;"><span>| COMMAND NAME | online | |
| </span></span><span style="display:flex;"><span>+--------------+----------------------------------------------------------------------------------+ |
| </span></span><span style="display:flex;"><span>| EXAMPLE | online dubbo | |
| </span></span><span style="display:flex;"><span>| | online xx.xx.xxx.service | |
| </span></span><span style="display:flex;"><span>+--------------+----------------------------------------------------------------------------------+ |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>dubbo&gt; |
| </span></span></code></pre></div><h2 id="相关参数说明">相关参数说明</h2> |
| <p>QoS提供了一些启动参数,来对启动进行配置,他们主要包括:</p> |
| <table> |
| <thead> |
| <tr> |
| <th>参数</th> |
| <th>说明</th> |
| <th>默认值</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td>qosEnable</td> |
| <td>是否启动QoS</td> |
| <td>true</td> |
| </tr> |
| <tr> |
| <td>qosPort</td> |
| <td>启动QoS绑定的端口</td> |
| <td>22222</td> |
| </tr> |
| <tr> |
| <td>qosAcceptForeignIp</td> |
| <td>是否允许远程访问</td> |
| <td>false</td> |
| </tr> |
| </tbody> |
| </table> |
| <blockquote> |
| <p>注意,从2.6.4/2.7.0开始,qosAcceptForeignIp默认配置改为false,如果qosAcceptForeignIp设置为true,有可能带来安全风险,请仔细评估后再打开。</p> |
| </blockquote> |
| <p>QoS参数可以通过如下方式进行配置</p> |
| <ul> |
| <li>系统属性</li> |
| <li>dubbo.properties</li> |
| <li>XML方式</li> |
| <li>Spring-boot自动装配方式</li> |
| </ul> |
| <p>其中,上述方式的优先顺序为系统属性 &gt; dubbo.properties &gt; XML/Spring-boot自动装配方式。</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-fallback" data-lang="fallback"><span style="display:flex;"><span>-Ddubbo.application.qos.enable=true |
| </span></span><span style="display:flex;"><span>-Ddubbo.application.qos.port=33333 |
| </span></span><span style="display:flex;"><span>-Ddubbo.application.qos.accept.foreign.ip=false |
| </span></span></code></pre></div><h3 id="使用dubboproperties文件进行配置">使用dubbo.properties文件进行配置</h3> |
| <p>在项目的<code>src/main/resources</code>目录下添加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-fallback" data-lang="fallback"><span style="display:flex;"><span>dubbo.application.qos.enable=true |
| </span></span><span style="display:flex;"><span>dubbo.application.qos.port=33333 |
| </span></span><span style="display:flex;"><span>dubbo.application.qos.accept.foreign.ip=false |
| </span></span></code></pre></div><h3 id="使用xml方法进行配置">使用XML方法进行配置</h3> |
| <p>如果要通过XML配置响应的QoS相关的参数,可以进行如下配置:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#719e07">&lt;?xml version=&#34;1.0&#34; encoding=&#34;UTF-8&#34;?&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;beans</span> xmlns=<span style="color:#2aa198">&#34;http://www.springframework.org/schema/beans&#34;</span> |
| </span></span><span style="display:flex;"><span> xmlns:xsi=<span style="color:#2aa198">&#34;http://www.w3.org/2001/XMLSchema-instance&#34;</span> |
| </span></span><span style="display:flex;"><span> xmlns:dubbo=<span style="color:#2aa198">&#34;http://dubbo.apache.org/schema/dubbo&#34;</span> |
| </span></span><span style="display:flex;"><span> xsi:schemaLocation=<span style="color:#2aa198">&#34;http://www.springframework.org/schema/beans |
| </span></span></span><span style="display:flex;"><span><span style="color:#2aa198"> 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:parameter</span> key=<span style="color:#2aa198">&#34;qos.enable&#34;</span> value=<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:parameter</span> key=<span style="color:#2aa198">&#34;qos.accept.foreign.ip&#34;</span> value=<span style="color:#2aa198">&#34;false&#34;</span><span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;dubbo:parameter</span> key=<span style="color:#2aa198">&#34;qos.port&#34;</span> value=<span style="color:#2aa198">&#34;33333&#34;</span><span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;/dubbo:application&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;dubbo:registry</span> address=<span style="color:#2aa198">&#34;multicast://224.5.6.7:1234&#34;</span><span style="color:#268bd2">/&gt;</span> |
| </span></span><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 style="color:#268bd2">&lt;dubbo:service</span> interface=<span style="color:#2aa198">&#34;org.apache.dubbo.demo.provider.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;bean</span> id=<span style="color:#2aa198">&#34;demoService&#34;</span> class=<span style="color:#2aa198">&#34;org.apache.dubbo.demo.provider.DemoServiceImpl&#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><h3 id="使用spring-boot自动装配方式配置">使用spring-boot自动装配方式配置</h3> |
| <p>如果是spring-boot的应用,可以在<code>application.properties</code>或者<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-fallback" data-lang="fallback"><span style="display:flex;"><span>dubbo.application.qosEnable=true |
| </span></span><span style="display:flex;"><span>dubbo.application.qosPort=33333 |
| </span></span><span style="display:flex;"><span>dubbo.application.qosAcceptForeignIp=false |
| </span></span></code></pre></div></description></item><item><title>Docsv2.7: Telnet 命令参考手册</title><link>https://dubbo.apache.org/zh-cn/docsv2.7/user/references/telnet/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docsv2.7/user/references/telnet/</guid><description> |
| <p>从 <code>2.0.5</code> 版本开始,dubbo 开始支持通过 telnet 命令来进行服务治理。</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-sh" data-lang="sh"><span style="display:flex;"><span>telnet localhost <span style="color:#2aa198">20880</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-sh" data-lang="sh"><span style="display:flex;"><span><span style="color:#b58900">echo</span> status | nc -i <span style="color:#2aa198">1</span> localhost <span style="color:#2aa198">20880</span> |
| </span></span></code></pre></div><p>status命令所检查的资源也可以扩展,参见:<a href="../../../dev/impls/status-checker">扩展参考手册</a>。</p> |
| <h2 id="命令">命令</h2> |
| <p>以下展示了 dubbo 内建的 telnet 命令的说明和用法,此外,telnet 命令还支持用户自行扩展,参见:<a href="../../../dev/impls/telnet-handler">Telnet 命令扩展</a>。</p> |
| <h3 id="ls"><code>ls</code></h3> |
| <ol start="0"> |
| <li><code>ls</code>: 显示服务列表</li> |
| <li><code>ls -l</code>: 显示服务详细信息列表</li> |
| <li><code>ls XxxService</code>: 显示服务的方法列表</li> |
| <li><code>ls -l XxxService</code>: 显示服务的方法详细信息列表</li> |
| </ol> |
| <h3 id="ps"><code>ps</code></h3> |
| <ol start="0"> |
| <li><code>ps</code>: 显示服务端口列表</li> |
| <li><code>ps -l</code>: 显示服务地址列表</li> |
| <li><code>ps 20880</code>: 显示端口上的连接信息</li> |
| <li><code>ps -l 20880</code>: 显示端口上的连接详细信息</li> |
| </ol> |
| <h3 id="cd"><code>cd</code></h3> |
| <ol start="0"> |
| <li><code>cd XxxService</code>: 改变缺省服务,当设置了缺省服务,凡是需要输入服务名作为参数的命令,都可以省略服务参数</li> |
| <li><code>cd /</code>: 取消缺省服务</li> |
| </ol> |
| <h3 id="pwd"><code>pwd</code></h3> |
| <p><code>pwd</code>: 显示当前缺省服务</p> |
| <h3 id="trace"><code>trace</code></h3> |
| <ol start="0"> |
| <li><code>trace XxxService</code>: 跟踪 1 次服务任意方法的调用情况</li> |
| <li><code>trace XxxService 10</code>: 跟踪 10 次服务任意方法的调用情况</li> |
| <li><code>trace XxxService xxxMethod</code>: 跟踪 1 次服务方法的调用情况</li> |
| <li><code>trace XxxService xxxMethod 10</code>: 跟踪 10 次服务方法的调用情况</li> |
| </ol> |
| <h3 id="count"><code>count</code></h3> |
| <ol start="0"> |
| <li><code>count XxxService</code>: 统计 1 次服务任意方法的调用情况</li> |
| <li><code>count XxxService 10</code>: 统计 10 次服务任意方法的调用情况</li> |
| <li><code>count XxxService xxxMethod</code>: 统计 1 次服务方法的调用情况</li> |
| <li><code>count XxxService xxxMethod 10</code>: 统计 10 次服务方法的调用情况</li> |
| </ol> |
| <h3 id="invoke"><code>invoke</code></h3> |
| <ol start="0"> |
| <li><code>invoke XxxService.xxxMethod(1234, &quot;abcd&quot;, {&quot;prop&quot; : &quot;value&quot;})</code>: 调用服务的方法</li> |
| <li><code>invoke com.xxx.XxxService.XxxService.xxxMethod(1234, &quot;abcd&quot;, {&quot;prop&quot; : &quot;value&quot;})</code>: 调用全路径服务的方法</li> |
| <li><code>invoke xxxMethod(1234, &quot;abcd&quot;, {&quot;prop&quot; : &quot;value&quot;})</code>: 调用服务的方法(自动查找包含此方法的服务)</li> |
| <li><code>invoke xxxMethod({&quot;name&quot;:&quot;zhangsan&quot;,&quot;age&quot;:12,&quot;class&quot;:&quot;org.apache.dubbo.qos.legacy.service.Person&quot;})</code> :当有参数重载,或者类型转换失败的时候,可以通过增加class属性指定需要转换类</li> |
| <li>当参数为Map&lt;Integer,T&gt;,key的类型为Integer时,建议指定类型。例如<code>invoke com.xxx.xxxApiService({&quot;3&quot;:0.123, &quot;class&quot;:&quot;java.util.HashMap&quot;})</code></li> |
| </ol> |
| <h3 id="select-2"><code>select</code> <sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></h3> |
| <ol start="0"> |
| <li><code>select 1</code>: 当 invoke 命令匹配到多个方法时使用,根据提示列表选择需要调用的方法</li> |
| </ol> |
| <h3 id="status"><code>status</code></h3> |
| <ol start="0"> |
| <li><code>status</code>: 显示汇总状态,该状态将汇总所有资源的状态,当全部 OK 时则显示 OK,只要有一个 ERROR 则显示 ERROR,只要有一个 WARN 则显示 WARN</li> |
| <li><code>status -l</code>: 显示状态列表</li> |
| </ol> |
| <h3 id="log-1"><code>log</code> <sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup></h3> |
| <ol start="0"> |
| <li><code>log debug</code>: 修改 dubbo logger 的日志级别</li> |
| <li><code>log 100</code>: 查看 file logger 的最后 100 字符的日志</li> |
| </ol> |
| <h3 id="help"><code>help</code></h3> |
| <ol start="0"> |
| <li><code>help</code>: 显示 telnet 命帮助信息</li> |
| <li><code>help xxx</code>: 显示xxx命令的详细帮助信息</li> |
| </ol> |
| <h3 id="clear"><code>clear</code></h3> |
| <ol start="0"> |
| <li><code>clear</code>: 清除屏幕上的内容</li> |
| <li><code>clear 100</code>: 清除屏幕上的指定行数的内容</li> |
| </ol> |
| <h3 id="exit"><code>exit</code></h3> |
| <p><code>exit</code>: 退出当前 telnet 命令行</p> |
| <h3 id="shutdown-2"><code>shutdown</code> <sup id="fnref1:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></h3> |
| <ol start="0"> |
| <li><code>shutdown</code>: 关闭 dubbo 应用</li> |
| <li><code>shutdown -t 1000</code>: 延迟 1000 毫秒关闭 dubbo 应用</li> |
| </ol> |
| <div class="footnotes" role="doc-endnotes"> |
| <hr> |
| <ol> |
| <li id="fn:1"> |
| <p><code>2.7.1</code> 以上版本支持&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p> |
| </li> |
| <li id="fn:2"> |
| <p><code>2.0.6</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: Maven 插件参考手册</title><link>https://dubbo.apache.org/zh-cn/docsv2.7/user/references/maven/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docsv2.7/user/references/maven/</guid><description> |
| <h2 id="启动一个简易注册中心">启动一个简易注册中心</h2> |
| <p>以指定的 9099 端口启动一个简易注册中心 <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-sh" data-lang="sh"><span style="display:flex;"><span>mvn dubbo:registry -Dport<span style="color:#719e07">=</span><span style="color:#2aa198">9099</span> |
| </span></span></code></pre></div><h2 id="生成-demo-服务提供者应用">生成 demo 服务提供者应用</h2> |
| <p>生成指定接口和版本的服务提供者应用 <sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</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-sh" data-lang="sh"><span style="display:flex;"><span>mvn dubbo:create -Dapplication<span style="color:#719e07">=</span>xxx -Dpackage<span style="color:#719e07">=</span>com.alibaba.xxx -Dservice<span style="color:#719e07">=</span>XxxService,YyyService -Dversion<span style="color:#719e07">=</span>1.0.0 |
| </span></span></code></pre></div><div class="footnotes" role="doc-endnotes"> |
| <hr> |
| <ol> |
| <li id="fn:1"> |
| <p>如果端口不指定,默认端口为 9090&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p> |
| </li> |
| <li id="fn:2"> |
| <p>参见 <a href="../../../dev/impls/container">容器扩展</a>&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p> |
| </li> |
| </ol> |
| </div></description></item></channel></rss> |