| <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Apache Dubbo – SPI 扩展实现</title><link>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/</link><description>Recent content in SPI 扩展实现 on Apache Dubbo</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><atom:link href="https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/index.xml" rel="self" type="application/rss+xml"/><item><title>Docsv2.7: 协议扩展</title><link>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/protocol/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/protocol/</guid><description> |
| <h2 id="扩展说明">扩展说明</h2> |
| <p>RPC 协议扩展,封装远程调用细节。</p> |
| <p>契约:</p> |
| <ul> |
| <li>当用户调用 <code>refer()</code> 所返回的 <code>Invoker</code> 对象的 <code>invoke()</code> 方法时,协议需相应执行同 URL 远端 <code>export()</code> 传入的 <code>Invoker</code> 对象的 <code>invoke()</code> 方法。</li> |
| <li>其中,<code>refer()</code> 返回的 <code>Invoker</code> 由协议实现,协议通常需要在此 <code>Invoker</code> 中发送远程请求,<code>export()</code> 传入的 <code>Invoker</code> 由框架实现并传入,协议不需要关心。</li> |
| </ul> |
| <p>注意:</p> |
| <ul> |
| <li>协议不关心业务接口的透明代理,以 <code>Invoker</code> 为中心,由外层将 <code>Invoker</code> 转换为业务接口。</li> |
| <li>协议不一定要是 TCP 网络通讯,比如通过共享文件,IPC 进程间通讯等。</li> |
| </ul> |
| <h2 id="扩展接口">扩展接口</h2> |
| <ul> |
| <li><code>org.apache.dubbo.rpc.Protocol</code></li> |
| <li><code>org.apache.dubbo.rpc.Exporter</code></li> |
| <li><code>org.apache.dubbo.rpc.Invoker</code></li> |
| </ul> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">interface</span> <span style="color:#268bd2">Protocol</span> <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">/** |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * 暴露远程服务:&lt;br&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * 1. 协议在接收请求时,应记录请求来源方地址信息:RpcContext.getContext().setRemoteAddress();&lt;br&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * 2. export()必须是幂等的,也就是暴露同一个URL的Invoker两次,和暴露一次没有区别。&lt;br&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * 3. export()传入的Invoker由框架实现并传入,协议不需要关心。&lt;br&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * @param &lt;T&gt; 服务的类型 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * @param invoker 服务的执行体 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * @return exporter 暴露服务的引用,用于取消暴露 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * @throws RpcException 当暴露服务出错时抛出,比如端口已占用 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> */</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">&lt;</span>T<span style="color:#719e07">&gt;</span> Exporter<span style="color:#719e07">&lt;</span>T<span style="color:#719e07">&gt;</span> <span style="color:#268bd2">export</span><span style="color:#719e07">(</span>Invoker<span style="color:#719e07">&lt;</span>T<span style="color:#719e07">&gt;</span> invoker<span style="color:#719e07">)</span> <span style="color:#268bd2">throws</span> RpcException<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"> * 引用远程服务:&lt;br&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * 1. 当用户调用refer()所返回的Invoker对象的invoke()方法时,协议需相应执行同URL远端export()传入的Invoker对象的invoke()方法。&lt;br&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * 2. refer()返回的Invoker由协议实现,协议通常需要在此Invoker中发送远程请求。&lt;br&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * 3. 当url中有设置check=false时,连接失败不能抛出异常,需内部自动恢复。&lt;br&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * @param &lt;T&gt; 服务的类型 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * @param type 服务的类型 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * @param url 远程服务的URL地址 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * @return invoker 服务的本地代理 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * @throws RpcException 当连接服务提供方失败时抛出 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> */</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">&lt;</span>T<span style="color:#719e07">&gt;</span> Invoker<span style="color:#719e07">&lt;</span>T<span style="color:#719e07">&gt;</span> <span style="color:#268bd2">refer</span><span style="color:#719e07">(</span>Class<span style="color:#719e07">&lt;</span>T<span style="color:#719e07">&gt;</span> type<span style="color:#719e07">,</span> URL url<span style="color:#719e07">)</span> <span style="color:#268bd2">throws</span> RpcException<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> |
| <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;!-- 声明协议,如果没有配置id,将以name为id --&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:protocol</span> id=<span style="color:#2aa198">&#34;xxx1&#34;</span> name=<span style="color:#2aa198">&#34;xxx&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">&lt;!-- 引用协议,如果没有配置protocol属性,将在ApplicationContext中自动扫描protocol配置 --&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:service</span> protocol=<span style="color:#2aa198">&#34;xxx1&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">&lt;!-- 引用协议缺省值,当&lt;dubbo:service&gt;没有配置prototol属性时,使用此配置 --&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:provider</span> protocol=<span style="color:#2aa198">&#34;xxx1&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div><h2 id="已知扩展">已知扩展</h2> |
| <ul> |
| <li><code>org.apache.dubbo.rpc.protocol.injvm.InjvmProtocol</code></li> |
| <li><code>org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol</code></li> |
| <li><code>org.apache.dubbo.rpc.protocol.rmi.RmiProtocol</code></li> |
| <li><code>org.apache.dubbo.rpc.protocol.http.HttpProtocol</code></li> |
| <li><code>org.apache.dubbo.rpc.protocol.http.hessian.HessianProtocol</code></li> |
| <li><code>org.apache.dubbo.rpc.protocol.memcached.MemcachedProtocol</code></li> |
| <li><code>org.apache.dubbo.rpc.support.MockProtocol</code></li> |
| <li><code>org.apache.dubbo.rpc.protocol.redis.RedisProtocol</code></li> |
| <li><code>org.apache.dubbo.rpc.protocol.nativethrift.ThriftProtocol</code></li> |
| </ul> |
| <h2 id="扩展示例">扩展示例</h2> |
| <p>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-fallback" data-lang="fallback"><span style="display:flex;"><span>src |
| </span></span><span style="display:flex;"><span> |-main |
| </span></span><span style="display:flex;"><span> |-java |
| </span></span><span style="display:flex;"><span> |-com |
| </span></span><span style="display:flex;"><span> |-xxx |
| </span></span><span style="display:flex;"><span> |-XxxProtocol.java (实现Protocol接口) |
| </span></span><span style="display:flex;"><span> |-XxxExporter.java (实现Exporter接口) |
| </span></span><span style="display:flex;"><span> |-XxxInvoker.java (实现Invoker接口) |
| </span></span><span style="display:flex;"><span> |-resources |
| </span></span><span style="display:flex;"><span> |-META-INF |
| </span></span><span style="display:flex;"><span> |-dubbo |
| </span></span><span style="display:flex;"><span> |-org.apache.dubbo.rpc.Protocol (纯文本文件,内容为:xxx=com.xxx.XxxProtocol) |
| </span></span></code></pre></div><p>XxxProtocol.java:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#719e07">package</span> com.xxx<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.rpc.Protocol<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">XxxProtocol</span> <span style="color:#268bd2">implements</span> Protocol <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> <span style="color:#719e07">&lt;</span>T<span style="color:#719e07">&gt;</span> Exporter<span style="color:#719e07">&lt;</span>T<span style="color:#719e07">&gt;</span> <span style="color:#268bd2">export</span><span style="color:#719e07">(</span>Invoker<span style="color:#719e07">&lt;</span>T<span style="color:#719e07">&gt;</span> invoker<span style="color:#719e07">)</span> <span style="color:#268bd2">throws</span> RpcException <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">return</span> <span style="color:#719e07">new</span> XxxExporter<span style="color:#719e07">(</span>invoker<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">public</span> <span style="color:#719e07">&lt;</span>T<span style="color:#719e07">&gt;</span> Invoker<span style="color:#719e07">&lt;</span>T<span style="color:#719e07">&gt;</span> <span style="color:#268bd2">refer</span><span style="color:#719e07">(</span>Class<span style="color:#719e07">&lt;</span>T<span style="color:#719e07">&gt;</span> type<span style="color:#719e07">,</span> URL url<span style="color:#719e07">)</span> <span style="color:#268bd2">throws</span> RpcException <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">return</span> <span style="color:#719e07">new</span> XxxInvoker<span style="color:#719e07">(</span>type<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><p>XxxExporter.java:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#719e07">package</span> com.xxx<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.rpc.support.AbstractExporter<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">XxxExporter</span><span style="color:#719e07">&lt;</span>T<span style="color:#719e07">&gt;</span> <span style="color:#268bd2">extends</span> AbstractExporter<span style="color:#719e07">&lt;</span>T<span style="color:#719e07">&gt;</span> <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> <span style="color:#268bd2">XxxExporter</span><span style="color:#719e07">(</span>Invoker<span style="color:#719e07">&lt;</span>T<span style="color:#719e07">&gt;</span> invoker<span style="color:#719e07">)</span> <span style="color:#268bd2">throws</span> RemotingException<span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">super</span><span style="color:#719e07">(</span>invoker<span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> <span style="color:#dc322f">void</span> <span style="color:#268bd2">unexport</span><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>unexport<span style="color:#719e07">();</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">}</span> |
| </span></span></code></pre></div><p>XxxInvoker.java:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#719e07">package</span> com.xxx<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.rpc.support.AbstractInvoker<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">XxxInvoker</span><span style="color:#719e07">&lt;</span>T<span style="color:#719e07">&gt;</span> <span style="color:#268bd2">extends</span> AbstractInvoker<span style="color:#719e07">&lt;</span>T<span style="color:#719e07">&gt;</span> <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> <span style="color:#268bd2">XxxInvoker</span><span style="color:#719e07">(</span>Class<span style="color:#719e07">&lt;</span>T<span style="color:#719e07">&gt;</span> type<span style="color:#719e07">,</span> URL url<span style="color:#719e07">)</span> <span style="color:#268bd2">throws</span> RemotingException<span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">super</span><span style="color:#719e07">(</span>type<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></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> Result <span style="color:#268bd2">doInvoke</span><span style="color:#719e07">(</span>Invocation invocation<span style="color:#719e07">)</span> <span style="color:#268bd2">throws</span> Throwable <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">}</span> |
| </span></span></code></pre></div><p>META-INF/dubbo/org.apache.dubbo.rpc.Protocol:</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>xxx<span style="color:#719e07">=</span><span style="color:#2aa198">com.xxx.XxxProtocol</span> |
| </span></span></code></pre></div></description></item><item><title>Docsv2.7: 调用拦截扩展</title><link>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/filter/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/filter/</guid><description> |
| <h2 id="扩展说明">扩展说明</h2> |
| <p>服务提供方和服务消费方调用过程拦截,Dubbo 本身的大多功能均基于此扩展点实现,每次远程方法执行,该拦截都会被执行,请注意对性能的影响。</p> |
| <p>约定:</p> |
| <ul> |
| <li>用户自定义 filter 默认在内置 filter 之后。</li> |
| <li>特殊值 <code>default</code>,表示缺省扩展点插入的位置。比如:<code>filter=&quot;xxx,default,yyy&quot;</code>,表示 <code>xxx</code> 在缺省 filter 之前,<code>yyy</code> 在缺省 filter 之后。</li> |
| <li>特殊符号 <code>-</code>,表示剔除。比如:<code>filter=&quot;-foo1&quot;</code>,剔除添加缺省扩展点 <code>foo1</code>。比如:<code>filter=&quot;-default&quot;</code>,剔除添加所有缺省扩展点。</li> |
| <li>provider 和 service 同时配置的 filter 时,累加所有 filter,而不是覆盖。比如:<code>&lt;dubbo:provider filter=&quot;xxx,yyy&quot;/&gt;</code> 和 <code>&lt;dubbo:service filter=&quot;aaa,bbb&quot; /&gt;</code>,则 <code>xxx</code>,<code>yyy</code>,<code>aaa</code>,<code>bbb</code> 均会生效。如果要覆盖,需配置:<code>&lt;dubbo:service filter=&quot;-xxx,-yyy,aaa,bbb&quot; /&gt;</code></li> |
| </ul> |
| <h2 id="扩展接口">扩展接口</h2> |
| <p><code>org.apache.dubbo.rpc.Filter</code></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-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#586e75">&lt;!-- 消费方调用过程拦截 --&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:reference</span> filter=<span style="color:#2aa198">&#34;xxx,yyy&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">&lt;!-- 消费方调用过程缺省拦截器,将拦截所有reference --&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:consumer</span> filter=<span style="color:#2aa198">&#34;xxx,yyy&#34;</span><span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">&lt;!-- 提供方调用过程拦截 --&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:service</span> filter=<span style="color:#2aa198">&#34;xxx,yyy&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">&lt;!-- 提供方调用过程缺省拦截器,将拦截所有service --&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:provider</span> filter=<span style="color:#2aa198">&#34;xxx,yyy&#34;</span><span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div><h2 id="已知扩展">已知扩展</h2> |
| <ul> |
| <li><code>org.apache.dubbo.rpc.filter.EchoFilter</code></li> |
| <li><code>org.apache.dubbo.rpc.filter.GenericFilter</code></li> |
| <li><code>org.apache.dubbo.rpc.filter.GenericImplFilter</code></li> |
| <li><code>org.apache.dubbo.rpc.filter.TokenFilter</code></li> |
| <li><code>org.apache.dubbo.rpc.filter.AccessLogFilter</code></li> |
| <li><code>org.apache.dubbo.rpc.filter.CountFilter</code></li> |
| <li><code>org.apache.dubbo.rpc.filter.ActiveLimitFilter</code></li> |
| <li><code>org.apache.dubbo.rpc.filter.ClassLoaderFilter</code></li> |
| <li><code>org.apache.dubbo.rpc.filter.ContextFilter</code></li> |
| <li><code>org.apache.dubbo.rpc.filter.ConsumerContextFilter</code></li> |
| <li><code>org.apache.dubbo.rpc.filter.ExceptionFilter</code></li> |
| <li><code>org.apache.dubbo.rpc.filter.ExecuteLimitFilter</code></li> |
| <li><code>org.apache.dubbo.rpc.filter.DeprecatedFilter</code></li> |
| </ul> |
| <h2 id="扩展示例">扩展示例</h2> |
| <p>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-fallback" data-lang="fallback"><span style="display:flex;"><span>src |
| </span></span><span style="display:flex;"><span> |-main |
| </span></span><span style="display:flex;"><span> |-java |
| </span></span><span style="display:flex;"><span> |-com |
| </span></span><span style="display:flex;"><span> |-xxx |
| </span></span><span style="display:flex;"><span> |-XxxFilter.java (实现Filter接口) |
| </span></span><span style="display:flex;"><span> |-resources |
| </span></span><span style="display:flex;"><span> |-META-INF |
| </span></span><span style="display:flex;"><span> |-dubbo |
| </span></span><span style="display:flex;"><span> |-org.apache.dubbo.rpc.Filter (纯文本文件,内容为:xxx=com.xxx.XxxFilter) |
| </span></span></code></pre></div><p>XxxFilter.java:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#719e07">package</span> com.xxx<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.rpc.Filter<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.rpc.Invoker<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.rpc.Invocation<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.rpc.Result<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.rpc.RpcException<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">XxxFilter</span> <span style="color:#268bd2">implements</span> Filter <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> Result <span style="color:#268bd2">invoke</span><span style="color:#719e07">(</span>Invoker<span style="color:#719e07">&lt;?&gt;</span> invoker<span style="color:#719e07">,</span> Invocation invocation<span style="color:#719e07">)</span> <span style="color:#268bd2">throws</span> RpcException <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// before filter ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> Result result <span style="color:#719e07">=</span> invoker<span style="color:#719e07">.</span>invoke<span style="color:#719e07">(</span>invocation<span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// after filter ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">return</span> result<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><p>META-INF/dubbo/org.apache.dubbo.rpc.Filter:</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>xxx<span style="color:#719e07">=</span><span style="color:#2aa198">com.xxx.XxxFilter</span> |
| </span></span></code></pre></div></description></item><item><title>Docsv2.7: 引用监听扩展</title><link>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/invoker-listener/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/invoker-listener/</guid><description> |
| <h2 id="扩展说明">扩展说明</h2> |
| <p>当有服务引用时,触发该事件。</p> |
| <h2 id="扩展接口">扩展接口</h2> |
| <p><code>org.apache.dubbo.rpc.InvokerListener</code></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-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#586e75">&lt;!-- 引用服务监听 --&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:reference</span> listener=<span style="color:#2aa198">&#34;xxx,yyy&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">&lt;!-- 引用服务缺省监听器 --&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:consumer</span> listener=<span style="color:#2aa198">&#34;xxx,yyy&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div><h2 id="已知扩展">已知扩展</h2> |
| <p><code>org.apache.dubbo.rpc.listener.DeprecatedInvokerListener</code></p> |
| <h2 id="扩展示例">扩展示例</h2> |
| <p>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-fallback" data-lang="fallback"><span style="display:flex;"><span>src |
| </span></span><span style="display:flex;"><span> |-main |
| </span></span><span style="display:flex;"><span> |-java |
| </span></span><span style="display:flex;"><span> |-com |
| </span></span><span style="display:flex;"><span> |-xxx |
| </span></span><span style="display:flex;"><span> |-XxxInvokerListener.java (实现InvokerListener接口) |
| </span></span><span style="display:flex;"><span> |-resources |
| </span></span><span style="display:flex;"><span> |-META-INF |
| </span></span><span style="display:flex;"><span> |-dubbo |
| </span></span><span style="display:flex;"><span> |-org.apache.dubbo.rpc.InvokerListener (纯文本文件,内容为:xxx=com.xxx.XxxInvokerListener) |
| </span></span></code></pre></div><p>XxxInvokerListener.java:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#719e07">package</span> com.xxx<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.rpc.InvokerListener<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.rpc.Invoker<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.rpc.RpcException<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">XxxInvokerListener</span> <span style="color:#268bd2">implements</span> InvokerListener <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> <span style="color:#dc322f">void</span> <span style="color:#268bd2">referred</span><span style="color:#719e07">(</span>Invoker<span style="color:#719e07">&lt;?&gt;</span> invoker<span style="color:#719e07">)</span> <span style="color:#268bd2">throws</span> RpcException <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> <span style="color:#dc322f">void</span> <span style="color:#268bd2">destroyed</span><span style="color:#719e07">(</span>Invoker<span style="color:#719e07">&lt;?&gt;</span> invoker<span style="color:#719e07">)</span> <span style="color:#268bd2">throws</span> RpcException <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">}</span> |
| </span></span></code></pre></div><p>META-INF/dubbo/org.apache.dubbo.rpc.InvokerListener:</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>xxx<span style="color:#719e07">=</span><span style="color:#2aa198">com.xxx.XxxInvokerListener</span> |
| </span></span></code></pre></div></description></item><item><title>Docsv2.7: 暴露监听扩展</title><link>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/exporter-listener/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/exporter-listener/</guid><description> |
| <h2 id="扩展说明">扩展说明</h2> |
| <p>当有服务暴露时,触发该事件。</p> |
| <h2 id="扩展接口">扩展接口</h2> |
| <p><code>org.apache.dubbo.rpc.ExporterListener</code></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-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#586e75">&lt;!-- 暴露服务监听 --&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:service</span> listener=<span style="color:#2aa198">&#34;xxx,yyy&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">&lt;!-- 暴露服务缺省监听器 --&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:provider</span> listener=<span style="color:#2aa198">&#34;xxx,yyy&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div><h2 id="已知扩展">已知扩展</h2> |
| <p><code>org.apache.dubbo.registry.directory.RegistryExporterListener</code></p> |
| <h2 id="扩展示例">扩展示例</h2> |
| <p>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-fallback" data-lang="fallback"><span style="display:flex;"><span>src |
| </span></span><span style="display:flex;"><span> |-main |
| </span></span><span style="display:flex;"><span> |-java |
| </span></span><span style="display:flex;"><span> |-com |
| </span></span><span style="display:flex;"><span> |-xxx |
| </span></span><span style="display:flex;"><span> |-XxxExporterListener.java (实现ExporterListener接口) |
| </span></span><span style="display:flex;"><span> |-resources |
| </span></span><span style="display:flex;"><span> |-META-INF |
| </span></span><span style="display:flex;"><span> |-dubbo |
| </span></span><span style="display:flex;"><span> |-org.apache.dubbo.rpc.ExporterListener (纯文本文件,内容为:xxx=com.xxx.XxxExporterListener) |
| </span></span></code></pre></div><p>XxxExporterListener.java:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#719e07">package</span> com.xxx<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.rpc.ExporterListener<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.rpc.Exporter<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.rpc.RpcException<span style="color:#719e07">;</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">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">XxxExporterListener</span> <span style="color:#268bd2">implements</span> ExporterListener <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> <span style="color:#dc322f">void</span> <span style="color:#268bd2">exported</span><span style="color:#719e07">(</span>Exporter<span style="color:#719e07">&lt;?&gt;</span> exporter<span style="color:#719e07">)</span> <span style="color:#268bd2">throws</span> RpcException <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> <span style="color:#dc322f">void</span> <span style="color:#268bd2">unexported</span><span style="color:#719e07">(</span>Exporter<span style="color:#719e07">&lt;?&gt;</span> exporter<span style="color:#719e07">)</span> <span style="color:#268bd2">throws</span> RpcException <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">}</span> |
| </span></span></code></pre></div><p>META-INF/dubbo/org.apache.dubbo.rpc.ExporterListener:</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>xxx<span style="color:#719e07">=</span><span style="color:#2aa198">com.xxx.XxxExporterListener</span> |
| </span></span></code></pre></div></description></item><item><title>Docsv2.7: 集群扩展</title><link>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/cluster/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/cluster/</guid><description> |
| <h2 id="扩展说明">扩展说明</h2> |
| <p>当有多个服务提供方时,将多个服务提供方组织成一个集群,并伪装成一个提供方。</p> |
| <h2 id="扩展接口">扩展接口</h2> |
| <p><code>org.apache.dubbo.rpc.cluster.Cluster</code></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-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:protocol</span> cluster=<span style="color:#2aa198">&#34;xxx&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">&lt;!-- 缺省值配置,如果&lt;dubbo:protocol&gt;没有配置cluster时,使用此配置 --&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:provider</span> cluster=<span style="color:#2aa198">&#34;xxx&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div><h2 id="已知扩展">已知扩展</h2> |
| <ul> |
| <li><code>org.apache.dubbo.rpc.cluster.support.wrapper.MockClusterWrapper</code></li> |
| <li><code>org.apache.dubbo.rpc.cluster.support.FailoverCluster</code></li> |
| <li><code>org.apache.dubbo.rpc.cluster.support.FailfastCluster</code></li> |
| <li><code>org.apache.dubbo.rpc.cluster.support.FailsafeCluster</code></li> |
| <li><code>org.apache.dubbo.rpc.cluster.support.FailbackCluster</code></li> |
| <li><code>org.apache.dubbo.rpc.cluster.support.ForkingCluster</code></li> |
| <li><code>org.apache.dubbo.rpc.cluster.support.AvailableCluster</code></li> |
| <li><code>org.apache.dubbo.rpc.cluster.support.MergeableCluster</code></li> |
| <li><code>org.apache.dubbo.rpc.cluster.support.BroadcastCluster</code></li> |
| <li><code>org.apache.dubbo.rpc.cluster.support.registry.ZoneAwareCluster</code></li> |
| </ul> |
| <h2 id="扩展示例">扩展示例</h2> |
| <p>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-fallback" data-lang="fallback"><span style="display:flex;"><span>src |
| </span></span><span style="display:flex;"><span> |-main |
| </span></span><span style="display:flex;"><span> |-java |
| </span></span><span style="display:flex;"><span> |-com |
| </span></span><span style="display:flex;"><span> |-xxx |
| </span></span><span style="display:flex;"><span> |-XxxCluster.java (实现Cluster接口) |
| </span></span><span style="display:flex;"><span> |-resources |
| </span></span><span style="display:flex;"><span> |-META-INF |
| </span></span><span style="display:flex;"><span> |-dubbo |
| </span></span><span style="display:flex;"><span> |-org.apache.dubbo.rpc.cluster.Cluster (纯文本文件,内容为:xxx=com.xxx.XxxCluster) |
| </span></span></code></pre></div><p>XxxCluster.java:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#719e07">package</span> com.xxx<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.rpc.cluster.Cluster<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.rpc.cluster.support.AbstractClusterInvoker<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.rpc.cluster.Directory<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.rpc.cluster.LoadBalance<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.rpc.Invoker<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.rpc.Invocation<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.rpc.Result<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.rpc.RpcException<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">XxxCluster</span> <span style="color:#268bd2">implements</span> Cluster <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> <span style="color:#719e07">&lt;</span>T<span style="color:#719e07">&gt;</span> Invoker<span style="color:#719e07">&lt;</span>T<span style="color:#719e07">&gt;</span> <span style="color:#268bd2">merge</span><span style="color:#719e07">(</span>Directory<span style="color:#719e07">&lt;</span>T<span style="color:#719e07">&gt;</span> directory<span style="color:#719e07">)</span> <span style="color:#268bd2">throws</span> RpcException <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">return</span> <span style="color:#719e07">new</span> AbstractClusterInvoker<span style="color:#719e07">&lt;</span>T<span style="color:#719e07">&gt;(</span>directory<span style="color:#719e07">)</span> <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> Result <span style="color:#268bd2">doInvoke</span><span style="color:#719e07">(</span>Invocation invocation<span style="color:#719e07">,</span> List<span style="color:#719e07">&lt;</span>Invoker<span style="color:#719e07">&lt;</span>T<span style="color:#719e07">&gt;&gt;</span> invokers<span style="color:#719e07">,</span> LoadBalance loadbalance<span style="color:#719e07">)</span> <span style="color:#268bd2">throws</span> RpcException <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <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><p>META-INF/dubbo/org.apache.dubbo.rpc.cluster.Cluster:</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>xxx<span style="color:#719e07">=</span><span style="color:#2aa198">com.xxx.XxxCluster</span> |
| </span></span></code></pre></div></description></item><item><title>Docsv2.7: 路由扩展</title><link>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/router/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/router/</guid><description> |
| <h2 id="扩展说明">扩展说明</h2> |
| <p>从多个服务提供方中选择一个进行调用。</p> |
| <h2 id="扩展接口">扩展接口</h2> |
| <ul> |
| <li><code>org.apache.dubbo.rpc.cluster.RouterFactory</code></li> |
| <li><code>org.apache.dubbo.rpc.cluster.Router</code></li> |
| </ul> |
| <h2 id="已知扩展">已知扩展</h2> |
| <ul> |
| <li><code>org.apache.dubbo.rpc.cluster.router.ScriptRouterFactory</code></li> |
| <li><code>org.apache.dubbo.rpc.cluster.router.FileRouterFactory</code></li> |
| <li><code>org.apache.dubbo.rpc.cluster.router.condition.config.AppRouterFactory</code></li> |
| <li><code>org.apache.dubbo.rpc.cluster.CacheableRouterFactory</code></li> |
| <li><code>org.apache.dubbo.rpc.cluster.router.condition.ConditionRouterFactory</code></li> |
| <li><code>org.apache.dubbo.rpc.cluster.router.mock.MockRouterFactory</code></li> |
| <li><code>org.apache.dubbo.rpc.cluster.router.condition.config.ServiceRouterFactory</code></li> |
| <li><code>org.apache.dubbo.rpc.cluster.router.tag.TagRouterFactory</code></li> |
| </ul> |
| <h2 id="扩展示例">扩展示例</h2> |
| <p>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-fallback" data-lang="fallback"><span style="display:flex;"><span>src |
| </span></span><span style="display:flex;"><span> |-main |
| </span></span><span style="display:flex;"><span> |-java |
| </span></span><span style="display:flex;"><span> |-com |
| </span></span><span style="display:flex;"><span> |-xxx |
| </span></span><span style="display:flex;"><span> |-XxxRouterFactory.java (实现RouterFactory接口) |
| </span></span><span style="display:flex;"><span> |-resources |
| </span></span><span style="display:flex;"><span> |-META-INF |
| </span></span><span style="display:flex;"><span> |-dubbo |
| </span></span><span style="display:flex;"><span> |-org.apache.dubbo.rpc.cluster.RouterFactory (纯文本文件,内容为:xxx=com.xxx.XxxRouterFactory) |
| </span></span></code></pre></div><p>XxxRouterFactory.java:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#719e07">package</span> com.xxx<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.rpc.cluster.RouterFactory<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.rpc.Invoker<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.rpc.Invocation<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.rpc.RpcException<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">XxxRouterFactory</span> <span style="color:#268bd2">implements</span> RouterFactory <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> Router <span style="color:#268bd2">getRouter</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:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">}</span> |
| </span></span></code></pre></div><p>META-INF/dubbo/org.apache.dubbo.rpc.cluster.RouterFactory:</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>xxx<span style="color:#719e07">=</span><span style="color:#2aa198">com.xxx.XxxRouterFactory</span> |
| </span></span></code></pre></div></description></item><item><title>Docsv2.7: 负载均衡扩展</title><link>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/load-balance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/load-balance/</guid><description> |
| <h2 id="扩展说明">扩展说明</h2> |
| <p>从多个服务提供方中选择一个进行调用</p> |
| <h2 id="扩展接口">扩展接口</h2> |
| <p><code>org.apache.dubbo.rpc.cluster.LoadBalance</code></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-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:protocol</span> loadbalance=<span style="color:#2aa198">&#34;xxx&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">&lt;!-- 缺省值设置,当&lt;dubbo:protocol&gt;没有配置loadbalance时,使用此配置 --&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:provider</span> loadbalance=<span style="color:#2aa198">&#34;xxx&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div><h2 id="已知扩展">已知扩展</h2> |
| <ul> |
| <li><code>org.apache.dubbo.rpc.cluster.loadbalance.RandomLoadBalance</code></li> |
| <li><code>org.apache.dubbo.rpc.cluster.loadbalance.RoundRobinLoadBalance</code></li> |
| <li><code>org.apache.dubbo.rpc.cluster.loadbalance.LeastActiveLoadBalance</code></li> |
| <li><code>org.apache.dubbo.rpc.cluster.loadbalance.ConsistentHashLoadBalance</code></li> |
| <li><code>org.apache.dubbo.rpc.cluster.loadbalance.ShortestResponseLoadBalance</code></li> |
| </ul> |
| <h2 id="扩展示例">扩展示例</h2> |
| <p>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-fallback" data-lang="fallback"><span style="display:flex;"><span>src |
| </span></span><span style="display:flex;"><span> |-main |
| </span></span><span style="display:flex;"><span> |-java |
| </span></span><span style="display:flex;"><span> |-com |
| </span></span><span style="display:flex;"><span> |-xxx |
| </span></span><span style="display:flex;"><span> |-XxxLoadBalance.java (实现LoadBalance接口) |
| </span></span><span style="display:flex;"><span> |-resources |
| </span></span><span style="display:flex;"><span> |-META-INF |
| </span></span><span style="display:flex;"><span> |-dubbo |
| </span></span><span style="display:flex;"><span> |-org.apache.dubbo.rpc.cluster.LoadBalance (纯文本文件,内容为:xxx=com.xxx.XxxLoadBalance) |
| </span></span></code></pre></div><p>XxxLoadBalance.java:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#719e07">package</span> com.xxx<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.rpc.cluster.LoadBalance<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.rpc.Invoker<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.rpc.Invocation<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.rpc.RpcException<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">XxxLoadBalance</span> <span style="color:#268bd2">implements</span> LoadBalance <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> <span style="color:#719e07">&lt;</span>T<span style="color:#719e07">&gt;</span> Invoker<span style="color:#719e07">&lt;</span>T<span style="color:#719e07">&gt;</span> <span style="color:#268bd2">select</span><span style="color:#719e07">(</span>List<span style="color:#719e07">&lt;</span>Invoker<span style="color:#719e07">&lt;</span>T<span style="color:#719e07">&gt;&gt;</span> invokers<span style="color:#719e07">,</span> Invocation invocation<span style="color:#719e07">)</span> <span style="color:#268bd2">throws</span> RpcException <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">}</span> |
| </span></span></code></pre></div><p>META-INF/dubbo/org.apache.dubbo.rpc.cluster.LoadBalance:</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>xxx<span style="color:#719e07">=</span><span style="color:#2aa198">com.xxx.XxxLoadBalance</span> |
| </span></span></code></pre></div></description></item><item><title>Docsv2.7: 合并结果扩展</title><link>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/merger/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/merger/</guid><description> |
| <h2 id="扩展说明">扩展说明</h2> |
| <p>合并返回结果,用于分组聚合。</p> |
| <h2 id="扩展接口">扩展接口</h2> |
| <p><code>org.apache.dubbo.rpc.cluster.Merger</code></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-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:method</span> merger=<span style="color:#2aa198">&#34;xxx&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div><h2 id="已知扩展">已知扩展</h2> |
| <ul> |
| <li><code>org.apache.dubbo.rpc.cluster.merger.ArrayMerger</code></li> |
| <li><code>org.apache.dubbo.rpc.cluster.merger.ListMerger</code></li> |
| <li><code>org.apache.dubbo.rpc.cluster.merger.SetMerger</code></li> |
| <li><code>org.apache.dubbo.rpc.cluster.merger.MapMerger</code></li> |
| <li><code>org.apache.dubbo.rpc.cluster.merger.ByteArrayMerger</code></li> |
| <li><code>org.apache.dubbo.rpc.cluster.merger.CharArrayMerger</code></li> |
| <li><code>org.apache.dubbo.rpc.cluster.merger.ShortArrayMerger</code></li> |
| <li><code>org.apache.dubbo.rpc.cluster.merger.IntArrayMerger</code></li> |
| <li><code>org.apache.dubbo.rpc.cluster.merger.LongArrayMerger</code></li> |
| <li><code>org.apache.dubbo.rpc.cluster.merger.FloatArrayMerger</code></li> |
| <li><code>org.apache.dubbo.rpc.cluster.merger.DoubleArrayMerger</code></li> |
| <li><code>org.apache.dubbo.rpc.cluster.merger.BooleanArrayMerger</code></li> |
| </ul> |
| <h2 id="扩展示例">扩展示例</h2> |
| <p>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-fallback" data-lang="fallback"><span style="display:flex;"><span>src |
| </span></span><span style="display:flex;"><span> |-main |
| </span></span><span style="display:flex;"><span> |-java |
| </span></span><span style="display:flex;"><span> |-com |
| </span></span><span style="display:flex;"><span> |-xxx |
| </span></span><span style="display:flex;"><span> |-XxxMerger.java (实现Merger接口) |
| </span></span><span style="display:flex;"><span> |-resources |
| </span></span><span style="display:flex;"><span> |-META-INF |
| </span></span><span style="display:flex;"><span> |-dubbo |
| </span></span><span style="display:flex;"><span> |-org.apache.dubbo.rpc.cluster.Merger (纯文本文件,内容为:xxx=com.xxx.XxxMerger) |
| </span></span></code></pre></div><p>XxxMerger.java:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#719e07">package</span> com.xxx<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.rpc.cluster.Merger<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">XxxMerger</span><span style="color:#719e07">&lt;</span>T<span style="color:#719e07">&gt;</span> <span style="color:#268bd2">implements</span> Merger<span style="color:#719e07">&lt;</span>T<span style="color:#719e07">&gt;</span> <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> T <span style="color:#268bd2">merge</span><span style="color:#719e07">(</span>T<span style="color:#719e07">...</span> results<span style="color:#719e07">)</span> <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">}</span> |
| </span></span></code></pre></div><p>META-INF/dubbo/org.apache.dubbo.rpc.cluster.Merger:</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>xxx<span style="color:#719e07">=</span><span style="color:#2aa198">com.xxx.XxxMerger</span> |
| </span></span></code></pre></div></description></item><item><title>Docsv2.7: 注册中心扩展</title><link>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/registry/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/registry/</guid><description> |
| <h2 id="扩展说明">扩展说明</h2> |
| <p>负责服务的注册与发现。</p> |
| <h2 id="扩展接口">扩展接口</h2> |
| <ul> |
| <li><code>org.apache.dubbo.registry.RegistryFactory</code></li> |
| <li><code>org.apache.dubbo.registry.Registry</code></li> |
| </ul> |
| <h2 id="扩展配置">扩展配置</h2> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#586e75">&lt;!-- 定义注册中心 --&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:registry</span> id=<span style="color:#2aa198">&#34;xxx1&#34;</span> address=<span style="color:#2aa198">&#34;xxx://ip:port&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">&lt;!-- 引用注册中心,如果没有配置registry属性,将在ApplicationContext中自动扫描registry配置 --&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:service</span> registry=<span style="color:#2aa198">&#34;xxx1&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">&lt;!-- 引用注册中心缺省值,当&lt;dubbo:service&gt;没有配置registry属性时,使用此配置 --&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:provider</span> registry=<span style="color:#2aa198">&#34;xxx1&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div><h2 id="扩展契约">扩展契约</h2> |
| <p>RegistryFactory.java:</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">public</span> <span style="color:#268bd2">interface</span> <span style="color:#268bd2">RegistryFactory</span> <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">/** |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * 连接注册中心. |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * 连接注册中心需处理契约:&lt;br&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * 1. 当设置check=false时表示不检查连接,否则在连接不上时抛出异常。&lt;br&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * 2. 支持URL上的username:password权限认证。&lt;br&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * 3. 支持backup=10.20.153.10备选注册中心集群地址。&lt;br&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * 4. 支持file=registry.cache本地磁盘文件缓存。&lt;br&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * 5. 支持timeout=1000请求超时设置。&lt;br&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * 6. 支持session=60000会话超时或过期设置。&lt;br&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * @param url 注册中心地址,不允许为空 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * @return 注册中心引用,总不返回空 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> */</span> |
| </span></span><span style="display:flex;"><span> Registry <span style="color:#268bd2">getRegistry</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><p>RegistryService.java:</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">public</span> <span style="color:#268bd2">interface</span> <span style="color:#268bd2">RegistryService</span> <span style="color:#719e07">{</span> <span style="color:#586e75">// Registry extends RegistryService |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#586e75">/** |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * 注册服务. |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * 注册需处理契约:&lt;br&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * 1. 当URL设置了check=false时,注册失败后不报错,在后台定时重试,否则抛出异常。&lt;br&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * 2. 当URL设置了dynamic=false参数,则需持久存储,否则,当注册者出现断电等情况异常退出时,需自动删除。&lt;br&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * 3. 当URL设置了category=overrides时,表示分类存储,缺省类别为providers,可按分类部分通知数据。&lt;br&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * 4. 当注册中心重启,网络抖动,不能丢失数据,包括断线自动删除数据。&lt;br&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * 5. 允许URI相同但参数不同的URL并存,不能覆盖。&lt;br&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * @param url 注册信息,不允许为空,如:dubbo://10.20.153.10/com.alibaba.foo.BarService?version=1.0.0&amp;application=kylin |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> */</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#dc322f">void</span> <span style="color:#268bd2">register</span><span style="color:#719e07">(</span>URL url<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></span></span><span style="display:flex;"><span><span style="color:#586e75"> * |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * 取消注册需处理契约:&lt;br&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * 1. 如果是dynamic=false的持久存储数据,找不到注册数据,则抛IllegalStateException,否则忽略。&lt;br&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * 2. 按全URL匹配取消注册。&lt;br&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * @param url 注册信息,不允许为空,如:dubbo://10.20.153.10/com.alibaba.foo.BarService?version=1.0.0&amp;application=kylin |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> */</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#dc322f">void</span> <span style="color:#268bd2">unregister</span><span style="color:#719e07">(</span>URL url<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></span></span><span style="display:flex;"><span><span style="color:#586e75"> * |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * 订阅需处理契约:&lt;br&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * 1. 当URL设置了check=false时,订阅失败后不报错,在后台定时重试。&lt;br&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * 2. 当URL设置了category=overrides,只通知指定分类的数据,多个分类用逗号分隔,并允许星号通配,表示订阅所有分类数据。&lt;br&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * 3. 允许以interface,group,version,classifier作为条件查询,如:interface=com.alibaba.foo.BarService&amp;version=1.0.0&lt;br&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * 4. 并且查询条件允许星号通配,订阅所有接口的所有分组的所有版本,或:interface=*&amp;group=*&amp;version=*&amp;classifier=*&lt;br&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * 5. 当注册中心重启,网络抖动,需自动恢复订阅请求。&lt;br&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * 6. 允许URI相同但参数不同的URL并存,不能覆盖。&lt;br&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * 7. 必须阻塞订阅过程,等第一次通知完后再返回。&lt;br&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * @param url 订阅条件,不允许为空,如:consumer://10.20.153.10/com.alibaba.foo.BarService?version=1.0.0&amp;application=kylin |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * @param listener 变更事件监听器,不允许为空 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> */</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#dc322f">void</span> <span style="color:#268bd2">subscribe</span><span style="color:#719e07">(</span>URL url<span style="color:#719e07">,</span> NotifyListener listener<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></span></span><span style="display:flex;"><span><span style="color:#586e75"> * |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * 取消订阅需处理契约:&lt;br&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * 1. 如果没有订阅,直接忽略。&lt;br&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * 2. 按全URL匹配取消订阅。&lt;br&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * @param url 订阅条件,不允许为空,如:consumer://10.20.153.10/com.alibaba.foo.BarService?version=1.0.0&amp;application=kylin |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * @param listener 变更事件监听器,不允许为空 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> */</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#dc322f">void</span> <span style="color:#268bd2">unsubscribe</span><span style="color:#719e07">(</span>URL url<span style="color:#719e07">,</span> NotifyListener listener<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></span></span><span style="display:flex;"><span><span style="color:#586e75"> * |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * @see org.apache.dubbo.registry.NotifyListener#notify(List) |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * @param url 查询条件,不允许为空,如:consumer://10.20.153.10/com.alibaba.foo.BarService?version=1.0.0&amp;application=kylin |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * @return 已注册信息列表,可能为空,含义同{@link org.apache.dubbo.registry.NotifyListener#notify(List&lt;URL&gt;)}的参数。 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> */</span> |
| </span></span><span style="display:flex;"><span> List<span style="color:#719e07">&lt;</span>URL<span style="color:#719e07">&gt;</span> <span style="color:#268bd2">lookup</span><span style="color:#719e07">(</span>URL url<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><p>NotifyListener.java:</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">public</span> <span style="color:#268bd2">interface</span> <span style="color:#268bd2">NotifyListener</span> <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">/** |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * 当收到服务变更通知时触发。 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * 通知需处理契约:&lt;br&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * 1. 总是以服务接口和数据类型为维度全量通知,即不会通知一个服务的同类型的部分数据,用户不需要对比上一次通知结果。&lt;br&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * 2. 订阅时的第一次通知,必须是一个服务的所有类型数据的全量通知。&lt;br&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * 3. 中途变更时,允许不同类型的数据分开通知,比如:providers, consumers, routes, overrides,允许只通知其中一种类型,但该类型的数据必须是全量的,不是增量的。&lt;br&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * 4. 如果一种类型的数据为空,需通知一个empty协议并带category参数的标识性URL数据。&lt;br&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * 5. 通知者(即注册中心实现)需保证通知的顺序,比如:单线程推送,队列串行化,带版本对比。&lt;br&gt; |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> * @param urls 已注册信息列表,总不为空,含义同{@link org.apache.dubbo.registry.RegistryService#lookup(URL)}的返回值。 |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"> */</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#dc322f">void</span> <span style="color:#268bd2">notify</span><span style="color:#719e07">(</span>List<span style="color:#719e07">&lt;</span>URL<span style="color:#719e07">&gt;</span> urls<span style="color:#719e07">);</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">}</span> |
| </span></span></code></pre></div><h2 id="已知扩展">已知扩展</h2> |
| <p><code>org.apache.dubbo.registry.support.dubbo.DubboRegistryFactory</code></p> |
| <h2 id="扩展示例">扩展示例</h2> |
| <p>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-fallback" data-lang="fallback"><span style="display:flex;"><span>src |
| </span></span><span style="display:flex;"><span> |-main |
| </span></span><span style="display:flex;"><span> |-java |
| </span></span><span style="display:flex;"><span> |-com |
| </span></span><span style="display:flex;"><span> |-xxx |
| </span></span><span style="display:flex;"><span> |-XxxRegistryFactoryjava (实现RegistryFactory接口) |
| </span></span><span style="display:flex;"><span> |-XxxRegistry.java (实现Registry接口) |
| </span></span><span style="display:flex;"><span> |-resources |
| </span></span><span style="display:flex;"><span> |-META-INF |
| </span></span><span style="display:flex;"><span> |-dubbo |
| </span></span><span style="display:flex;"><span> |-org.apache.dubbo.registry.RegistryFactory (纯文本文件,内容为:xxx=com.xxx.XxxRegistryFactory) |
| </span></span></code></pre></div><p>XxxRegistryFactory.java:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#719e07">package</span> com.xxx<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.registry.RegistryFactory<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.registry.Registry<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.common.URL<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">XxxRegistryFactory</span> <span style="color:#268bd2">implements</span> RegistryFactory <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> Registry <span style="color:#268bd2">getRegistry</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> XxxRegistry<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><p>XxxRegistry.java:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#719e07">package</span> com.xxx<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.registry.Registry<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.registry.NotifyListener<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.common.URL<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">XxxRegistry</span> <span style="color:#268bd2">implements</span> Registry <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> <span style="color:#dc322f">void</span> <span style="color:#268bd2">register</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:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> <span style="color:#dc322f">void</span> <span style="color:#268bd2">unregister</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:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> <span style="color:#dc322f">void</span> <span style="color:#268bd2">subscribe</span><span style="color:#719e07">(</span>URL url<span style="color:#719e07">,</span> NotifyListener listener<span style="color:#719e07">)</span> <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> <span style="color:#dc322f">void</span> <span style="color:#268bd2">unsubscribe</span><span style="color:#719e07">(</span>URL url<span style="color:#719e07">,</span> NotifyListener listener<span style="color:#719e07">)</span> <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">}</span> |
| </span></span></code></pre></div><p>META-INF/dubbo/org.apache.dubbo.registry.RegistryFactory:</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>xxx<span style="color:#719e07">=</span><span style="color:#2aa198">com.xxx.XxxRegistryFactory</span> |
| </span></span></code></pre></div></description></item><item><title>Docsv2.7: 监控中心扩展</title><link>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/monitor/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/monitor/</guid><description> |
| <h2 id="扩展说明">扩展说明</h2> |
| <p>负责服务调用次和调用时间的监控。</p> |
| <h2 id="扩展接口">扩展接口</h2> |
| <ul> |
| <li><code>org.apache.dubbo.monitor.MonitorFactory</code></li> |
| <li><code>org.apache.dubbo.monitor.Monitor</code></li> |
| </ul> |
| <h2 id="扩展配置">扩展配置</h2> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#586e75">&lt;!-- 定义监控中心 --&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:monitor</span> address=<span style="color:#2aa198">&#34;xxx://ip:port&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div><h2 id="已知扩展">已知扩展</h2> |
| <p>org.apache.dubbo.monitor.support.dubbo.DubboMonitorFactory</p> |
| <h2 id="扩展示例">扩展示例</h2> |
| <p>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-fallback" data-lang="fallback"><span style="display:flex;"><span>src |
| </span></span><span style="display:flex;"><span> |-main |
| </span></span><span style="display:flex;"><span> |-java |
| </span></span><span style="display:flex;"><span> |-com |
| </span></span><span style="display:flex;"><span> |-xxx |
| </span></span><span style="display:flex;"><span> |-XxxMonitorFactoryjava (实现MonitorFactory接口) |
| </span></span><span style="display:flex;"><span> |-XxxMonitor.java (实现Monitor接口) |
| </span></span><span style="display:flex;"><span> |-resources |
| </span></span><span style="display:flex;"><span> |-META-INF |
| </span></span><span style="display:flex;"><span> |-dubbo |
| </span></span><span style="display:flex;"><span> |-org.apache.dubbo.monitor.MonitorFactory (纯文本文件,内容为:xxx=com.xxx.XxxMonitorFactory) |
| </span></span></code></pre></div><p>XxxMonitorFactory.java:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#719e07">package</span> com.xxx<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.monitor.MonitorFactory<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.monitor.Monitor<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.common.URL<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">XxxMonitorFactory</span> <span style="color:#268bd2">implements</span> MonitorFactory <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> Monitor <span style="color:#268bd2">getMonitor</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> XxxMonitor<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><p>XxxMonitor.java:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#719e07">package</span> com.xxx<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.monitor.Monitor<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">XxxMonitor</span> <span style="color:#268bd2">implements</span> Monitor <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> <span style="color:#dc322f">void</span> <span style="color:#268bd2">count</span><span style="color:#719e07">(</span>URL statistics<span style="color:#719e07">)</span> <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">}</span> |
| </span></span></code></pre></div><p>META-INF/dubbo/org.apache.dubbo.monitor.MonitorFactory:</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>xxx<span style="color:#719e07">=</span><span style="color:#2aa198">com.xxx.XxxMonitorFactory</span> |
| </span></span></code></pre></div></description></item><item><title>Docsv2.7: 扩展点加载扩展</title><link>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/extension-factory/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/extension-factory/</guid><description> |
| <h2 id="扩展说明">扩展说明</h2> |
| <p>扩展点本身的加载容器,可从不同容器加载扩展点。</p> |
| <h2 id="扩展接口">扩展接口</h2> |
| <p><code>org.apache.dubbo.common.extension.ExtensionFactory</code></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-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:application</span> compiler=<span style="color:#2aa198">&#34;jdk&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div><h2 id="已知扩展">已知扩展</h2> |
| <ul> |
| <li><code>org.apache.dubbo.common.extension.factory.SpiExtensionFactory</code></li> |
| <li><code>org.apache.dubbo.config.spring.extension.SpringExtensionFactory</code></li> |
| </ul> |
| <h2 id="扩展示例">扩展示例</h2> |
| <p>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-fallback" data-lang="fallback"><span style="display:flex;"><span>src |
| </span></span><span style="display:flex;"><span> |-main |
| </span></span><span style="display:flex;"><span> |-java |
| </span></span><span style="display:flex;"><span> |-com |
| </span></span><span style="display:flex;"><span> |-xxx |
| </span></span><span style="display:flex;"><span> |-XxxExtensionFactory.java (实现ExtensionFactory接口) |
| </span></span><span style="display:flex;"><span> |-resources |
| </span></span><span style="display:flex;"><span> |-META-INF |
| </span></span><span style="display:flex;"><span> |-dubbo |
| </span></span><span style="display:flex;"><span> |-org.apache.dubbo.common.extension.ExtensionFactory (纯文本文件,内容为:xxx=com.xxx.XxxExtensionFactory) |
| </span></span></code></pre></div><p>XxxExtensionFactory.java:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#719e07">package</span> com.xxx<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.common.extension.ExtensionFactory<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">XxxExtensionFactory</span> <span style="color:#268bd2">implements</span> ExtensionFactory <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> Object <span style="color:#268bd2">getExtension</span><span style="color:#719e07">(</span>Class<span style="color:#719e07">&lt;?&gt;</span> type<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:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">}</span> |
| </span></span></code></pre></div><p>META-INF/dubbo/org.apache.dubbo.common.extension.ExtensionFactory:</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>xxx<span style="color:#719e07">=</span><span style="color:#2aa198">com.xxx.XxxExtensionFactory</span> |
| </span></span></code></pre></div></description></item><item><title>Docsv2.7: 动态代理扩展</title><link>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/proxy-factory/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/proxy-factory/</guid><description> |
| <h2 id="扩展说明">扩展说明</h2> |
| <p>将 <code>Invoker</code> 接口转换成业务接口。</p> |
| <h2 id="扩展接口">扩展接口</h2> |
| <p><code>org.apache.dubbo.rpc.ProxyFactory</code></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-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:protocol</span> proxy=<span style="color:#2aa198">&#34;xxx&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">&lt;!-- 缺省值配置,当&lt;dubbo:protocol&gt;没有配置proxy属性时,使用此配置 --&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:provider</span> proxy=<span style="color:#2aa198">&#34;xxx&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div><h2 id="已知扩展">已知扩展</h2> |
| <ul> |
| <li><code>org.apache.dubbo.rpc.proxy.JdkProxyFactory</code></li> |
| <li><code>org.apache.dubbo.rpc.proxy.JavassistProxyFactory</code></li> |
| </ul> |
| <h2 id="扩展示例">扩展示例</h2> |
| <p>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-fallback" data-lang="fallback"><span style="display:flex;"><span>src |
| </span></span><span style="display:flex;"><span> |-main |
| </span></span><span style="display:flex;"><span> |-java |
| </span></span><span style="display:flex;"><span> |-com |
| </span></span><span style="display:flex;"><span> |-xxx |
| </span></span><span style="display:flex;"><span> |-XxxProxyFactory.java (实现ProxyFactory接口) |
| </span></span><span style="display:flex;"><span> |-resources |
| </span></span><span style="display:flex;"><span> |-META-INF |
| </span></span><span style="display:flex;"><span> |-dubbo |
| </span></span><span style="display:flex;"><span> |-org.apache.dubbo.rpc.ProxyFactory (纯文本文件,内容为:xxx=com.xxx.XxxProxyFactory) |
| </span></span></code></pre></div><p>XxxProxyFactory.java:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#719e07">package</span> com.xxx<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.rpc.ProxyFactory<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.rpc.Invoker<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.rpc.RpcException<span style="color:#719e07">;</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">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">XxxProxyFactory</span> <span style="color:#268bd2">implements</span> ProxyFactory <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> <span style="color:#719e07">&lt;</span>T<span style="color:#719e07">&gt;</span> T <span style="color:#268bd2">getProxy</span><span style="color:#719e07">(</span>Invoker<span style="color:#719e07">&lt;</span>T<span style="color:#719e07">&gt;</span> invoker<span style="color:#719e07">)</span> <span style="color:#268bd2">throws</span> RpcException <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> <span style="color:#719e07">&lt;</span>T<span style="color:#719e07">&gt;</span> Invoker<span style="color:#719e07">&lt;</span>T<span style="color:#719e07">&gt;</span> <span style="color:#268bd2">getInvoker</span><span style="color:#719e07">(</span>T proxy<span style="color:#719e07">,</span> Class<span style="color:#719e07">&lt;</span>T<span style="color:#719e07">&gt;</span> type<span style="color:#719e07">,</span> URL url<span style="color:#719e07">)</span> <span style="color:#268bd2">throws</span> RpcException <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">}</span> |
| </span></span></code></pre></div><p>META-INF/dubbo/org.apache.dubbo.rpc.ProxyFactory:</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>xxx<span style="color:#719e07">=</span><span style="color:#2aa198">com.xxx.XxxProxyFactory</span> |
| </span></span></code></pre></div></description></item><item><title>Docsv2.7: 编译器扩展</title><link>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/compiler/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/compiler/</guid><description> |
| <h2 id="扩展说明">扩展说明</h2> |
| <p>Java 代码编译器,用于动态生成字节码,加速调用。</p> |
| <h2 id="扩展接口">扩展接口</h2> |
| <p><code>org.apache.dubbo.common.compiler.Compiler</code></p> |
| <h2 id="扩展配置">扩展配置</h2> |
| <p>自动加载</p> |
| <h2 id="已知扩展">已知扩展</h2> |
| <ul> |
| <li><code>org.apache.dubbo.common.compiler.support.JdkCompiler</code></li> |
| <li><code>org.apache.dubbo.common.compiler.support.JavassistCompiler</code></li> |
| </ul> |
| <h2 id="扩展示例">扩展示例</h2> |
| <p>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-fallback" data-lang="fallback"><span style="display:flex;"><span>src |
| </span></span><span style="display:flex;"><span> |-main |
| </span></span><span style="display:flex;"><span> |-java |
| </span></span><span style="display:flex;"><span> |-com |
| </span></span><span style="display:flex;"><span> |-xxx |
| </span></span><span style="display:flex;"><span> |-XxxCompiler.java (实现Compiler接口) |
| </span></span><span style="display:flex;"><span> |-resources |
| </span></span><span style="display:flex;"><span> |-META-INF |
| </span></span><span style="display:flex;"><span> |-dubbo |
| </span></span><span style="display:flex;"><span> |-org.apache.dubbo.common.compiler.Compiler (纯文本文件,内容为:xxx=com.xxx.XxxCompiler) |
| </span></span></code></pre></div><p>XxxCompiler.java:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#719e07">package</span> com.xxx<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.common.compiler.Compiler<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">XxxCompiler</span> <span style="color:#268bd2">implements</span> Compiler <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> Object <span style="color:#268bd2">getExtension</span><span style="color:#719e07">(</span>Class<span style="color:#719e07">&lt;?&gt;</span> type<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:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">}</span> |
| </span></span></code></pre></div><p>META-INF/dubbo/org.apache.dubbo.common.compiler.Compiler:</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>xxx<span style="color:#719e07">=</span><span style="color:#2aa198">com.xxx.XxxCompiler</span> |
| </span></span></code></pre></div></description></item><item><title>Docsv2.7: 配置中心扩展</title><link>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/config-center/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/config-center/</guid><description> |
| <h2 id="设计目的">设计目的</h2> |
| <p>配置中心的核心功能是作为 Key-Value 存储,Dubbo 框架告知配置中心其关心的 key,配置中心返回该key对应的 value 值。</p> |
| <p>按照应用场景划分,配置中心在 Dubbo 框架中主要承担以下职责:</p> |
| <ul> |
| <li>作为外部化配置中心,即存储 dubbo.properties 配置文件,此时,key 值通常为文件名如 dubbo.properties,value 则为配置文件内容。</li> |
| <li>存储单个配置项,如各种开关项、常量值等。</li> |
| <li>存储服务治理规则,此时key通常按照 &ldquo;服务名+规则类型&rdquo; 的格式来组织,而 value 则为具体的治理规则。</li> |
| </ul> |
| <p>为了进一步实现对 key-value 的分组管理,Dubbo 的配置中心还加入了 namespace、group 的概念,这些概念在很多专业的第三方配置中心中都有体现,通常情况下,namespace 用来隔离不同的租户,group 用来对同一租户的key集合做分组。</p> |
| <p>当前,Dubbo 配置中心实现了对 Zookeeper、Nacos、Etcd、Consul、Apollo 的对接,接下来我们具体看一下 Dubbo 抽象的配置中心是怎么映射到具体的第三方实现中的。</p> |
| <h2 id="扩展接口">扩展接口</h2> |
| <ul> |
| <li><code>org.apache.dubbo.configcenter.DynamicConfigurationFactory</code></li> |
| <li><code>org.apache.dubbo.configcenter.DynamicConfiguration</code></li> |
| </ul> |
| <h2 id="已知扩展">已知扩展</h2> |
| <ul> |
| <li><code>org.apache.dubbo.configcenter.support.zookeeper.ZookeeperDynamicConfigurationFactory</code></li> |
| <li><code>org.apache.dubbo.configcenter.support.nacos.NacosDynamicConfigurationFactory</code></li> |
| <li><code>org.apache.dubbo.configcenter.support.etcd.EtcdDynamicConfigurationFactory</code></li> |
| <li><code>org.apache.dubbo.configcenter.consul.ConsulDynamicConfigurationFactory</code></li> |
| <li><code>org.apache.dubbo.configcenter.support.apollo.ApolloDynamicConfigurationFactory</code></li> |
| <li><code>org.apache.dubbo.common.config.configcenter.file.FileSystemDynamicConfigurationFactory</code></li> |
| </ul> |
| <h2 id="实现原理">实现原理</h2> |
| <h3 id="zookeeper">Zookeeper</h3> |
| <p>zookeeper提供了一个树状的存储模型,其实现原理如下:</p> |
| <p><img src="https://dubbo.apache.org/imgs/dev/configcenter_zk_model.jpg" alt="image-20190127225608553"></p> |
| <p>namespace, group, key 等分别对应不同层级的 ZNode 节点,而 value 则作为根 ZNode 节点的值存储。</p> |
| <ol> |
| <li> |
| <p>外部化配置中心 dubbo.properties</p> |
| <p><img src="https://dubbo.apache.org/imgs/dev/configcenter_zk_properties.jpg" alt="image-20190127225608553"></p> |
| <p>上图展示了两个不同作用域的 dubbo.properties 文件在 zookeeper 中的存储结构:</p> |
| <ul> |
| <li>命名空间namespace都为:dubbo</li> |
| <li>分组 group:全局级别为 dubbo,所有应用共享;应用级别为应用名 demo-provider,只对该应用生效</li> |
| <li>key:dubbo.properties</li> |
| </ul> |
| </li> |
| <li> |
| <p>单个配置项</p> |
| <p><img src="https://dubbo.apache.org/imgs/dev/configcenter_zk_singleitem.jpg" alt="image-20190127225608553"></p> |
| <p>设置优雅停机事件为15000:</p> |
| <ul> |
| <li>命名空间 namespace:dubbo</li> |
| <li>分组 group:dubbo</li> |
| <li>key:dubbo.service.shutdown.wait</li> |
| <li>value:15000</li> |
| </ul> |
| </li> |
| <li> |
| <p>服务治理规则</p> |
| <p><img src="https://dubbo.apache.org/imgs/dev/configcenter_zk_rule.jpg" alt="image-20190127225608553"></p> |
| <p>上图展示了一条应用级别的条件路由规则:</p> |
| <ul> |
| <li>命名空间 namespace:dubbo</li> |
| <li>分组 group:dubbo</li> |
| <li>key:governance-conditionrouter-consumer.condition-router,其中 governance-conditionrouter-consumer 为应用名,condition-router 代表条件路由</li> |
| </ul> |
| <blockquote> |
| <p>注意:</p> |
| <p>Dubbo同时支持应用、服务两种粒度的服务治理规则,对于这两种粒度,其key取值规则如下:</p> |
| <ul> |
| <li>应用粒度 {应用名 + 规则后缀}。如: <code>demo-application.configurators</code>、<code>demo-application.tag-router</code>等</li> |
| <li>服务粒度 {服务接口名:[服务版本]:[服务分组] + 规则后缀},其中服务版本、服务分组是可选的,如果它们有配置则在key中体现,没被配置则用&quot;:&ldquo;占位。如 |
| <code>org.apache.dubbo.demo.DemoService::.configurators</code>、<code>org.apache.dubbo.demo.DemoService:1.0.0:group1.configurators</code></li> |
| </ul> |
| </blockquote> |
| </li> |
| </ol> |
| <h3 id="etcd--consul">Etcd &amp; Consul</h3> |
| <p>Etcd 和 Consul 本质上也是一种类似 zookeeper 的树状存储结构,实现请参考 zookeeper。</p> |
| <h3 id="nacos">Nacos</h3> |
| <p>Nacos 作为一个专业的第三方配置中心,拥有专门为配置中心设计的存储结构,包括内置的 namespace、group、dataid 等概念。并且这几个概念基本上与 Dubbo 框架抽象的配置中心是一一对应的。</p> |
| <p>与 Zookeeper 实现的对应关系如下:</p> |
| <p><img src="https://dubbo.apache.org/imgs/dev/configcenter_nacos_model.jpg" alt="image-20190127225608553"></p> |
| <p>参考上文关于 zookeeper 实现中描述的示例,这里的 dataid 可能为:</p> |
| <ul> |
| <li>外部化配置中心:dubbo.properties</li> |
| <li>单个配置项:dubbo.service.shutdown.wait</li> |
| <li>服务治理规则:org.apache.dubbo.demo.DemoService:1.0.0:group1.configurators</li> |
| </ul> |
| <h3 id="apollo">Apollo</h3> |
| <p>Apollo 与 Nacos 类似,请参考动态配置中心使用文档中关于 Apollo 部分的描述。</p></description></item><item><title>Docsv2.7: 消息派发扩展</title><link>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/dispatcher/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/dispatcher/</guid><description> |
| <h2 id="扩展说明">扩展说明</h2> |
| <p>通道信息派发器,用于指定线程池模型。</p> |
| <h2 id="扩展接口">扩展接口</h2> |
| <p><code>org.apache.dubbo.remoting.Dispatcher</code></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-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:protocol</span> dispatcher=<span style="color:#2aa198">&#34;xxx&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">&lt;!-- 缺省值设置,当&lt;dubbo:protocol&gt;没有配置dispatcher属性时,使用此配置 --&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:provider</span> dispatcher=<span style="color:#2aa198">&#34;xxx&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div><h2 id="已知扩展">已知扩展</h2> |
| <ul> |
| <li><code>org.apache.dubbo.remoting.transport.dispatcher.all.AllDispatcher</code></li> |
| <li><code>org.apache.dubbo.remoting.transport.dispatcher.direct.DirectDispatcher</code></li> |
| <li><code>org.apache.dubbo.remoting.transport.dispatcher.message.MessageOnlyDispatcher</code></li> |
| <li><code>org.apache.dubbo.remoting.transport.dispatcher.execution.ExecutionDispatcher</code></li> |
| <li><code>org.apache.dubbo.remoting.transport.dispatcher.connection.ConnectionOrderedDispatcher</code></li> |
| </ul> |
| <h2 id="扩展示例">扩展示例</h2> |
| <p>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-fallback" data-lang="fallback"><span style="display:flex;"><span>src |
| </span></span><span style="display:flex;"><span> |-main |
| </span></span><span style="display:flex;"><span> |-java |
| </span></span><span style="display:flex;"><span> |-com |
| </span></span><span style="display:flex;"><span> |-xxx |
| </span></span><span style="display:flex;"><span> |-XxxDispatcher.java (实现Dispatcher接口) |
| </span></span><span style="display:flex;"><span> |-resources |
| </span></span><span style="display:flex;"><span> |-META-INF |
| </span></span><span style="display:flex;"><span> |-dubbo |
| </span></span><span style="display:flex;"><span> |-org.apache.dubbo.remoting.Dispatcher (纯文本文件,内容为:xxx=com.xxx.XxxDispatcher) |
| </span></span></code></pre></div><p>XxxDispatcher.java:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#719e07">package</span> com.xxx<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.remoting.Dispatcher<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">XxxDispatcher</span> <span style="color:#268bd2">implements</span> Dispatcher <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> Group <span style="color:#268bd2">lookup</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:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">}</span> |
| </span></span></code></pre></div><p>META-INF/dubbo/org.apache.dubbo.remoting.Dispatcher:</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>xxx<span style="color:#719e07">=</span><span style="color:#2aa198">com.xxx.XxxDispatcher</span> |
| </span></span></code></pre></div></description></item><item><title>Docsv2.7: 线程池扩展</title><link>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/threadpool/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/threadpool/</guid><description> |
| <h2 id="扩展说明">扩展说明</h2> |
| <p>服务提供方线程池实现策略,当服务器收到一个请求时,需要在线程池中创建一个线程去执行服务提供方业务逻辑。</p> |
| <h2 id="扩展接口">扩展接口</h2> |
| <p><code>org.apache.dubbo.common.threadpool.ThreadPool</code></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-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:protocol</span> threadpool=<span style="color:#2aa198">&#34;xxx&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">&lt;!-- 缺省值设置,当&lt;dubbo:protocol&gt;没有配置threadpool时,使用此配置 --&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:provider</span> threadpool=<span style="color:#2aa198">&#34;xxx&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div><h2 id="已知扩展">已知扩展</h2> |
| <ul> |
| <li><code>org.apache.dubbo.common.threadpool.FixedThreadPool</code></li> |
| <li><code>org.apache.dubbo.common.threadpool.CachedThreadPool</code></li> |
| </ul> |
| <h2 id="扩展示例">扩展示例</h2> |
| <p>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-fallback" data-lang="fallback"><span style="display:flex;"><span>src |
| </span></span><span style="display:flex;"><span> |-main |
| </span></span><span style="display:flex;"><span> |-java |
| </span></span><span style="display:flex;"><span> |-com |
| </span></span><span style="display:flex;"><span> |-xxx |
| </span></span><span style="display:flex;"><span> |-XxxThreadPool.java (实现ThreadPool接口) |
| </span></span><span style="display:flex;"><span> |-resources |
| </span></span><span style="display:flex;"><span> |-META-INF |
| </span></span><span style="display:flex;"><span> |-dubbo |
| </span></span><span style="display:flex;"><span> |-org.apache.dubbo.common.threadpool.ThreadPool (纯文本文件,内容为:xxx=com.xxx.XxxThreadPool) |
| </span></span></code></pre></div><p>XxxThreadPool.java:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#719e07">package</span> com.xxx<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.common.threadpool.ThreadPool<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> java.util.concurrent.Executor<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">XxxThreadPool</span> <span style="color:#268bd2">implements</span> ThreadPool <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> Executor <span style="color:#268bd2">getExecutor</span><span style="color:#719e07">()</span> <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">}</span> |
| </span></span></code></pre></div><p>META-INF/dubbo/org.apache.dubbo.common.threadpool.ThreadPool:</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>xxx<span style="color:#719e07">=</span><span style="color:#2aa198">com.xxx.XxxThreadPool</span> |
| </span></span></code></pre></div></description></item><item><title>Docsv2.7: 序列化扩展</title><link>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/serialize/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/serialize/</guid><description> |
| <h2 id="扩展说明">扩展说明</h2> |
| <p>将对象转成字节流,用于网络传输,以及将字节流转为对象,用于在收到字节流数据后还原成对象。</p> |
| <h2 id="扩展接口">扩展接口</h2> |
| <ul> |
| <li><code>org.apache.dubbo.common.serialize.Serialization</code></li> |
| <li><code>org.apache.dubbo.common.serialize.ObjectInput</code></li> |
| <li><code>org.apache.dubbo.common.serialize.ObjectOutput</code></li> |
| </ul> |
| <h2 id="扩展配置">扩展配置</h2> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#586e75">&lt;!-- 协议的序列化方式 --&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:protocol</span> serialization=<span style="color:#2aa198">&#34;xxx&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">&lt;!-- 缺省值设置,当&lt;dubbo:protocol&gt;没有配置serialization时,使用此配置 --&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:provider</span> serialization=<span style="color:#2aa198">&#34;xxx&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div><h2 id="已知扩展">已知扩展</h2> |
| <ul> |
| <li><code>org.apache.dubbo.common.serialize.dubbo.DubboSerialization</code></li> |
| <li><code>org.apache.dubbo.common.serialize.hessian.Hessian2Serialization</code></li> |
| <li><code>org.apache.dubbo.common.serialize.java.JavaSerialization</code></li> |
| <li><code>org.apache.dubbo.common.serialize.java.CompactedJavaSerialization</code></li> |
| </ul> |
| <h2 id="扩展示例">扩展示例</h2> |
| <p>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-fallback" data-lang="fallback"><span style="display:flex;"><span>src |
| </span></span><span style="display:flex;"><span> |-main |
| </span></span><span style="display:flex;"><span> |-java |
| </span></span><span style="display:flex;"><span> |-com |
| </span></span><span style="display:flex;"><span> |-xxx |
| </span></span><span style="display:flex;"><span> |-XxxSerialization.java (实现Serialization接口) |
| </span></span><span style="display:flex;"><span> |-XxxObjectInput.java (实现ObjectInput接口) |
| </span></span><span style="display:flex;"><span> |-XxxObjectOutput.java (实现ObjectOutput接口) |
| </span></span><span style="display:flex;"><span> |-resources |
| </span></span><span style="display:flex;"><span> |-META-INF |
| </span></span><span style="display:flex;"><span> |-dubbo |
| </span></span><span style="display:flex;"><span> |-org.apache.dubbo.common.serialize.Serialization (纯文本文件,内容为:xxx=com.xxx.XxxSerialization) |
| </span></span></code></pre></div><p>XxxSerialization.java:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#719e07">package</span> com.xxx<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.common.serialize.Serialization<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.common.serialize.ObjectInput<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.common.serialize.ObjectOutput<span style="color:#719e07">;</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">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">XxxSerialization</span> <span style="color:#268bd2">implements</span> Serialization <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> ObjectOutput <span style="color:#268bd2">serialize</span><span style="color:#719e07">(</span>Parameters parameters<span style="color:#719e07">,</span> OutputStream output<span style="color:#719e07">)</span> <span style="color:#268bd2">throws</span> IOException <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">return</span> <span style="color:#719e07">new</span> XxxObjectOutput<span style="color:#719e07">(</span>output<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">public</span> ObjectInput <span style="color:#268bd2">deserialize</span><span style="color:#719e07">(</span>Parameters parameters<span style="color:#719e07">,</span> InputStream input<span style="color:#719e07">)</span> <span style="color:#268bd2">throws</span> IOException <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">return</span> <span style="color:#719e07">new</span> XxxObjectInput<span style="color:#719e07">(</span>input<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><p>META-INF/dubbo/org.apache.dubbo.common.serialize.Serialization:</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>xxx<span style="color:#719e07">=</span><span style="color:#2aa198">com.xxx.XxxSerialization</span> |
| </span></span></code></pre></div></description></item><item><title>Docsv2.7: 网络传输扩展</title><link>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/remoting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/remoting/</guid><description> |
| <h2 id="扩展说明">扩展说明</h2> |
| <p>远程通讯的服务器及客户端传输实现。</p> |
| <h2 id="扩展接口">扩展接口</h2> |
| <ul> |
| <li><code>org.apache.dubbo.remoting.Transporter</code></li> |
| <li><code>org.apache.dubbo.remoting.Server</code></li> |
| <li><code>org.apache.dubbo.remoting.Client</code></li> |
| </ul> |
| <h2 id="扩展配置">扩展配置</h2> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#586e75">&lt;!-- 服务器和客户端使用相同的传输实现 --&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:protocol</span> transporter=<span style="color:#2aa198">&#34;xxx&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">&lt;!-- 服务器和客户端使用不同的传输实现 --&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:protocol</span> server=<span style="color:#2aa198">&#34;xxx&#34;</span> client=<span style="color:#2aa198">&#34;xxx&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">&lt;!-- 缺省值设置,当&lt;dubbo:protocol&gt;没有配置transporter/server/client属性时,使用此配置 --&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:provider</span> transporter=<span style="color:#2aa198">&#34;xxx&#34;</span> server=<span style="color:#2aa198">&#34;xxx&#34;</span> client=<span style="color:#2aa198">&#34;xxx&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div><h2 id="已知扩展">已知扩展</h2> |
| <ul> |
| <li><code>org.apache.dubbo.remoting.transport.transporter.netty.NettyTransporter</code></li> |
| <li><code>org.apache.dubbo.remoting.transport.transporter.mina.MinaTransporter</code></li> |
| <li><code>org.apache.dubbo.remoting.transport.transporter.grizzly.GrizzlyTransporter</code></li> |
| </ul> |
| <h2 id="扩展示例">扩展示例</h2> |
| <p>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-fallback" data-lang="fallback"><span style="display:flex;"><span>src |
| </span></span><span style="display:flex;"><span> |-main |
| </span></span><span style="display:flex;"><span> |-java |
| </span></span><span style="display:flex;"><span> |-com |
| </span></span><span style="display:flex;"><span> |-xxx |
| </span></span><span style="display:flex;"><span> |-XxxTransporter.java (实现Transporter接口) |
| </span></span><span style="display:flex;"><span> |-XxxServer.java (实现Server接口) |
| </span></span><span style="display:flex;"><span> |-XxxClient.java (实现Client接口) |
| </span></span><span style="display:flex;"><span> |-resources |
| </span></span><span style="display:flex;"><span> |-META-INF |
| </span></span><span style="display:flex;"><span> |-dubbo |
| </span></span><span style="display:flex;"><span> |-org.apache.dubbo.remoting.Transporter (纯文本文件,内容为:xxx=com.xxx.XxxTransporter) |
| </span></span></code></pre></div><p>XxxTransporter.java:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#719e07">package</span> com.xxx<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.remoting.Transporter<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">XxxTransporter</span> <span style="color:#268bd2">implements</span> Transporter <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> Server <span style="color:#268bd2">bind</span><span style="color:#719e07">(</span>URL url<span style="color:#719e07">,</span> ChannelHandler handler<span style="color:#719e07">)</span> <span style="color:#268bd2">throws</span> RemotingException <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">return</span> <span style="color:#719e07">new</span> XxxServer<span style="color:#719e07">(</span>url<span style="color:#719e07">,</span> handler<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">public</span> Client <span style="color:#268bd2">connect</span><span style="color:#719e07">(</span>URL url<span style="color:#719e07">,</span> ChannelHandler handler<span style="color:#719e07">)</span> <span style="color:#268bd2">throws</span> RemotingException <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">return</span> <span style="color:#719e07">new</span> XxxClient<span style="color:#719e07">(</span>url<span style="color:#719e07">,</span> handler<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><p>XxxServer.java:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#719e07">package</span> com.xxx<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.remoting.transport.transporter.AbstractServer<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">XxxServer</span> <span style="color:#268bd2">extends</span> AbstractServer <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> <span style="color:#268bd2">XxxServer</span><span style="color:#719e07">(</span>URL url<span style="color:#719e07">,</span> ChannelHandler handler<span style="color:#719e07">)</span> <span style="color:#268bd2">throws</span> RemotingException<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> handler<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">protected</span> <span style="color:#dc322f">void</span> <span style="color:#268bd2">doOpen</span><span style="color:#719e07">()</span> <span style="color:#268bd2">throws</span> Throwable <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">protected</span> <span style="color:#dc322f">void</span> <span style="color:#268bd2">doClose</span><span style="color:#719e07">()</span> <span style="color:#268bd2">throws</span> Throwable <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> Collection<span style="color:#719e07">&lt;</span>Channel<span style="color:#719e07">&gt;</span> <span style="color:#268bd2">getChannels</span><span style="color:#719e07">()</span> <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> Channel <span style="color:#268bd2">getChannel</span><span style="color:#719e07">(</span>InetSocketAddress remoteAddress<span style="color:#719e07">)</span> <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">}</span> |
| </span></span></code></pre></div><p>XxxClient.java:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#719e07">package</span> com.xxx<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.remoting.transport.transporter.AbstractClient<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">XxxClient</span> <span style="color:#268bd2">extends</span> AbstractClient <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> <span style="color:#268bd2">XxxServer</span><span style="color:#719e07">(</span>URL url<span style="color:#719e07">,</span> ChannelHandler handler<span style="color:#719e07">)</span> <span style="color:#268bd2">throws</span> RemotingException<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> handler<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">protected</span> <span style="color:#dc322f">void</span> <span style="color:#268bd2">doOpen</span><span style="color:#719e07">()</span> <span style="color:#268bd2">throws</span> Throwable <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">protected</span> <span style="color:#dc322f">void</span> <span style="color:#268bd2">doClose</span><span style="color:#719e07">()</span> <span style="color:#268bd2">throws</span> Throwable <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">protected</span> <span style="color:#dc322f">void</span> <span style="color:#268bd2">doConnect</span><span style="color:#719e07">()</span> <span style="color:#268bd2">throws</span> Throwable <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> Channel <span style="color:#268bd2">getChannel</span><span style="color:#719e07">()</span> <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">}</span> |
| </span></span></code></pre></div><p>META-INF/dubbo/org.apache.dubbo.remoting.Transporter:</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>xxx<span style="color:#719e07">=</span><span style="color:#2aa198">com.xxx.XxxTransporter</span> |
| </span></span></code></pre></div></description></item><item><title>Docsv2.7: 信息交换扩展</title><link>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/exchanger/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/exchanger/</guid><description> |
| <h2 id="扩展说明">扩展说明</h2> |
| <p>基于传输层之上,实现 Request-Response 信息交换语义。</p> |
| <h2 id="扩展接口">扩展接口</h2> |
| <ul> |
| <li><code>org.apache.dubbo.remoting.exchange.Exchanger</code></li> |
| <li><code>org.apache.dubbo.remoting.exchange.ExchangeServer</code></li> |
| <li><code>org.apache.dubbo.remoting.exchange.ExchangeClient</code></li> |
| </ul> |
| <h2 id="扩展配置">扩展配置</h2> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:protocol</span> exchanger=<span style="color:#2aa198">&#34;xxx&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">&lt;!-- 缺省值设置,当&lt;dubbo:protocol&gt;没有配置exchanger属性时,使用此配置 --&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:provider</span> exchanger=<span style="color:#2aa198">&#34;xxx&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div><h2 id="已知扩展">已知扩展</h2> |
| <p><code>org.apache.dubbo.remoting.exchange.exchanger.HeaderExchanger</code></p> |
| <h2 id="扩展示例">扩展示例</h2> |
| <p>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-fallback" data-lang="fallback"><span style="display:flex;"><span>src |
| </span></span><span style="display:flex;"><span> |-main |
| </span></span><span style="display:flex;"><span> |-java |
| </span></span><span style="display:flex;"><span> |-com |
| </span></span><span style="display:flex;"><span> |-xxx |
| </span></span><span style="display:flex;"><span> |-XxxExchanger.java (实现Exchanger接口) |
| </span></span><span style="display:flex;"><span> |-XxxExchangeServer.java (实现ExchangeServer接口) |
| </span></span><span style="display:flex;"><span> |-XxxExchangeClient.java (实现ExchangeClient接口) |
| </span></span><span style="display:flex;"><span> |-resources |
| </span></span><span style="display:flex;"><span> |-META-INF |
| </span></span><span style="display:flex;"><span> |-dubbo |
| </span></span><span style="display:flex;"><span> |-org.apache.dubbo.remoting.exchange.Exchanger (纯文本文件,内容为:xxx=com.xxx.XxxExchanger) |
| </span></span></code></pre></div><p>XxxExchanger.java:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#719e07">package</span> com.xxx<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.remoting.exchange.Exchanger<span style="color:#719e07">;</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">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">XxxExchanger</span> <span style="color:#268bd2">implements</span> Exchanger <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> ExchangeServer <span style="color:#268bd2">bind</span><span style="color:#719e07">(</span>URL url<span style="color:#719e07">,</span> ExchangeHandler handler<span style="color:#719e07">)</span> <span style="color:#268bd2">throws</span> RemotingException <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">return</span> <span style="color:#719e07">new</span> XxxExchangeServer<span style="color:#719e07">(</span>url<span style="color:#719e07">,</span> handler<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">public</span> ExchangeClient <span style="color:#268bd2">connect</span><span style="color:#719e07">(</span>URL url<span style="color:#719e07">,</span> ExchangeHandler handler<span style="color:#719e07">)</span> <span style="color:#268bd2">throws</span> RemotingException <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">return</span> <span style="color:#719e07">new</span> XxxExchangeClient<span style="color:#719e07">(</span>url<span style="color:#719e07">,</span> handler<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><p>XxxExchangeServer.java:</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></span><span style="display:flex;"><span><span style="color:#719e07">package</span> com.xxx<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.remoting.exchange.ExchangeServer<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">XxxExchangeServer</span> impelements ExchangeServer <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span><span style="color:#719e07">}</span> |
| </span></span></code></pre></div><p>XxxExchangeClient.java:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#719e07">package</span> com.xxx<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.remoting.exchange.ExchangeClient<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">XxxExchangeClient</span> impelments ExchangeClient <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span><span style="color:#719e07">}</span> |
| </span></span></code></pre></div><p>META-INF/dubbo/org.apache.dubbo.remoting.exchange.Exchanger:</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>xxx<span style="color:#719e07">=</span><span style="color:#2aa198">com.xxx.XxxExchanger</span> |
| </span></span></code></pre></div></description></item><item><title>Docsv2.7: 组网扩展</title><link>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/networker/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/networker/</guid><description> |
| <h2 id="扩展说明">扩展说明</h2> |
| <p>对等网络节点组网器。</p> |
| <h2 id="扩展接口">扩展接口</h2> |
| <p><code>org.apache.dubbo.remoting.p2p.Networker</code></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-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:protocol</span> networker=<span style="color:#2aa198">&#34;xxx&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">&lt;!-- 缺省值设置,当&lt;dubbo:protocol&gt;没有配置networker属性时,使用此配置 --&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:provider</span> networker=<span style="color:#2aa198">&#34;xxx&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div><h2 id="已知扩展">已知扩展</h2> |
| <ul> |
| <li><code>org.apache.dubbo.remoting.p2p.support.MulticastNetworker</code></li> |
| <li><code>org.apache.dubbo.remoting.p2p.support.FileNetworker</code></li> |
| </ul> |
| <h2 id="扩展示例">扩展示例</h2> |
| <p>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-fallback" data-lang="fallback"><span style="display:flex;"><span>src |
| </span></span><span style="display:flex;"><span> |-main |
| </span></span><span style="display:flex;"><span> |-java |
| </span></span><span style="display:flex;"><span> |-com |
| </span></span><span style="display:flex;"><span> |-xxx |
| </span></span><span style="display:flex;"><span> |-XxxNetworker.java (实现Networker接口) |
| </span></span><span style="display:flex;"><span> |-resources |
| </span></span><span style="display:flex;"><span> |-META-INF |
| </span></span><span style="display:flex;"><span> |-dubbo |
| </span></span><span style="display:flex;"><span> |-org.apache.dubbo.remoting.p2p.Networker (纯文本文件,内容为:xxx=com.xxx.XxxNetworker) |
| </span></span></code></pre></div><p>XxxNetworker.java:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#719e07">package</span> com.xxx<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.remoting.p2p.Networker<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">XxxNetworker</span> <span style="color:#268bd2">implements</span> Networker <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> Group <span style="color:#268bd2">lookup</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:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">}</span> |
| </span></span></code></pre></div><p>META-INF/dubbo/org.apache.dubbo.remoting.p2p.Networker:</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>xxx<span style="color:#719e07">=</span><span style="color:#2aa198">com.xxx.XxxNetworker</span> |
| </span></span></code></pre></div></description></item><item><title>Docsv2.7: Telnet 命令扩展</title><link>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/telnet-handler/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/telnet-handler/</guid><description> |
| <h2 id="扩展说明">扩展说明</h2> |
| <p>所有服务器均支持 telnet 访问,用于人工干预。</p> |
| <h2 id="扩展接口">扩展接口</h2> |
| <p><code>org.apache.dubbo.remoting.telnet.TelnetHandler</code></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-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:protocol</span> telnet=<span style="color:#2aa198">&#34;xxx,yyy&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">&lt;!-- 缺省值设置,当&lt;dubbo:protocol&gt;没有配置telnet属性时,使用此配置 --&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:provider</span> telnet=<span style="color:#2aa198">&#34;xxx,yyy&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div><h2 id="已知扩展">已知扩展</h2> |
| <ul> |
| <li><code>org.apache.dubbo.remoting.telnet.support.ClearTelnetHandler</code></li> |
| <li><code>org.apache.dubbo.remoting.telnet.support.ExitTelnetHandler</code></li> |
| <li><code>org.apache.dubbo.remoting.telnet.support.HelpTelnetHandler</code></li> |
| <li><code>org.apache.dubbo.remoting.telnet.support.StatusTelnetHandler</code></li> |
| <li><code>org.apache.dubbo.rpc.dubbo.telnet.ListTelnetHandler</code></li> |
| <li><code>org.apache.dubbo.rpc.dubbo.telnet.ChangeTelnetHandler</code></li> |
| <li><code>org.apache.dubbo.rpc.dubbo.telnet.CurrentTelnetHandler</code></li> |
| <li><code>org.apache.dubbo.rpc.dubbo.telnet.InvokeTelnetHandler</code></li> |
| <li><code>org.apache.dubbo.rpc.dubbo.telnet.TraceTelnetHandler</code></li> |
| <li><code>org.apache.dubbo.rpc.dubbo.telnet.CountTelnetHandler</code></li> |
| <li><code>org.apache.dubbo.rpc.dubbo.telnet.PortTelnetHandler</code></li> |
| </ul> |
| <h2 id="扩展示例">扩展示例</h2> |
| <p>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-fallback" data-lang="fallback"><span style="display:flex;"><span>src |
| </span></span><span style="display:flex;"><span> |-main |
| </span></span><span style="display:flex;"><span> |-java |
| </span></span><span style="display:flex;"><span> |-com |
| </span></span><span style="display:flex;"><span> |-xxx |
| </span></span><span style="display:flex;"><span> |-XxxTelnetHandler.java (实现TelnetHandler接口) |
| </span></span><span style="display:flex;"><span> |-resources |
| </span></span><span style="display:flex;"><span> |-META-INF |
| </span></span><span style="display:flex;"><span> |-dubbo |
| </span></span><span style="display:flex;"><span> |-org.apache.dubbo.remoting.telnet.TelnetHandler (纯文本文件,内容为:xxx=com.xxx.XxxTelnetHandler) |
| </span></span></code></pre></div><p>XxxTelnetHandler.java:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#719e07">package</span> com.xxx<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.remoting.telnet.TelnetHandler<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">@Help</span><span style="color:#719e07">(</span>parameter<span style="color:#719e07">=</span><span style="color:#2aa198">&#34;...&#34;</span><span style="color:#719e07">,</span> summary<span style="color:#719e07">=</span><span style="color:#2aa198">&#34;...&#34;</span><span style="color:#719e07">,</span> detail<span style="color:#719e07">=</span><span style="color:#2aa198">&#34;...&#34;</span><span style="color:#719e07">)</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">XxxTelnetHandler</span> <span style="color:#268bd2">implements</span> TelnetHandler <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> String <span style="color:#268bd2">telnet</span><span style="color:#719e07">(</span>Channel channel<span style="color:#719e07">,</span> String message<span style="color:#719e07">)</span> <span style="color:#268bd2">throws</span> RemotingException <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">}</span> |
| </span></span></code></pre></div><p>META-INF/dubbo/org.apache.dubbo.remoting.telnet.TelnetHandler:</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>xxx<span style="color:#719e07">=</span><span style="color:#2aa198">com.xxx.XxxTelnetHandler</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-sh" data-lang="sh"><span style="display:flex;"><span>telnet 127.0.0.1 <span style="color:#2aa198">20880</span> |
| </span></span><span style="display:flex;"><span>dubbo&gt; xxx args |
| </span></span></code></pre></div></description></item><item><title>Docsv2.7: 状态检查扩展</title><link>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/status-checker/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/status-checker/</guid><description> |
| <h2 id="扩展说明">扩展说明</h2> |
| <p>检查服务依赖各种资源的状态,此状态检查可同时用于 telnet 的 status 命令和 hosting 的 status 页面。</p> |
| <h2 id="扩展接口">扩展接口</h2> |
| <p><code>org.apache.dubbo.common.status.StatusChecker</code></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-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:protocol</span> status=<span style="color:#2aa198">&#34;xxx,yyy&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">&lt;!-- 缺省值设置,当&lt;dubbo:protocol&gt;没有配置status属性时,使用此配置 --&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:provider</span> status=<span style="color:#2aa198">&#34;xxx,yyy&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div><h2 id="已知扩展">已知扩展</h2> |
| <ul> |
| <li><code>org.apache.dubbo.common.status.support.MemoryStatusChecker</code></li> |
| <li><code>org.apache.dubbo.common.status.support.LoadStatusChecker</code></li> |
| <li><code>org.apache.dubbo.rpc.dubbo.status.ServerStatusChecker</code></li> |
| <li><code>org.apache.dubbo.rpc.dubbo.status.ThreadPoolStatusChecker</code></li> |
| <li><code>org.apache.dubbo.registry.directory.RegistryStatusChecker</code></li> |
| <li><code>org.apache.dubbo.rpc.config.spring.status.SpringStatusChecker</code></li> |
| <li><code>org.apache.dubbo.rpc.config.spring.status.DataSourceStatusChecker</code></li> |
| </ul> |
| <h2 id="扩展示例">扩展示例</h2> |
| <p>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-fallback" data-lang="fallback"><span style="display:flex;"><span>src |
| </span></span><span style="display:flex;"><span> |-main |
| </span></span><span style="display:flex;"><span> |-java |
| </span></span><span style="display:flex;"><span> |-com |
| </span></span><span style="display:flex;"><span> |-xxx |
| </span></span><span style="display:flex;"><span> |-XxxStatusChecker.java (实现StatusChecker接口) |
| </span></span><span style="display:flex;"><span> |-resources |
| </span></span><span style="display:flex;"><span> |-META-INF |
| </span></span><span style="display:flex;"><span> |-dubbo |
| </span></span><span style="display:flex;"><span> |-org.apache.dubbo.common.status.StatusChecker (纯文本文件,内容为:xxx=com.xxx.XxxStatusChecker) |
| </span></span></code></pre></div><p>XxxStatusChecker.java:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#719e07">package</span> com.xxx<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.common.status.StatusChecker<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">XxxStatusChecker</span> <span style="color:#268bd2">implements</span> StatusChecker <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> Status <span style="color:#268bd2">check</span><span style="color:#719e07">()</span> <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">}</span> |
| </span></span></code></pre></div><p>META-INF/dubbo/org.apache.dubbo.common.status.StatusChecker:</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>xxx<span style="color:#719e07">=</span><span style="color:#2aa198">com.xxx.XxxStatusChecker</span> |
| </span></span></code></pre></div></description></item><item><title>Docsv2.7: 容器扩展</title><link>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/container/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/container/</guid><description> |
| <h2 id="扩展说明">扩展说明</h2> |
| <p>服务容器扩展,用于自定义加载内容。</p> |
| <h2 id="扩展接口">扩展接口</h2> |
| <p><code>org.apache.dubbo.container.Container</code></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>java org.apache.dubbo.container.Main spring jetty log4j |
| </span></span></code></pre></div><h2 id="已知扩展">已知扩展</h2> |
| <ul> |
| <li><code>org.apache.dubbo.container.spring.SpringContainer</code></li> |
| <li><code>org.apache.dubbo.container.spring.JettyContainer</code></li> |
| <li><code>org.apache.dubbo.container.spring.Log4jContainer</code></li> |
| </ul> |
| <h2 id="扩展示例">扩展示例</h2> |
| <p>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-fallback" data-lang="fallback"><span style="display:flex;"><span>src |
| </span></span><span style="display:flex;"><span> |-main |
| </span></span><span style="display:flex;"><span> |-java |
| </span></span><span style="display:flex;"><span> |-com |
| </span></span><span style="display:flex;"><span> |-xxx |
| </span></span><span style="display:flex;"><span> |-XxxContainer.java (实现Container接口) |
| </span></span><span style="display:flex;"><span> |-resources |
| </span></span><span style="display:flex;"><span> |-META-INF |
| </span></span><span style="display:flex;"><span> |-dubbo |
| </span></span><span style="display:flex;"><span> |-org.apache.dubbo.container.Container (纯文本文件,内容为:xxx=com.xxx.XxxContainer) |
| </span></span></code></pre></div><p>XxxContainer.java:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#719e07">package</span> com.xxx<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>org<span style="color:#719e07">.</span>apache<span style="color:#719e07">.</span>dubbo<span style="color:#719e07">.</span>container<span style="color:#719e07">.</span>Container<span style="color:#719e07">;</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">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">XxxContainer</span> <span style="color:#268bd2">implements</span> Container <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> Status <span style="color:#268bd2">start</span><span style="color:#719e07">()</span> <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> Status <span style="color:#268bd2">stop</span><span style="color:#719e07">()</span> <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">}</span> |
| </span></span></code></pre></div><p>META-INF/dubbo/org.apache.dubbo.container.Container:</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>xxx<span style="color:#719e07">=</span><span style="color:#2aa198">com.xxx.XxxContainer</span> |
| </span></span></code></pre></div></description></item><item><title>Docsv2.7: 缓存扩展</title><link>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/cache/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/cache/</guid><description> |
| <h2 id="扩展说明">扩展说明</h2> |
| <p>用请求参数作为 key,缓存返回结果。</p> |
| <h2 id="扩展接口">扩展接口</h2> |
| <p><code>org.apache.dubbo.cache.CacheFactory</code></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-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:service</span> cache=<span style="color:#2aa198">&#34;lru&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">&lt;!-- 方法级缓存 --&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:service&gt;&lt;dubbo:method</span> cache=<span style="color:#2aa198">&#34;lru&#34;</span> <span style="color:#268bd2">/&gt;&lt;/dubbo:service&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">&lt;!-- 缺省值设置,当&lt;dubbo:service&gt;没有配置cache属性时,使用此配置 --&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:provider</span> cache=<span style="color:#2aa198">&#34;xxx,yyy&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div><h2 id="已知扩展">已知扩展</h2> |
| <ul> |
| <li><code>org.apache.dubbo.cache.support.lru.LruCacheFactory</code></li> |
| <li><code>org.apache.dubbo.cache.support.threadlocal.ThreadLocalCacheFactory</code></li> |
| <li><code>org.apache.dubbo.cache.support.jcache.JCacheFactory</code></li> |
| </ul> |
| <h2 id="扩展示例">扩展示例</h2> |
| <p>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-fallback" data-lang="fallback"><span style="display:flex;"><span>src |
| </span></span><span style="display:flex;"><span> |-main |
| </span></span><span style="display:flex;"><span> |-java |
| </span></span><span style="display:flex;"><span> |-com |
| </span></span><span style="display:flex;"><span> |-xxx |
| </span></span><span style="display:flex;"><span> |-XxxCacheFactory.java (实现CacheFactory接口) |
| </span></span><span style="display:flex;"><span> |-resources |
| </span></span><span style="display:flex;"><span> |-META-INF |
| </span></span><span style="display:flex;"><span> |-dubbo |
| </span></span><span style="display:flex;"><span> |-org.apache.dubbo.cache.CacheFactory (纯文本文件,内容为:xxx=com.xxx.XxxCacheFactory) |
| </span></span></code></pre></div><p>XxxCacheFactory.java:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#719e07">package</span> com.xxx<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.cache.CacheFactory<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">XxxCacheFactory</span> <span style="color:#268bd2">implements</span> CacheFactory <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> Cache <span style="color:#268bd2">getCache</span><span style="color:#719e07">(</span>URL url<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:#719e07">new</span> XxxCache<span style="color:#719e07">(</span>url<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><p>XxxCache.java:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#719e07">package</span> com.xxx<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.cache.Cache<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">XxxCache</span> <span style="color:#268bd2">implements</span> Cache <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> <span style="color:#268bd2">Cache</span><span style="color:#719e07">(</span>URL url<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:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> <span style="color:#dc322f">void</span> <span style="color:#268bd2">put</span><span style="color:#719e07">(</span>Object key<span style="color:#719e07">,</span> Object value<span style="color:#719e07">)</span> <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> Object <span style="color:#268bd2">get</span><span style="color:#719e07">(</span>Object key<span style="color:#719e07">)</span> <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">}</span> |
| </span></span></code></pre></div><p>META-INF/dubbo/org.apache.dubbo.cache.CacheFactory:</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>xxx<span style="color:#719e07">=</span><span style="color:#2aa198">com.xxx.XxxCacheFactory</span> |
| </span></span></code></pre></div></description></item><item><title>Docsv2.7: 验证扩展</title><link>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/validation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/validation/</guid><description> |
| <h2 id="扩展说明">扩展说明</h2> |
| <p>参数验证扩展点。</p> |
| <h2 id="扩展接口">扩展接口</h2> |
| <p><code>org.apache.dubbo.validation.Validation</code></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-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:service</span> validation=<span style="color:#2aa198">&#34;xxx,yyy&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">&lt;!-- 缺省值设置,当&lt;dubbo:service&gt;没有配置validation属性时,使用此配置 --&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:provider</span> validation=<span style="color:#2aa198">&#34;xxx,yyy&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div><h2 id="已知扩展">已知扩展</h2> |
| <p><code>org.apache.dubbo.validation.support.jvalidation.JValidation</code></p> |
| <h2 id="扩展示例">扩展示例</h2> |
| <p>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-fallback" data-lang="fallback"><span style="display:flex;"><span>src |
| </span></span><span style="display:flex;"><span> |-main |
| </span></span><span style="display:flex;"><span> |-java |
| </span></span><span style="display:flex;"><span> |-com |
| </span></span><span style="display:flex;"><span> |-xxx |
| </span></span><span style="display:flex;"><span> |-XxxValidation.java (实现Validation接口) |
| </span></span><span style="display:flex;"><span> |-resources |
| </span></span><span style="display:flex;"><span> |-META-INF |
| </span></span><span style="display:flex;"><span> |-dubbo |
| </span></span><span style="display:flex;"><span> |-org.apache.dubbo.validation.Validation (纯文本文件,内容为:xxx=com.xxx.XxxValidation) |
| </span></span></code></pre></div><p>XxxValidation.java:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#719e07">package</span> com.xxx<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.validation.Validation<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">XxxValidation</span> <span style="color:#268bd2">implements</span> Validation <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> Object <span style="color:#268bd2">getValidator</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:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">}</span> |
| </span></span></code></pre></div><p>XxxValidator.java:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#719e07">package</span> com.xxx<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.validation.Validator<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">XxxValidator</span> <span style="color:#268bd2">implements</span> Validator <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> <span style="color:#268bd2">XxxValidator</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:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> <span style="color:#dc322f">void</span> <span style="color:#268bd2">validate</span><span style="color:#719e07">(</span>Invocation invocation<span style="color:#719e07">)</span> <span style="color:#268bd2">throws</span> Exception <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">}</span> |
| </span></span></code></pre></div><p>META-INF/dubbo/org.apache.dubbo.validation.Validation:</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>xxx<span style="color:#719e07">=</span><span style="color:#2aa198">com.xxx.XxxValidation</span> |
| </span></span></code></pre></div></description></item><item><title>Docsv2.7: 日志适配扩展</title><link>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/logger-adapter/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/logger-adapter/</guid><description> |
| <h2 id="扩展说明">扩展说明</h2> |
| <p>日志输出适配扩展点。</p> |
| <h2 id="扩展接口">扩展接口</h2> |
| <p><code>org.apache.dubbo.common.logger.LoggerAdapter</code></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-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:application</span> logger=<span style="color:#2aa198">&#34;xxx&#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-sh" data-lang="sh"><span style="display:flex;"><span>-Ddubbo:application.logger<span style="color:#719e07">=</span>xxx |
| </span></span></code></pre></div><h2 id="已知扩展">已知扩展</h2> |
| <ul> |
| <li><code>org.apache.dubbo.common.logger.slf4j.Slf4jLoggerAdapter</code></li> |
| <li><code>org.apache.dubbo.common.logger.jcl.JclLoggerAdapter</code></li> |
| <li><code>org.apache.dubbo.common.logger.log4j.Log4jLoggerAdapter</code></li> |
| <li><code>org.apache.dubbo.common.logger.log4j2.Log4j2LoggerAdapter</code></li> |
| <li><code>org.apache.dubbo.common.logger.jdk.JdkLoggerAdapter</code></li> |
| </ul> |
| <h2 id="扩展示例">扩展示例</h2> |
| <p>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-fallback" data-lang="fallback"><span style="display:flex;"><span>src |
| </span></span><span style="display:flex;"><span> |-main |
| </span></span><span style="display:flex;"><span> |-java |
| </span></span><span style="display:flex;"><span> |-com |
| </span></span><span style="display:flex;"><span> |-xxx |
| </span></span><span style="display:flex;"><span> |-XxxLoggerAdapter.java (实现LoggerAdapter接口) |
| </span></span><span style="display:flex;"><span> |-resources |
| </span></span><span style="display:flex;"><span> |-META-INF |
| </span></span><span style="display:flex;"><span> |-dubbo |
| </span></span><span style="display:flex;"><span> |-org.apache.dubbo.common.logger.LoggerAdapter (纯文本文件,内容为:xxx=com.xxx.XxxLoggerAdapter) |
| </span></span></code></pre></div><p>XxxLoggerAdapter.java:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#719e07">package</span> com.xxx<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.common.logger.LoggerAdapter<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">XxxLoggerAdapter</span> <span style="color:#268bd2">implements</span> LoggerAdapter <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> Logger <span style="color:#268bd2">getLogger</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:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">}</span> |
| </span></span></code></pre></div><p>XxxLogger.java:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#719e07">package</span> com.xxx<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.common.logger.Logger<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">XxxLogger</span> <span style="color:#268bd2">implements</span> Logger <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> <span style="color:#268bd2">XxxLogger</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:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> <span style="color:#dc322f">void</span> <span style="color:#268bd2">info</span><span style="color:#719e07">(</span>String msg<span style="color:#719e07">)</span> <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span><span style="color:#719e07">}</span> |
| </span></span></code></pre></div><p>META-INF/dubbo/org.apache.dubbo.common.logger.LoggerAdapter:</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>xxx<span style="color:#719e07">=</span><span style="color:#2aa198">com.xxx.XxxLoggerAdapter</span> |
| </span></span></code></pre></div></description></item><item><title>Docsv2.7:</title><link>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/page/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docsv2.7/dev/impls/page/</guid><description> |
| <h1 id="页面扩展">页面扩展</h1> |
| <h2 id="扩展说明">扩展说明</h2> |
| <p>对等网络节点组网器。</p> |
| <h2 id="扩展接口">扩展接口</h2> |
| <p><code>org.apache.dubbo.container.page.PageHandler</code></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-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:protocol</span> page=<span style="color:#2aa198">&#34;xxx,yyy&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75">&lt;!-- 缺省值设置,当&lt;dubbo:protocol&gt;没有配置page属性时,使用此配置 --&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;dubbo:provider</span> page=<span style="color:#2aa198">&#34;xxx,yyy&#34;</span> <span style="color:#268bd2">/&gt;</span> |
| </span></span></code></pre></div><h2 id="已知扩展">已知扩展</h2> |
| <ul> |
| <li><code>org.apache.dubbo.container.page.pages.HomePageHandler</code></li> |
| <li><code>org.apache.dubbo.container.page.pages.StatusPageHandler</code></li> |
| <li><code>org.apache.dubbo.container.page.pages.LogPageHandler</code></li> |
| <li><code>org.apache.dubbo.container.page.pages.SystemPageHandler</code></li> |
| </ul> |
| <h2 id="扩展示例">扩展示例</h2> |
| <p>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-fallback" data-lang="fallback"><span style="display:flex;"><span>src |
| </span></span><span style="display:flex;"><span> |-main |
| </span></span><span style="display:flex;"><span> |-java |
| </span></span><span style="display:flex;"><span> |-com |
| </span></span><span style="display:flex;"><span> |-xxx |
| </span></span><span style="display:flex;"><span> |-XxxPageHandler.java (实现PageHandler接口) |
| </span></span><span style="display:flex;"><span> |-resources |
| </span></span><span style="display:flex;"><span> |-META-INF |
| </span></span><span style="display:flex;"><span> |-dubbo |
| </span></span><span style="display:flex;"><span> |-org.apache.dubbo.container.page.PageHandler (纯文本文件,内容为:xxx=com.xxx.XxxPageHandler) |
| </span></span></code></pre></div><p>XxxPageHandler.java:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#719e07">package</span> com.xxx<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> org.apache.dubbo.container.page.PageHandler<span style="color:#719e07">;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">public</span> <span style="color:#268bd2">class</span> <span style="color:#268bd2">XxxPageHandler</span> <span style="color:#268bd2">implements</span> PageHandler <span style="color:#719e07">{</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">public</span> Group <span style="color:#268bd2">lookup</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:#586e75">// ... |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> <span style="color:#719e07">}</span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">}</span> |
| </span></span></code></pre></div><p>META-INF/dubbo/org.apache.dubbo.container.page.PageHandler:</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>xxx<span style="color:#719e07">=</span><span style="color:#2aa198">com.xxx.XxxPageHandler</span> |
| </span></span></code></pre></div></description></item></channel></rss> |