<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>SPI 扩展实现 on Apache Dubbo</title><link>https://dubbo.apache.org/zh-cn/docs/references/spis/</link><description>Recent content in SPI 扩展实现 on Apache Dubbo</description><generator>Hugo</generator><language>zh-cn</language><atom:link href="https://dubbo.apache.org/zh-cn/docs/references/spis/index.xml" rel="self" type="application/rss+xml"/><item><title>协议扩展</title><link>https://dubbo.apache.org/zh-cn/docs/references/spis/protocol/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docs/references/spis/protocol/</guid><description>&lt;div class="pageinfo pageinfo-primary"&gt;
&lt;p&gt;此文档已经不再维护。您当前查看的是快照版本。如果想要查看最新版本的文档，请参阅&lt;a href="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/protocol/"&gt;最新版本&lt;/a&gt;。&lt;/p&gt;

&lt;/div&gt;

&lt;h2 id="扩展说明"&gt;扩展说明&lt;/h2&gt;
&lt;p&gt;RPC 协议扩展，封装远程调用细节。&lt;/p&gt;
&lt;p&gt;契约：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;当用户调用 &lt;code&gt;refer()&lt;/code&gt; 所返回的 &lt;code&gt;Invoker&lt;/code&gt; 对象的 &lt;code&gt;invoke()&lt;/code&gt; 方法时，协议需相应执行同 URL 远端 &lt;code&gt;export()&lt;/code&gt; 传入的 &lt;code&gt;Invoker&lt;/code&gt; 对象的 &lt;code&gt;invoke()&lt;/code&gt; 方法。&lt;/li&gt;
&lt;li&gt;其中，&lt;code&gt;refer()&lt;/code&gt; 返回的 &lt;code&gt;Invoker&lt;/code&gt; 由协议实现，协议通常需要在此 &lt;code&gt;Invoker&lt;/code&gt; 中发送远程请求，&lt;code&gt;export()&lt;/code&gt; 传入的 &lt;code&gt;Invoker&lt;/code&gt; 由框架实现并传入，协议不需要关心。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;注意：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;协议不关心业务接口的透明代理，以 &lt;code&gt;Invoker&lt;/code&gt; 为中心，由外层将 &lt;code&gt;Invoker&lt;/code&gt; 转换为业务接口。&lt;/li&gt;
&lt;li&gt;协议不一定要是 TCP 网络通讯，比如通过共享文件，IPC 进程间通讯等。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="扩展接口"&gt;扩展接口&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.Protocol&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.Exporter&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.Invoker&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;public&lt;/span&gt; &lt;span style="color:#268bd2"&gt;interface&lt;/span&gt; &lt;span style="color:#268bd2"&gt;Protocol&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#586e75"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt; * 暴露远程服务：&amp;lt;br&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt; * 1. 协议在接收请求时，应记录请求来源方地址信息：RpcContext.getContext().setRemoteAddress();&amp;lt;br&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt; * 2. export()必须是幂等的，也就是暴露同一个URL的Invoker两次，和暴露一次没有区别。&amp;lt;br&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt; * 3. export()传入的Invoker由框架实现并传入，协议不需要关心。&amp;lt;br&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt; * 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt; * @param &amp;lt;T&amp;gt; 服务的类型
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt; * @param invoker 服务的执行体
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt; * @return exporter 暴露服务的引用，用于取消暴露
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt; * @throws RpcException 当暴露服务出错时抛出，比如端口已占用
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#719e07"&gt;&amp;lt;&lt;/span&gt;T&lt;span style="color:#719e07"&gt;&amp;gt;&lt;/span&gt; Exporter&lt;span style="color:#719e07"&gt;&amp;lt;&lt;/span&gt;T&lt;span style="color:#719e07"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;export&lt;/span&gt;(Invoker&lt;span style="color:#719e07"&gt;&amp;lt;&lt;/span&gt;T&lt;span style="color:#719e07"&gt;&amp;gt;&lt;/span&gt; invoker) &lt;span style="color:#268bd2"&gt;throws&lt;/span&gt; RpcException;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#586e75"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt; * 引用远程服务：&amp;lt;br&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt; * 1. 当用户调用refer()所返回的Invoker对象的invoke()方法时，协议需相应执行同URL远端export()传入的Invoker对象的invoke()方法。&amp;lt;br&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt; * 2. refer()返回的Invoker由协议实现，协议通常需要在此Invoker中发送远程请求。&amp;lt;br&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt; * 3. 当url中有设置check=false时，连接失败不能抛出异常，需内部自动恢复。&amp;lt;br&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt; * 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt; * @param &amp;lt;T&amp;gt; 服务的类型
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt; * @param type 服务的类型
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt; * @param url 远程服务的URL地址
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt; * @return invoker 服务的本地代理
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt; * @throws RpcException 当连接服务提供方失败时抛出
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#719e07"&gt;&amp;lt;&lt;/span&gt;T&lt;span style="color:#719e07"&gt;&amp;gt;&lt;/span&gt; Invoker&lt;span style="color:#719e07"&gt;&amp;lt;&lt;/span&gt;T&lt;span style="color:#719e07"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;refer&lt;/span&gt;(Class&lt;span style="color:#719e07"&gt;&amp;lt;&lt;/span&gt;T&lt;span style="color:#719e07"&gt;&amp;gt;&lt;/span&gt; type, URL url) &lt;span style="color:#268bd2"&gt;throws&lt;/span&gt; RpcException;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="扩展配置"&gt;扩展配置&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt;&amp;lt;!-- 声明协议，如果没有配置id，将以name为id --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:protocol&lt;/span&gt; id=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx1&amp;#34;&lt;/span&gt; name=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt;&amp;lt;!-- 引用协议，如果没有配置protocol属性，将在ApplicationContext中自动扫描protocol配置 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:service&lt;/span&gt; protocol=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx1&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt;&amp;lt;!-- 引用协议缺省值，当&amp;lt;dubbo:service&amp;gt;没有配置prototol属性时，使用此配置 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:provider&lt;/span&gt; protocol=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx1&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="已知扩展"&gt;已知扩展&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.protocol.injvm.InjvmProtocol&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.protocol.rmi.RmiProtocol&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.protocol.http.HttpProtocol&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.protocol.http.hessian.HessianProtocol&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.support.MockProtocol&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="扩展示例"&gt;扩展示例&lt;/h2&gt;
&lt;p&gt;Maven项目结构：&lt;/p&gt;</description></item><item><title>调用拦截扩展</title><link>https://dubbo.apache.org/zh-cn/docs/references/spis/filter/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docs/references/spis/filter/</guid><description>&lt;div class="pageinfo pageinfo-primary"&gt;
&lt;p&gt;此文档已经不再维护。您当前查看的是快照版本。如果想要查看最新版本的文档，请参阅&lt;a href="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/filter/"&gt;最新版本&lt;/a&gt;。&lt;/p&gt;

&lt;/div&gt;

&lt;h2 id="扩展说明"&gt;扩展说明&lt;/h2&gt;
&lt;p&gt;服务提供方和服务消费方调用过程拦截，Dubbo 本身的大多功能均基于此扩展点实现，每次远程方法执行，该拦截都会被执行，请注意对性能的影响。&lt;/p&gt;
&lt;p&gt;约定：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;用户自定义 filter 默认在内置 filter 之后。&lt;/li&gt;
&lt;li&gt;特殊值 &lt;code&gt;default&lt;/code&gt;，表示缺省扩展点插入的位置。比如：&lt;code&gt;filter=&amp;quot;xxx,default,yyy&amp;quot;&lt;/code&gt;，表示 &lt;code&gt;xxx&lt;/code&gt; 在缺省 filter 之前，&lt;code&gt;yyy&lt;/code&gt; 在缺省 filter 之后。&lt;/li&gt;
&lt;li&gt;特殊符号 &lt;code&gt;-&lt;/code&gt;，表示剔除。比如：&lt;code&gt;filter=&amp;quot;-foo1&amp;quot;&lt;/code&gt;，剔除添加缺省扩展点 &lt;code&gt;foo1&lt;/code&gt;。比如：&lt;code&gt;filter=&amp;quot;-default&amp;quot;&lt;/code&gt;，剔除添加所有缺省扩展点。&lt;/li&gt;
&lt;li&gt;provider 和 service 同时配置的 filter 时，累加所有 filter，而不是覆盖。比如：&lt;code&gt;&amp;lt;dubbo:provider filter=&amp;quot;xxx,yyy&amp;quot;/&amp;gt;&lt;/code&gt; 和 &lt;code&gt;&amp;lt;dubbo:service filter=&amp;quot;aaa,bbb&amp;quot; /&amp;gt;&lt;/code&gt;，则 &lt;code&gt;xxx&lt;/code&gt;,&lt;code&gt;yyy&lt;/code&gt;,&lt;code&gt;aaa&lt;/code&gt;,&lt;code&gt;bbb&lt;/code&gt; 均会生效。如果要覆盖，需配置：&lt;code&gt;&amp;lt;dubbo:service filter=&amp;quot;-xxx,-yyy,aaa,bbb&amp;quot; /&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="扩展接口"&gt;扩展接口&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;org.apache.dubbo.rpc.Filter&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="扩展配置"&gt;扩展配置&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt;&amp;lt;!-- 消费方调用过程拦截 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:reference&lt;/span&gt; filter=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx,yyy&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt;&amp;lt;!-- 消费方调用过程缺省拦截器，将拦截所有reference --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:consumer&lt;/span&gt; filter=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx,yyy&amp;#34;&lt;/span&gt;&lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt;&amp;lt;!-- 提供方调用过程拦截 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:service&lt;/span&gt; filter=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx,yyy&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt;&amp;lt;!-- 提供方调用过程缺省拦截器，将拦截所有service --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:provider&lt;/span&gt; filter=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx,yyy&amp;#34;&lt;/span&gt;&lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="已知扩展"&gt;已知扩展&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.filter.EchoFilter&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.filter.GenericFilter&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.filter.GenericImplFilter&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.filter.TokenFilter&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.filter.AccessLogFilter&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.filter.CountFilter&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.filter.ActiveLimitFilter&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.filter.ClassLoaderFilter&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.filter.ContextFilter&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.filter.ConsumerContextFilter&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.filter.ExceptionFilter&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.filter.ExecuteLimitFilter&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.filter.DeprecatedFilter&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="扩展示例"&gt;扩展示例&lt;/h2&gt;
&lt;p&gt;Maven 项目结构：&lt;/p&gt;</description></item><item><title>引用监听扩展</title><link>https://dubbo.apache.org/zh-cn/docs/references/spis/invoker-listener/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docs/references/spis/invoker-listener/</guid><description>&lt;div class="pageinfo pageinfo-primary"&gt;
&lt;p&gt;此文档已经不再维护。您当前查看的是快照版本。如果想要查看最新版本的文档，请参阅&lt;a href="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/invoker-listener/"&gt;最新版本&lt;/a&gt;。&lt;/p&gt;

&lt;/div&gt;

&lt;h2 id="扩展说明"&gt;扩展说明&lt;/h2&gt;
&lt;p&gt;当有服务引用时，触发该事件。&lt;/p&gt;
&lt;h2 id="扩展接口"&gt;扩展接口&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;org.apache.dubbo.rpc.InvokerListener&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="扩展配置"&gt;扩展配置&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt;&amp;lt;!-- 引用服务监听 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:reference&lt;/span&gt; listener=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx,yyy&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt;&amp;lt;!-- 引用服务缺省监听器 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:consumer&lt;/span&gt; listener=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx,yyy&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="已知扩展"&gt;已知扩展&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;org.apache.dubbo.rpc.listener.DeprecatedInvokerListener&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="扩展示例"&gt;扩展示例&lt;/h2&gt;
&lt;p&gt;Maven 项目结构：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;src
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-main
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-java
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-com
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-xxx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-XxxInvokerListener.java (实现InvokerListener接口)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-resources
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-META-INF
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-dubbo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-org.apache.dubbo.rpc.InvokerListener (纯文本文件，内容为：xxx=com.xxx.XxxInvokerListener)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;XxxInvokerListener.java：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;package&lt;/span&gt; com.xxx;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.rpc.InvokerListener;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.rpc.Invoker;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.rpc.RpcException;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;public&lt;/span&gt; &lt;span style="color:#268bd2"&gt;class&lt;/span&gt; &lt;span style="color:#268bd2"&gt;XxxInvokerListener&lt;/span&gt; &lt;span style="color:#268bd2"&gt;implements&lt;/span&gt; InvokerListener {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#268bd2"&gt;public&lt;/span&gt; &lt;span style="color:#dc322f"&gt;void&lt;/span&gt; &lt;span style="color:#268bd2"&gt;referred&lt;/span&gt;(Invoker&lt;span style="color:#719e07"&gt;&amp;lt;?&amp;gt;&lt;/span&gt; invoker) &lt;span style="color:#268bd2"&gt;throws&lt;/span&gt; RpcException {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#586e75"&gt;// ...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#268bd2"&gt;public&lt;/span&gt; &lt;span style="color:#dc322f"&gt;void&lt;/span&gt; &lt;span style="color:#268bd2"&gt;destroyed&lt;/span&gt;(Invoker&lt;span style="color:#719e07"&gt;&amp;lt;?&amp;gt;&lt;/span&gt; invoker) &lt;span style="color:#268bd2"&gt;throws&lt;/span&gt; RpcException {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#586e75"&gt;// ...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;META-INF/dubbo/org.apache.dubbo.rpc.InvokerListener：&lt;/p&gt;</description></item><item><title>暴露监听扩展</title><link>https://dubbo.apache.org/zh-cn/docs/references/spis/exporter-listener/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docs/references/spis/exporter-listener/</guid><description>&lt;div class="pageinfo pageinfo-primary"&gt;
&lt;p&gt;此文档已经不再维护。您当前查看的是快照版本。如果想要查看最新版本的文档，请参阅&lt;a href="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/exporter-listener/"&gt;最新版本&lt;/a&gt;。&lt;/p&gt;

&lt;/div&gt;

&lt;h2 id="扩展说明"&gt;扩展说明&lt;/h2&gt;
&lt;p&gt;当有服务暴露时，触发该事件。&lt;/p&gt;
&lt;h2 id="扩展接口"&gt;扩展接口&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;org.apache.dubbo.rpc.ExporterListener&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="扩展配置"&gt;扩展配置&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt;&amp;lt;!-- 暴露服务监听 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:service&lt;/span&gt; listener=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx,yyy&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt;&amp;lt;!-- 暴露服务缺省监听器 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:provider&lt;/span&gt; listener=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx,yyy&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="已知扩展"&gt;已知扩展&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;org.apache.dubbo.registry.directory.RegistryExporterListener&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="扩展示例"&gt;扩展示例&lt;/h2&gt;
&lt;p&gt;Maven 项目结构：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;src
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-main
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-java
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-com
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-xxx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-XxxExporterListener.java (实现ExporterListener接口)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-resources
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-META-INF
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-dubbo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-org.apache.dubbo.rpc.ExporterListener (纯文本文件，内容为：xxx=com.xxx.XxxExporterListener)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;XxxExporterListener.java：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;package&lt;/span&gt; com.xxx;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.rpc.ExporterListener;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.rpc.Exporter;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.rpc.RpcException;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;public&lt;/span&gt; &lt;span style="color:#268bd2"&gt;class&lt;/span&gt; &lt;span style="color:#268bd2"&gt;XxxExporterListener&lt;/span&gt; &lt;span style="color:#268bd2"&gt;implements&lt;/span&gt; ExporterListener {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#268bd2"&gt;public&lt;/span&gt; &lt;span style="color:#dc322f"&gt;void&lt;/span&gt; &lt;span style="color:#268bd2"&gt;exported&lt;/span&gt;(Exporter&lt;span style="color:#719e07"&gt;&amp;lt;?&amp;gt;&lt;/span&gt; exporter) &lt;span style="color:#268bd2"&gt;throws&lt;/span&gt; RpcException {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#586e75"&gt;// ...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#268bd2"&gt;public&lt;/span&gt; &lt;span style="color:#dc322f"&gt;void&lt;/span&gt; &lt;span style="color:#268bd2"&gt;unexported&lt;/span&gt;(Exporter&lt;span style="color:#719e07"&gt;&amp;lt;?&amp;gt;&lt;/span&gt; exporter) &lt;span style="color:#268bd2"&gt;throws&lt;/span&gt; RpcException {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#586e75"&gt;// ...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;META-INF/dubbo/org.apache.dubbo.rpc.ExporterListener：&lt;/p&gt;</description></item><item><title>集群扩展</title><link>https://dubbo.apache.org/zh-cn/docs/references/spis/cluster/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docs/references/spis/cluster/</guid><description>&lt;div class="pageinfo pageinfo-primary"&gt;
&lt;p&gt;此文档已经不再维护。您当前查看的是快照版本。如果想要查看最新版本的文档，请参阅&lt;a href="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/cluster/"&gt;最新版本&lt;/a&gt;。&lt;/p&gt;

&lt;/div&gt;

&lt;h2 id="扩展说明"&gt;扩展说明&lt;/h2&gt;
&lt;p&gt;当有多个服务提供方时，将多个服务提供方组织成一个集群，并伪装成一个提供方。&lt;/p&gt;
&lt;h2 id="扩展接口"&gt;扩展接口&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;org.apache.dubbo.rpc.cluster.Cluster&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="扩展配置"&gt;扩展配置&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:protocol&lt;/span&gt; cluster=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt;&amp;lt;!-- 缺省值配置，如果&amp;lt;dubbo:protocol&amp;gt;没有配置cluster时，使用此配置 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:provider&lt;/span&gt; cluster=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="已知扩展"&gt;已知扩展&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.cluster.support.wrapper.MockClusterWrapper&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.cluster.support.FailoverCluster&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.cluster.support.FailfastCluster&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.cluster.support.FailsafeCluster&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.cluster.support.FailbackCluster&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.cluster.support.ForkingCluster&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.cluster.support.AvailableCluster&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.cluster.support.MergeableCluster&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.cluster.support.BroadcastCluster&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.cluster.support.registry.ZoneAwareCluster&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="扩展示例"&gt;扩展示例&lt;/h2&gt;
&lt;p&gt;Maven 项目结构：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;src
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-main
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-java
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-com
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-xxx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-XxxCluster.java (实现Cluster接口)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-resources
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-META-INF
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-dubbo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-org.apache.dubbo.rpc.cluster.Cluster (纯文本文件，内容为：xxx=com.xxx.XxxCluster)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;XxxCluster.java：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;package&lt;/span&gt; com.xxx;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.rpc.cluster.Cluster;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.rpc.cluster.support.AbstractClusterInvoker;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.rpc.cluster.Directory;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.rpc.cluster.LoadBalance;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.rpc.Invoker;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.rpc.Invocation;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.rpc.Result;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.rpc.RpcException;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;public&lt;/span&gt; &lt;span style="color:#268bd2"&gt;class&lt;/span&gt; &lt;span style="color:#268bd2"&gt;XxxCluster&lt;/span&gt; &lt;span style="color:#268bd2"&gt;implements&lt;/span&gt; Cluster {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#268bd2"&gt;public&lt;/span&gt; &lt;span style="color:#719e07"&gt;&amp;lt;&lt;/span&gt;T&lt;span style="color:#719e07"&gt;&amp;gt;&lt;/span&gt; Invoker&lt;span style="color:#719e07"&gt;&amp;lt;&lt;/span&gt;T&lt;span style="color:#719e07"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;merge&lt;/span&gt;(Directory&lt;span style="color:#719e07"&gt;&amp;lt;&lt;/span&gt;T&lt;span style="color:#719e07"&gt;&amp;gt;&lt;/span&gt; directory) &lt;span style="color:#268bd2"&gt;throws&lt;/span&gt; RpcException {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#719e07"&gt;return&lt;/span&gt; &lt;span style="color:#719e07"&gt;new&lt;/span&gt; AbstractClusterInvoker&lt;span style="color:#719e07"&gt;&amp;lt;&lt;/span&gt;T&lt;span style="color:#719e07"&gt;&amp;gt;&lt;/span&gt;(directory) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#268bd2"&gt;public&lt;/span&gt; Result &lt;span style="color:#268bd2"&gt;doInvoke&lt;/span&gt;(Invocation invocation, List&lt;span style="color:#719e07"&gt;&amp;lt;&lt;/span&gt;Invoker&lt;span style="color:#719e07"&gt;&amp;lt;&lt;/span&gt;T&lt;span style="color:#719e07"&gt;&amp;gt;&amp;gt;&lt;/span&gt; invokers, LoadBalance loadbalance) &lt;span style="color:#268bd2"&gt;throws&lt;/span&gt; RpcException {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#586e75"&gt;// ...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; };
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;META-INF/dubbo/org.apache.dubbo.rpc.cluster.Cluster：&lt;/p&gt;</description></item><item><title>路由扩展</title><link>https://dubbo.apache.org/zh-cn/docs/references/spis/router/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docs/references/spis/router/</guid><description>&lt;div class="pageinfo pageinfo-primary"&gt;
&lt;p&gt;此文档已经不再维护。您当前查看的是快照版本。如果想要查看最新版本的文档，请参阅&lt;a href="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/router/"&gt;最新版本&lt;/a&gt;。&lt;/p&gt;

&lt;/div&gt;

&lt;h2 id="扩展说明"&gt;扩展说明&lt;/h2&gt;
&lt;p&gt;从多个服务提供方中选择一个进行调用。&lt;/p&gt;
&lt;h2 id="扩展接口"&gt;扩展接口&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.cluster.RouterFactory&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.cluster.Router&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="已知扩展"&gt;已知扩展&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.cluster.router.ScriptRouterFactory&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.cluster.router.FileRouterFactory&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.cluster.router.condition.config.AppRouterFactory&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.cluster.CacheableRouterFactory&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.cluster.router.condition.ConditionRouterFactory&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.cluster.router.mock.MockRouterFactory&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.cluster.router.condition.config.ServiceRouterFactory&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.cluster.router.tag.TagRouterFactory&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="扩展示例"&gt;扩展示例&lt;/h2&gt;
&lt;p&gt;Maven 项目结构：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;src
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-main
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-java
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-com
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-xxx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-XxxRouterFactory.java (实现RouterFactory接口)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-resources
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-META-INF
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-dubbo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-org.apache.dubbo.rpc.cluster.RouterFactory (纯文本文件，内容为：xxx=com.xxx.XxxRouterFactory)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;XxxRouterFactory.java：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;package&lt;/span&gt; com.xxx;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.rpc.cluster.RouterFactory;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.rpc.Invoker;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.rpc.Invocation;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.rpc.RpcException;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;public&lt;/span&gt; &lt;span style="color:#268bd2"&gt;class&lt;/span&gt; &lt;span style="color:#268bd2"&gt;XxxRouterFactory&lt;/span&gt; &lt;span style="color:#268bd2"&gt;implements&lt;/span&gt; RouterFactory {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#268bd2"&gt;public&lt;/span&gt; Router &lt;span style="color:#268bd2"&gt;getRouter&lt;/span&gt;(URL url) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#586e75"&gt;// ...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;META-INF/dubbo/org.apache.dubbo.rpc.cluster.RouterFactory：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-properties" data-lang="properties"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;xxx&lt;span style="color:#719e07"&gt;=&lt;/span&gt;&lt;span style="color:#2aa198"&gt;com.xxx.XxxRouterFactory&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>负载均衡扩展</title><link>https://dubbo.apache.org/zh-cn/docs/references/spis/load-balance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docs/references/spis/load-balance/</guid><description>&lt;div class="pageinfo pageinfo-primary"&gt;
&lt;p&gt;此文档已经不再维护。您当前查看的是快照版本。如果想要查看最新版本的文档，请参阅&lt;a href="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/load-balance/"&gt;最新版本&lt;/a&gt;。&lt;/p&gt;

&lt;/div&gt;

&lt;h2 id="扩展说明"&gt;扩展说明&lt;/h2&gt;
&lt;p&gt;从多个服务提供方中选择一个进行调用&lt;/p&gt;
&lt;h2 id="扩展接口"&gt;扩展接口&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;org.apache.dubbo.rpc.cluster.LoadBalance&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="扩展配置"&gt;扩展配置&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:protocol&lt;/span&gt; loadbalance=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt;&amp;lt;!-- 缺省值设置，当&amp;lt;dubbo:protocol&amp;gt;没有配置loadbalance时，使用此配置 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:provider&lt;/span&gt; loadbalance=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="已知扩展"&gt;已知扩展&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.cluster.loadbalance.RandomLoadBalance&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.cluster.loadbalance.RoundRobinLoadBalance&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.cluster.loadbalance.LeastActiveLoadBalance&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.cluster.loadbalance.ConsistentHashLoadBalance&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.cluster.loadbalance.ShortestResponseLoadBalance&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="扩展示例"&gt;扩展示例&lt;/h2&gt;
&lt;p&gt;Maven 项目结构：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;src
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-main
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-java
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-com
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-xxx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-XxxLoadBalance.java (实现LoadBalance接口)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-resources
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-META-INF
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-dubbo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-org.apache.dubbo.rpc.cluster.LoadBalance (纯文本文件，内容为：xxx=com.xxx.XxxLoadBalance)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;XxxLoadBalance.java：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;package&lt;/span&gt; com.xxx;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.rpc.cluster.LoadBalance;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.rpc.Invoker;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.rpc.Invocation;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.rpc.RpcException; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;public&lt;/span&gt; &lt;span style="color:#268bd2"&gt;class&lt;/span&gt; &lt;span style="color:#268bd2"&gt;XxxLoadBalance&lt;/span&gt; &lt;span style="color:#268bd2"&gt;implements&lt;/span&gt; LoadBalance {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#268bd2"&gt;public&lt;/span&gt; &lt;span style="color:#719e07"&gt;&amp;lt;&lt;/span&gt;T&lt;span style="color:#719e07"&gt;&amp;gt;&lt;/span&gt; Invoker&lt;span style="color:#719e07"&gt;&amp;lt;&lt;/span&gt;T&lt;span style="color:#719e07"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;select&lt;/span&gt;(List&lt;span style="color:#719e07"&gt;&amp;lt;&lt;/span&gt;Invoker&lt;span style="color:#719e07"&gt;&amp;lt;&lt;/span&gt;T&lt;span style="color:#719e07"&gt;&amp;gt;&amp;gt;&lt;/span&gt; invokers, Invocation invocation) &lt;span style="color:#268bd2"&gt;throws&lt;/span&gt; RpcException {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#586e75"&gt;// ...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;META-INF/dubbo/org.apache.dubbo.rpc.cluster.LoadBalance：&lt;/p&gt;</description></item><item><title>合并结果扩展</title><link>https://dubbo.apache.org/zh-cn/docs/references/spis/merger/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docs/references/spis/merger/</guid><description>&lt;div class="pageinfo pageinfo-primary"&gt;
&lt;p&gt;此文档已经不再维护。您当前查看的是快照版本。如果想要查看最新版本的文档，请参阅&lt;a href="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/merger/"&gt;最新版本&lt;/a&gt;。&lt;/p&gt;

&lt;/div&gt;

&lt;h2 id="扩展说明"&gt;扩展说明&lt;/h2&gt;
&lt;p&gt;合并返回结果，用于分组聚合。&lt;/p&gt;
&lt;h2 id="扩展接口"&gt;扩展接口&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;org.apache.dubbo.rpc.cluster.Merger&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="扩展配置"&gt;扩展配置&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:method&lt;/span&gt; merger=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="已知扩展"&gt;已知扩展&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.cluster.merger.ArrayMerger&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.cluster.merger.ListMerger&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.cluster.merger.SetMerger&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.cluster.merger.MapMerger&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.cluster.merger.ByteArrayMerger&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.cluster.merger.CharArrayMerger&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.cluster.merger.ShortArrayMerger&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.cluster.merger.IntArrayMerger&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.cluster.merger.LongArrayMerger&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.cluster.merger.FloatArrayMerger&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.cluster.merger.DoubleArrayMerger&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.cluster.merger.BooleanArrayMerger&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="扩展示例"&gt;扩展示例&lt;/h2&gt;
&lt;p&gt;Maven 项目结构：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;src
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-main
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-java
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-com
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-xxx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-XxxMerger.java (实现Merger接口)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-resources
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-META-INF
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-dubbo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-org.apache.dubbo.rpc.cluster.Merger (纯文本文件，内容为：xxx=com.xxx.XxxMerger)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;XxxMerger.java：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;package&lt;/span&gt; com.xxx;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.rpc.cluster.Merger;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;public&lt;/span&gt; &lt;span style="color:#268bd2"&gt;class&lt;/span&gt; &lt;span style="color:#268bd2"&gt;XxxMerger&lt;/span&gt;&lt;span style="color:#719e07"&gt;&amp;lt;&lt;/span&gt;T&lt;span style="color:#719e07"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;implements&lt;/span&gt; Merger&lt;span style="color:#719e07"&gt;&amp;lt;&lt;/span&gt;T&lt;span style="color:#719e07"&gt;&amp;gt;&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#268bd2"&gt;public&lt;/span&gt; T &lt;span style="color:#268bd2"&gt;merge&lt;/span&gt;(T... results) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#586e75"&gt;// ...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;META-INF/dubbo/org.apache.dubbo.rpc.cluster.Merger：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-properties" data-lang="properties"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;xxx&lt;span style="color:#719e07"&gt;=&lt;/span&gt;&lt;span style="color:#2aa198"&gt;com.xxx.XxxMerger&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>注册中心扩展</title><link>https://dubbo.apache.org/zh-cn/docs/references/spis/registry/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docs/references/spis/registry/</guid><description>&lt;div class="pageinfo pageinfo-primary"&gt;
&lt;p&gt;此文档已经不再维护。您当前查看的是快照版本。如果想要查看最新版本的文档，请参阅&lt;a href="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/registry/"&gt;最新版本&lt;/a&gt;。&lt;/p&gt;

&lt;/div&gt;

&lt;h2 id="扩展说明"&gt;扩展说明&lt;/h2&gt;
&lt;p&gt;负责服务的注册与发现。&lt;/p&gt;
&lt;h2 id="扩展接口"&gt;扩展接口&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.registry.RegistryFactory&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.registry.Registry&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="扩展配置"&gt;扩展配置&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt;&amp;lt;!-- 定义注册中心 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:registry&lt;/span&gt; id=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx1&amp;#34;&lt;/span&gt; address=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx://ip:port&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt;&amp;lt;!-- 引用注册中心，如果没有配置registry属性，将在ApplicationContext中自动扫描registry配置 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:service&lt;/span&gt; registry=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx1&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt;&amp;lt;!-- 引用注册中心缺省值，当&amp;lt;dubbo:service&amp;gt;没有配置registry属性时，使用此配置 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:provider&lt;/span&gt; registry=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx1&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="扩展契约"&gt;扩展契约&lt;/h2&gt;
&lt;p&gt;RegistryFactory.java：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;public&lt;/span&gt; &lt;span style="color:#268bd2"&gt;interface&lt;/span&gt; &lt;span style="color:#268bd2"&gt;RegistryFactory&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#586e75"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt; * 连接注册中心.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt; * 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt; * 连接注册中心需处理契约：&amp;lt;br&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt; * 1. 当设置check=false时表示不检查连接，否则在连接不上时抛出异常。&amp;lt;br&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt; * 2. 支持URL上的username:password权限认证。&amp;lt;br&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt; * 3. 支持backup=10.20.153.10备选注册中心集群地址。&amp;lt;br&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt; * 4. 支持file=registry.cache本地磁盘文件缓存。&amp;lt;br&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt; * 5. 支持timeout=1000请求超时设置。&amp;lt;br&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt; * 6. 支持session=60000会话超时或过期设置。&amp;lt;br&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt; * 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt; * @param url 注册中心地址，不允许为空
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt; * @return 注册中心引用，总不返回空
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Registry &lt;span style="color:#268bd2"&gt;getRegistry&lt;/span&gt;(URL url); 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;RegistryService.java：&lt;/p&gt;</description></item><item><title>监控中心扩展</title><link>https://dubbo.apache.org/zh-cn/docs/references/spis/monitor/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docs/references/spis/monitor/</guid><description>&lt;div class="pageinfo pageinfo-primary"&gt;
&lt;p&gt;此文档已经不再维护。您当前查看的是快照版本。如果想要查看最新版本的文档，请参阅&lt;a href="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/monitor/"&gt;最新版本&lt;/a&gt;。&lt;/p&gt;

&lt;/div&gt;

&lt;h2 id="扩展说明"&gt;扩展说明&lt;/h2&gt;
&lt;p&gt;负责服务调用次和调用时间的监控。&lt;/p&gt;
&lt;h2 id="扩展接口"&gt;扩展接口&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.monitor.MonitorFactory&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.monitor.Monitor&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="扩展配置"&gt;扩展配置&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt;&amp;lt;!-- 定义监控中心 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:monitor&lt;/span&gt; address=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx://ip:port&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="已知扩展"&gt;已知扩展&lt;/h2&gt;
&lt;p&gt;org.apache.dubbo.monitor.support.dubbo.DubboMonitorFactory&lt;/p&gt;
&lt;h2 id="扩展示例"&gt;扩展示例&lt;/h2&gt;
&lt;p&gt;Maven 项目结构：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;src
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-main
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-java
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-com
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-xxx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-XxxMonitorFactoryjava (实现MonitorFactory接口)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-XxxMonitor.java (实现Monitor接口)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-resources
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-META-INF
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-dubbo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-org.apache.dubbo.monitor.MonitorFactory (纯文本文件，内容为：xxx=com.xxx.XxxMonitorFactory)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;XxxMonitorFactory.java：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;package&lt;/span&gt; com.xxx;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.monitor.MonitorFactory;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.monitor.Monitor;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.common.URL;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;public&lt;/span&gt; &lt;span style="color:#268bd2"&gt;class&lt;/span&gt; &lt;span style="color:#268bd2"&gt;XxxMonitorFactory&lt;/span&gt; &lt;span style="color:#268bd2"&gt;implements&lt;/span&gt; MonitorFactory {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#268bd2"&gt;public&lt;/span&gt; Monitor &lt;span style="color:#268bd2"&gt;getMonitor&lt;/span&gt;(URL url) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#719e07"&gt;return&lt;/span&gt; &lt;span style="color:#719e07"&gt;new&lt;/span&gt; XxxMonitor(url);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;XxxMonitor.java：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;package&lt;/span&gt; com.xxx;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.monitor.Monitor;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;public&lt;/span&gt; &lt;span style="color:#268bd2"&gt;class&lt;/span&gt; &lt;span style="color:#268bd2"&gt;XxxMonitor&lt;/span&gt; &lt;span style="color:#268bd2"&gt;implements&lt;/span&gt; Monitor {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#268bd2"&gt;public&lt;/span&gt; &lt;span style="color:#dc322f"&gt;void&lt;/span&gt; &lt;span style="color:#268bd2"&gt;count&lt;/span&gt;(URL statistics) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#586e75"&gt;// ...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;META-INF/dubbo/org.apache.dubbo.monitor.MonitorFactory：&lt;/p&gt;</description></item><item><title>扩展点加载扩展</title><link>https://dubbo.apache.org/zh-cn/docs/references/spis/extension-factory/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docs/references/spis/extension-factory/</guid><description>&lt;div class="pageinfo pageinfo-primary"&gt;
&lt;p&gt;此文档已经不再维护。您当前查看的是快照版本。如果想要查看最新版本的文档，请参阅&lt;a href="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/extension-factory/"&gt;最新版本&lt;/a&gt;。&lt;/p&gt;

&lt;/div&gt;

&lt;h2 id="扩展说明"&gt;扩展说明&lt;/h2&gt;
&lt;p&gt;扩展点本身的加载容器，可从不同容器加载扩展点。&lt;/p&gt;
&lt;h2 id="扩展接口"&gt;扩展接口&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;org.apache.dubbo.common.extension.ExtensionFactory&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="扩展配置"&gt;扩展配置&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:application&lt;/span&gt; compiler=&lt;span style="color:#2aa198"&gt;&amp;#34;jdk&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="已知扩展"&gt;已知扩展&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.common.extension.factory.SpiExtensionFactory&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.config.spring.extension.SpringExtensionFactory&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="扩展示例"&gt;扩展示例&lt;/h2&gt;
&lt;p&gt;Maven 项目结构：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;src
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-main
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-java
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-com
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-xxx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-XxxExtensionFactory.java (实现ExtensionFactory接口)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-resources
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-META-INF
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-dubbo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-org.apache.dubbo.common.extension.ExtensionFactory (纯文本文件，内容为：xxx=com.xxx.XxxExtensionFactory)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;XxxExtensionFactory.java：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;package&lt;/span&gt; com.xxx;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.common.extension.ExtensionFactory;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;public&lt;/span&gt; &lt;span style="color:#268bd2"&gt;class&lt;/span&gt; &lt;span style="color:#268bd2"&gt;XxxExtensionFactory&lt;/span&gt; &lt;span style="color:#268bd2"&gt;implements&lt;/span&gt; ExtensionFactory {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#268bd2"&gt;public&lt;/span&gt; Object &lt;span style="color:#268bd2"&gt;getExtension&lt;/span&gt;(Class&lt;span style="color:#719e07"&gt;&amp;lt;?&amp;gt;&lt;/span&gt; type, String name) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#586e75"&gt;// ...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;META-INF/dubbo/org.apache.dubbo.common.extension.ExtensionFactory：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-properties" data-lang="properties"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;xxx&lt;span style="color:#719e07"&gt;=&lt;/span&gt;&lt;span style="color:#2aa198"&gt;com.xxx.XxxExtensionFactory&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>动态代理扩展</title><link>https://dubbo.apache.org/zh-cn/docs/references/spis/proxy-factory/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docs/references/spis/proxy-factory/</guid><description>&lt;div class="pageinfo pageinfo-primary"&gt;
&lt;p&gt;此文档已经不再维护。您当前查看的是快照版本。如果想要查看最新版本的文档，请参阅&lt;a href="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/proxy-factory/"&gt;最新版本&lt;/a&gt;。&lt;/p&gt;

&lt;/div&gt;

&lt;h2 id="扩展说明"&gt;扩展说明&lt;/h2&gt;
&lt;p&gt;将 &lt;code&gt;Invoker&lt;/code&gt; 接口转换成业务接口。&lt;/p&gt;
&lt;h2 id="扩展接口"&gt;扩展接口&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;org.apache.dubbo.rpc.ProxyFactory&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="扩展配置"&gt;扩展配置&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:protocol&lt;/span&gt; proxy=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt;&amp;lt;!-- 缺省值配置，当&amp;lt;dubbo:protocol&amp;gt;没有配置proxy属性时，使用此配置 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:provider&lt;/span&gt; proxy=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="已知扩展"&gt;已知扩展&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.proxy.JdkProxyFactory&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.proxy.JavassistProxyFactory&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="扩展示例"&gt;扩展示例&lt;/h2&gt;
&lt;p&gt;Maven 项目结构：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;src
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-main
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-java
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-com
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-xxx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-XxxProxyFactory.java (实现ProxyFactory接口)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-resources
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-META-INF
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-dubbo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-org.apache.dubbo.rpc.ProxyFactory (纯文本文件，内容为：xxx=com.xxx.XxxProxyFactory)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;XxxProxyFactory.java：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;package&lt;/span&gt; com.xxx;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.rpc.ProxyFactory;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.rpc.Invoker;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.rpc.RpcException;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;public&lt;/span&gt; &lt;span style="color:#268bd2"&gt;class&lt;/span&gt; &lt;span style="color:#268bd2"&gt;XxxProxyFactory&lt;/span&gt; &lt;span style="color:#268bd2"&gt;implements&lt;/span&gt; ProxyFactory {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#268bd2"&gt;public&lt;/span&gt; &lt;span style="color:#719e07"&gt;&amp;lt;&lt;/span&gt;T&lt;span style="color:#719e07"&gt;&amp;gt;&lt;/span&gt; T &lt;span style="color:#268bd2"&gt;getProxy&lt;/span&gt;(Invoker&lt;span style="color:#719e07"&gt;&amp;lt;&lt;/span&gt;T&lt;span style="color:#719e07"&gt;&amp;gt;&lt;/span&gt; invoker) &lt;span style="color:#268bd2"&gt;throws&lt;/span&gt; RpcException {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#586e75"&gt;// ...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#268bd2"&gt;public&lt;/span&gt; &lt;span style="color:#719e07"&gt;&amp;lt;&lt;/span&gt;T&lt;span style="color:#719e07"&gt;&amp;gt;&lt;/span&gt; Invoker&lt;span style="color:#719e07"&gt;&amp;lt;&lt;/span&gt;T&lt;span style="color:#719e07"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;getInvoker&lt;/span&gt;(T proxy, Class&lt;span style="color:#719e07"&gt;&amp;lt;&lt;/span&gt;T&lt;span style="color:#719e07"&gt;&amp;gt;&lt;/span&gt; type, URL url) &lt;span style="color:#268bd2"&gt;throws&lt;/span&gt; RpcException {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#586e75"&gt;// ...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;META-INF/dubbo/org.apache.dubbo.rpc.ProxyFactory：&lt;/p&gt;</description></item><item><title>编译器扩展</title><link>https://dubbo.apache.org/zh-cn/docs/references/spis/compiler/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docs/references/spis/compiler/</guid><description>&lt;div class="pageinfo pageinfo-primary"&gt;
&lt;p&gt;此文档已经不再维护。您当前查看的是快照版本。如果想要查看最新版本的文档，请参阅&lt;a href="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/compiler/"&gt;最新版本&lt;/a&gt;。&lt;/p&gt;

&lt;/div&gt;

&lt;h2 id="扩展说明"&gt;扩展说明&lt;/h2&gt;
&lt;p&gt;Java 代码编译器，用于动态生成字节码，加速调用。&lt;/p&gt;
&lt;h2 id="扩展接口"&gt;扩展接口&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;org.apache.dubbo.common.compiler.Compiler&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="扩展配置"&gt;扩展配置&lt;/h2&gt;
&lt;p&gt;自动加载&lt;/p&gt;
&lt;h2 id="已知扩展"&gt;已知扩展&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.common.compiler.support.JdkCompiler&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.common.compiler.support.JavassistCompiler&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="扩展示例"&gt;扩展示例&lt;/h2&gt;
&lt;p&gt;Maven 项目结构：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;src
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-main
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-java
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-com
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-xxx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-XxxCompiler.java (实现Compiler接口)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-resources
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-META-INF
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-dubbo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-org.apache.dubbo.common.compiler.Compiler (纯文本文件，内容为：xxx=com.xxx.XxxCompiler)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;XxxCompiler.java：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;package&lt;/span&gt; com.xxx;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.common.compiler.Compiler;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;public&lt;/span&gt; &lt;span style="color:#268bd2"&gt;class&lt;/span&gt; &lt;span style="color:#268bd2"&gt;XxxCompiler&lt;/span&gt; &lt;span style="color:#268bd2"&gt;implements&lt;/span&gt; Compiler {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#268bd2"&gt;public&lt;/span&gt; Object &lt;span style="color:#268bd2"&gt;getExtension&lt;/span&gt;(Class&lt;span style="color:#719e07"&gt;&amp;lt;?&amp;gt;&lt;/span&gt; type, String name) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#586e75"&gt;// ...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;META-INF/dubbo/org.apache.dubbo.common.compiler.Compiler：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-properties" data-lang="properties"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;xxx&lt;span style="color:#719e07"&gt;=&lt;/span&gt;&lt;span style="color:#2aa198"&gt;com.xxx.XxxCompiler&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>配置中心扩展</title><link>https://dubbo.apache.org/zh-cn/docs/references/spis/config-center/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docs/references/spis/config-center/</guid><description>&lt;div class="pageinfo pageinfo-primary"&gt;
&lt;p&gt;此文档已经不再维护。您当前查看的是快照版本。如果想要查看最新版本的文档，请参阅&lt;a href="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/config-center/"&gt;最新版本&lt;/a&gt;。&lt;/p&gt;

&lt;/div&gt;

&lt;h2 id="设计目的"&gt;设计目的&lt;/h2&gt;
&lt;p&gt;配置中心的核心功能是作为 Key-Value 存储，Dubbo 框架告知配置中心其关心的 key，配置中心返回该key对应的 value 值。&lt;/p&gt;
&lt;p&gt;按照应用场景划分，配置中心在 Dubbo 框架中主要承担以下职责：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;作为外部化配置中心，即存储 dubbo.properties 配置文件，此时，key 值通常为文件名如 dubbo.properties，value 则为配置文件内容。&lt;/li&gt;
&lt;li&gt;存储单个配置项，如各种开关项、常量值等。&lt;/li&gt;
&lt;li&gt;存储服务治理规则，此时key通常按照 &amp;ldquo;服务名+规则类型&amp;rdquo; 的格式来组织，而 value 则为具体的治理规则。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;为了进一步实现对 key-value 的分组管理，Dubbo 的配置中心还加入了 namespace、group 的概念，这些概念在很多专业的第三方配置中心中都有体现，通常情况下，namespace 用来隔离不同的租户，group 用来对同一租户的key集合做分组。&lt;/p&gt;
&lt;p&gt;当前，Dubbo 配置中心实现了对 Zookeeper、Nacos、Etcd、Consul、Apollo 的对接，接下来我们具体看一下 Dubbo 抽象的配置中心是怎么映射到具体的第三方实现中的。&lt;/p&gt;
&lt;h2 id="扩展接口"&gt;扩展接口&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.configcenter.DynamicConfigurationFactory&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.configcenter.DynamicConfiguration&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="已知扩展"&gt;已知扩展&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.configcenter.support.zookeeper.ZookeeperDynamicConfigurationFactory&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.configcenter.support.nacos.NacosDynamicConfigurationFactory&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.configcenter.support.etcd.EtcdDynamicConfigurationFactory&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.configcenter.consul.ConsulDynamicConfigurationFactory&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.configcenter.support.apollo.ApolloDynamicConfigurationFactory&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.common.config.configcenter.file.FileSystemDynamicConfigurationFactory&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="实现原理"&gt;实现原理&lt;/h2&gt;
&lt;h3 id="zookeeper"&gt;Zookeeper&lt;/h3&gt;
&lt;p&gt;zookeeper提供了一个树状的存储模型，其实现原理如下：&lt;/p&gt;
&lt;p&gt;&lt;img src="https://dubbo.apache.org/imgs/dev/configcenter_zk_model.jpg" alt="image-20190127225608553"&gt;&lt;/p&gt;
&lt;p&gt;namespace, group, key 等分别对应不同层级的 ZNode 节点，而 value 则作为根 ZNode 节点的值存储。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;外部化配置中心 dubbo.properties&lt;/p&gt;
&lt;p&gt;&lt;img src="https://dubbo.apache.org/imgs/dev/configcenter_zk_properties.jpg" alt="image-20190127225608553"&gt;&lt;/p&gt;
&lt;p&gt;上图展示了两个不同作用域的 dubbo.properties 文件在 zookeeper 中的存储结构：&lt;/p&gt;</description></item><item><title>消息派发扩展</title><link>https://dubbo.apache.org/zh-cn/docs/references/spis/dispatcher/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docs/references/spis/dispatcher/</guid><description>&lt;div class="pageinfo pageinfo-primary"&gt;
&lt;p&gt;此文档已经不再维护。您当前查看的是快照版本。如果想要查看最新版本的文档，请参阅&lt;a href="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/dispatcher/"&gt;最新版本&lt;/a&gt;。&lt;/p&gt;

&lt;/div&gt;

&lt;h2 id="扩展说明"&gt;扩展说明&lt;/h2&gt;
&lt;p&gt;通道信息派发器，用于指定线程池模型。&lt;/p&gt;
&lt;h2 id="扩展接口"&gt;扩展接口&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;org.apache.dubbo.remoting.Dispatcher&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="扩展配置"&gt;扩展配置&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:protocol&lt;/span&gt; dispatcher=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt;&amp;lt;!-- 缺省值设置，当&amp;lt;dubbo:protocol&amp;gt;没有配置dispatcher属性时，使用此配置 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:provider&lt;/span&gt; dispatcher=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="已知扩展"&gt;已知扩展&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.remoting.transport.dispatcher.all.AllDispatcher&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.remoting.transport.dispatcher.direct.DirectDispatcher&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.remoting.transport.dispatcher.message.MessageOnlyDispatcher&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.remoting.transport.dispatcher.execution.ExecutionDispatcher&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.remoting.transport.dispatcher.connection.ConnectionOrderedDispatcher&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="扩展示例"&gt;扩展示例&lt;/h2&gt;
&lt;p&gt;Maven 项目结构：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;src
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-main
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-java
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-com
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-xxx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-XxxDispatcher.java (实现Dispatcher接口)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-resources
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-META-INF
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-dubbo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-org.apache.dubbo.remoting.Dispatcher (纯文本文件，内容为：xxx=com.xxx.XxxDispatcher)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;XxxDispatcher.java：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;package&lt;/span&gt; com.xxx;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.remoting.Dispatcher;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;public&lt;/span&gt; &lt;span style="color:#268bd2"&gt;class&lt;/span&gt; &lt;span style="color:#268bd2"&gt;XxxDispatcher&lt;/span&gt; &lt;span style="color:#268bd2"&gt;implements&lt;/span&gt; Dispatcher {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#268bd2"&gt;public&lt;/span&gt; Group &lt;span style="color:#268bd2"&gt;lookup&lt;/span&gt;(URL url) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#586e75"&gt;// ...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;META-INF/dubbo/org.apache.dubbo.remoting.Dispatcher：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-properties" data-lang="properties"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;xxx&lt;span style="color:#719e07"&gt;=&lt;/span&gt;&lt;span style="color:#2aa198"&gt;com.xxx.XxxDispatcher&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>线程池扩展</title><link>https://dubbo.apache.org/zh-cn/docs/references/spis/threadpool/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docs/references/spis/threadpool/</guid><description>&lt;div class="pageinfo pageinfo-primary"&gt;
&lt;p&gt;此文档已经不再维护。您当前查看的是快照版本。如果想要查看最新版本的文档，请参阅&lt;a href="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/threadpool/"&gt;最新版本&lt;/a&gt;。&lt;/p&gt;

&lt;/div&gt;

&lt;h2 id="扩展说明"&gt;扩展说明&lt;/h2&gt;
&lt;p&gt;服务提供方线程池实现策略，当服务器收到一个请求时，需要在线程池中创建一个线程去执行服务提供方业务逻辑。&lt;/p&gt;
&lt;h2 id="扩展接口"&gt;扩展接口&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;org.apache.dubbo.common.threadpool.ThreadPool&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="扩展配置"&gt;扩展配置&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:protocol&lt;/span&gt; threadpool=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt;&amp;lt;!-- 缺省值设置，当&amp;lt;dubbo:protocol&amp;gt;没有配置threadpool时，使用此配置 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:provider&lt;/span&gt; threadpool=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="已知扩展"&gt;已知扩展&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.common.threadpool.FixedThreadPool&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.common.threadpool.CachedThreadPool&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="扩展示例"&gt;扩展示例&lt;/h2&gt;
&lt;p&gt;Maven 项目结构：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;src
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-main
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-java
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-com
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-xxx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-XxxThreadPool.java (实现ThreadPool接口)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-resources
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-META-INF
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-dubbo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-org.apache.dubbo.common.threadpool.ThreadPool (纯文本文件，内容为：xxx=com.xxx.XxxThreadPool)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;XxxThreadPool.java：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;package&lt;/span&gt; com.xxx;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.common.threadpool.ThreadPool;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; java.util.concurrent.Executor;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;public&lt;/span&gt; &lt;span style="color:#268bd2"&gt;class&lt;/span&gt; &lt;span style="color:#268bd2"&gt;XxxThreadPool&lt;/span&gt; &lt;span style="color:#268bd2"&gt;implements&lt;/span&gt; ThreadPool {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#268bd2"&gt;public&lt;/span&gt; Executor &lt;span style="color:#268bd2"&gt;getExecutor&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#586e75"&gt;// ...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;META-INF/dubbo/org.apache.dubbo.common.threadpool.ThreadPool：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-properties" data-lang="properties"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;xxx&lt;span style="color:#719e07"&gt;=&lt;/span&gt;&lt;span style="color:#2aa198"&gt;com.xxx.XxxThreadPool&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>序列化扩展</title><link>https://dubbo.apache.org/zh-cn/docs/references/spis/serialize/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docs/references/spis/serialize/</guid><description>&lt;div class="pageinfo pageinfo-primary"&gt;
&lt;p&gt;此文档已经不再维护。您当前查看的是快照版本。如果想要查看最新版本的文档，请参阅&lt;a href="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/serialize/"&gt;最新版本&lt;/a&gt;。&lt;/p&gt;

&lt;/div&gt;

&lt;h2 id="扩展说明"&gt;扩展说明&lt;/h2&gt;
&lt;p&gt;将对象转成字节流，用于网络传输，以及将字节流转为对象，用于在收到字节流数据后还原成对象。&lt;/p&gt;
&lt;h2 id="扩展接口"&gt;扩展接口&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.common.serialize.Serialization&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.common.serialize.ObjectInput&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.common.serialize.ObjectOutput&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="扩展配置"&gt;扩展配置&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt;&amp;lt;!-- 协议的序列化方式 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:protocol&lt;/span&gt; serialization=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt;&amp;lt;!-- 缺省值设置，当&amp;lt;dubbo:protocol&amp;gt;没有配置serialization时，使用此配置 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:provider&lt;/span&gt; serialization=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="已知扩展"&gt;已知扩展&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.common.serialize.dubbo.DubboSerialization&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.common.serialize.hessian.Hessian2Serialization&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.common.serialize.java.JavaSerialization&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.common.serialize.java.CompactedJavaSerialization&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="扩展示例"&gt;扩展示例&lt;/h2&gt;
&lt;p&gt;Maven 项目结构：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;src
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-main
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-java
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-com
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-xxx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-XxxSerialization.java (实现Serialization接口)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-XxxObjectInput.java (实现ObjectInput接口)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-XxxObjectOutput.java (实现ObjectOutput接口)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-resources
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-META-INF
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-dubbo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-org.apache.dubbo.common.serialize.Serialization (纯文本文件，内容为：xxx=com.xxx.XxxSerialization)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;XxxSerialization.java：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;package&lt;/span&gt; com.xxx;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.common.serialize.Serialization;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.common.serialize.ObjectInput;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.common.serialize.ObjectOutput;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;public&lt;/span&gt; &lt;span style="color:#268bd2"&gt;class&lt;/span&gt; &lt;span style="color:#268bd2"&gt;XxxSerialization&lt;/span&gt; &lt;span style="color:#268bd2"&gt;implements&lt;/span&gt; Serialization {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#268bd2"&gt;public&lt;/span&gt; ObjectOutput &lt;span style="color:#268bd2"&gt;serialize&lt;/span&gt;(Parameters parameters, OutputStream output) &lt;span style="color:#268bd2"&gt;throws&lt;/span&gt; IOException {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#719e07"&gt;return&lt;/span&gt; &lt;span style="color:#719e07"&gt;new&lt;/span&gt; XxxObjectOutput(output);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#268bd2"&gt;public&lt;/span&gt; ObjectInput &lt;span style="color:#268bd2"&gt;deserialize&lt;/span&gt;(Parameters parameters, InputStream input) &lt;span style="color:#268bd2"&gt;throws&lt;/span&gt; IOException {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#719e07"&gt;return&lt;/span&gt; &lt;span style="color:#719e07"&gt;new&lt;/span&gt; XxxObjectInput(input);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;META-INF/dubbo/org.apache.dubbo.common.serialize.Serialization：&lt;/p&gt;</description></item><item><title>网络传输扩展</title><link>https://dubbo.apache.org/zh-cn/docs/references/spis/remoting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docs/references/spis/remoting/</guid><description>&lt;div class="pageinfo pageinfo-primary"&gt;
&lt;p&gt;此文档已经不再维护。您当前查看的是快照版本。如果想要查看最新版本的文档，请参阅&lt;a href="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/remoting/"&gt;最新版本&lt;/a&gt;。&lt;/p&gt;

&lt;/div&gt;

&lt;h2 id="扩展说明"&gt;扩展说明&lt;/h2&gt;
&lt;p&gt;远程通讯的服务器及客户端传输实现。&lt;/p&gt;
&lt;h2 id="扩展接口"&gt;扩展接口&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.remoting.Transporter&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.remoting.Server&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.remoting.Client&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="扩展配置"&gt;扩展配置&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt;&amp;lt;!-- 服务器和客户端使用相同的传输实现 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:protocol&lt;/span&gt; transporter=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt;&amp;lt;!-- 服务器和客户端使用不同的传输实现 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:protocol&lt;/span&gt; server=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx&amp;#34;&lt;/span&gt; client=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt;&amp;lt;!-- 缺省值设置，当&amp;lt;dubbo:protocol&amp;gt;没有配置transporter/server/client属性时，使用此配置 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:provider&lt;/span&gt; transporter=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx&amp;#34;&lt;/span&gt; server=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx&amp;#34;&lt;/span&gt; client=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="已知扩展"&gt;已知扩展&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.remoting.transport.transporter.netty.NettyTransporter&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.remoting.transport.transporter.mina.MinaTransporter&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.remoting.transport.transporter.grizzly.GrizzlyTransporter&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="扩展示例"&gt;扩展示例&lt;/h2&gt;
&lt;p&gt;Maven 项目结构：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;src
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-main
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-java
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-com
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-xxx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-XxxTransporter.java (实现Transporter接口)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-XxxServer.java (实现Server接口)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-XxxClient.java (实现Client接口)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-resources
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-META-INF
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-dubbo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-org.apache.dubbo.remoting.Transporter (纯文本文件，内容为：xxx=com.xxx.XxxTransporter)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;XxxTransporter.java：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;package&lt;/span&gt; com.xxx;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.remoting.Transporter;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;public&lt;/span&gt; &lt;span style="color:#268bd2"&gt;class&lt;/span&gt; &lt;span style="color:#268bd2"&gt;XxxTransporter&lt;/span&gt; &lt;span style="color:#268bd2"&gt;implements&lt;/span&gt; Transporter {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#268bd2"&gt;public&lt;/span&gt; Server &lt;span style="color:#268bd2"&gt;bind&lt;/span&gt;(URL url, ChannelHandler handler) &lt;span style="color:#268bd2"&gt;throws&lt;/span&gt; RemotingException {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#719e07"&gt;return&lt;/span&gt; &lt;span style="color:#719e07"&gt;new&lt;/span&gt; XxxServer(url, handler);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#268bd2"&gt;public&lt;/span&gt; Client &lt;span style="color:#268bd2"&gt;connect&lt;/span&gt;(URL url, ChannelHandler handler) &lt;span style="color:#268bd2"&gt;throws&lt;/span&gt; RemotingException {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#719e07"&gt;return&lt;/span&gt; &lt;span style="color:#719e07"&gt;new&lt;/span&gt; XxxClient(url, handler);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;XxxServer.java：&lt;/p&gt;</description></item><item><title>信息交换扩展</title><link>https://dubbo.apache.org/zh-cn/docs/references/spis/exchanger/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docs/references/spis/exchanger/</guid><description>&lt;div class="pageinfo pageinfo-primary"&gt;
&lt;p&gt;此文档已经不再维护。您当前查看的是快照版本。如果想要查看最新版本的文档，请参阅&lt;a href="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/exchanger/"&gt;最新版本&lt;/a&gt;。&lt;/p&gt;

&lt;/div&gt;

&lt;h2 id="扩展说明"&gt;扩展说明&lt;/h2&gt;
&lt;p&gt;基于传输层之上，实现 Request-Response 信息交换语义。&lt;/p&gt;
&lt;h2 id="扩展接口"&gt;扩展接口&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.remoting.exchange.Exchanger&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.remoting.exchange.ExchangeServer&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.remoting.exchange.ExchangeClient&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="扩展配置"&gt;扩展配置&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:protocol&lt;/span&gt; exchanger=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt;&amp;lt;!-- 缺省值设置，当&amp;lt;dubbo:protocol&amp;gt;没有配置exchanger属性时，使用此配置 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:provider&lt;/span&gt; exchanger=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="已知扩展"&gt;已知扩展&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;org.apache.dubbo.remoting.exchange.exchanger.HeaderExchanger&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="扩展示例"&gt;扩展示例&lt;/h2&gt;
&lt;p&gt;Maven 项目结构：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;src
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-main
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-java
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-com
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-xxx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-XxxExchanger.java (实现Exchanger接口)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-XxxExchangeServer.java (实现ExchangeServer接口)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-XxxExchangeClient.java (实现ExchangeClient接口)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-resources
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-META-INF
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-dubbo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-org.apache.dubbo.remoting.exchange.Exchanger (纯文本文件，内容为：xxx=com.xxx.XxxExchanger)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;XxxExchanger.java：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;package&lt;/span&gt; com.xxx;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.remoting.exchange.Exchanger;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;public&lt;/span&gt; &lt;span style="color:#268bd2"&gt;class&lt;/span&gt; &lt;span style="color:#268bd2"&gt;XxxExchanger&lt;/span&gt; &lt;span style="color:#268bd2"&gt;implements&lt;/span&gt; Exchanger {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#268bd2"&gt;public&lt;/span&gt; ExchangeServer &lt;span style="color:#268bd2"&gt;bind&lt;/span&gt;(URL url, ExchangeHandler handler) &lt;span style="color:#268bd2"&gt;throws&lt;/span&gt; RemotingException {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#719e07"&gt;return&lt;/span&gt; &lt;span style="color:#719e07"&gt;new&lt;/span&gt; XxxExchangeServer(url, handler);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#268bd2"&gt;public&lt;/span&gt; ExchangeClient &lt;span style="color:#268bd2"&gt;connect&lt;/span&gt;(URL url, ExchangeHandler handler) &lt;span style="color:#268bd2"&gt;throws&lt;/span&gt; RemotingException {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#719e07"&gt;return&lt;/span&gt; &lt;span style="color:#719e07"&gt;new&lt;/span&gt; XxxExchangeClient(url, handler);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;XxxExchangeServer.java：&lt;/p&gt;</description></item><item><title>对等网络节点组网器扩展</title><link>https://dubbo.apache.org/zh-cn/docs/references/spis/page/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docs/references/spis/page/</guid><description>&lt;div class="pageinfo pageinfo-primary"&gt;
&lt;p&gt;此文档已经不再维护。您当前查看的是快照版本。如果想要查看最新版本的文档，请参阅&lt;a href="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/page/"&gt;最新版本&lt;/a&gt;。&lt;/p&gt;

&lt;/div&gt;

&lt;h1 id="页面扩展"&gt;页面扩展&lt;/h1&gt;
&lt;h2 id="扩展说明"&gt;扩展说明&lt;/h2&gt;
&lt;p&gt;对等网络节点组网器。&lt;/p&gt;
&lt;h2 id="扩展接口"&gt;扩展接口&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;org.apache.dubbo.container.page.PageHandler&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="扩展配置"&gt;扩展配置&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:protocol&lt;/span&gt; page=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx,yyy&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt;&amp;lt;!-- 缺省值设置，当&amp;lt;dubbo:protocol&amp;gt;没有配置page属性时，使用此配置 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:provider&lt;/span&gt; page=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx,yyy&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="已知扩展"&gt;已知扩展&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.container.page.pages.HomePageHandler&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.container.page.pages.StatusPageHandler&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.container.page.pages.LogPageHandler&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.container.page.pages.SystemPageHandler&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="扩展示例"&gt;扩展示例&lt;/h2&gt;
&lt;p&gt;Maven 项目结构：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;src
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-main
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-java
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-com
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-xxx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-XxxPageHandler.java (实现PageHandler接口)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-resources
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-META-INF
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-dubbo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-org.apache.dubbo.container.page.PageHandler (纯文本文件，内容为：xxx=com.xxx.XxxPageHandler)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;XxxPageHandler.java：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;package&lt;/span&gt; com.xxx;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.container.page.PageHandler;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;public&lt;/span&gt; &lt;span style="color:#268bd2"&gt;class&lt;/span&gt; &lt;span style="color:#268bd2"&gt;XxxPageHandler&lt;/span&gt; &lt;span style="color:#268bd2"&gt;implements&lt;/span&gt; PageHandler {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#268bd2"&gt;public&lt;/span&gt; Group &lt;span style="color:#268bd2"&gt;lookup&lt;/span&gt;(URL url) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#586e75"&gt;// ...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;META-INF/dubbo/org.apache.dubbo.container.page.PageHandler：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-properties" data-lang="properties"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;xxx&lt;span style="color:#719e07"&gt;=&lt;/span&gt;&lt;span style="color:#2aa198"&gt;com.xxx.XxxPageHandler&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>组网扩展</title><link>https://dubbo.apache.org/zh-cn/docs/references/spis/networker/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docs/references/spis/networker/</guid><description>&lt;div class="pageinfo pageinfo-primary"&gt;
&lt;p&gt;此文档已经不再维护。您当前查看的是快照版本。如果想要查看最新版本的文档，请参阅&lt;a href="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/networker/"&gt;最新版本&lt;/a&gt;。&lt;/p&gt;

&lt;/div&gt;

&lt;h2 id="扩展说明"&gt;扩展说明&lt;/h2&gt;
&lt;p&gt;对等网络节点组网器。&lt;/p&gt;
&lt;h2 id="扩展接口"&gt;扩展接口&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;org.apache.dubbo.remoting.p2p.Networker&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="扩展配置"&gt;扩展配置&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:protocol&lt;/span&gt; networker=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt;&amp;lt;!-- 缺省值设置，当&amp;lt;dubbo:protocol&amp;gt;没有配置networker属性时，使用此配置 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:provider&lt;/span&gt; networker=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="已知扩展"&gt;已知扩展&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.remoting.p2p.support.MulticastNetworker&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.remoting.p2p.support.FileNetworker&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="扩展示例"&gt;扩展示例&lt;/h2&gt;
&lt;p&gt;Maven 项目结构：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;src
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-main
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-java
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-com
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-xxx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-XxxNetworker.java (实现Networker接口)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-resources
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-META-INF
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-dubbo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-org.apache.dubbo.remoting.p2p.Networker (纯文本文件，内容为：xxx=com.xxx.XxxNetworker)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;XxxNetworker.java：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;package&lt;/span&gt; com.xxx;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.remoting.p2p.Networker;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;public&lt;/span&gt; &lt;span style="color:#268bd2"&gt;class&lt;/span&gt; &lt;span style="color:#268bd2"&gt;XxxNetworker&lt;/span&gt; &lt;span style="color:#268bd2"&gt;implements&lt;/span&gt; Networker {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#268bd2"&gt;public&lt;/span&gt; Group &lt;span style="color:#268bd2"&gt;lookup&lt;/span&gt;(URL url) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#586e75"&gt;// ...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;META-INF/dubbo/org.apache.dubbo.remoting.p2p.Networker：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-properties" data-lang="properties"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;xxx&lt;span style="color:#719e07"&gt;=&lt;/span&gt;&lt;span style="color:#2aa198"&gt;com.xxx.XxxNetworker&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Telnet 命令扩展</title><link>https://dubbo.apache.org/zh-cn/docs/references/spis/telnet-handler/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docs/references/spis/telnet-handler/</guid><description>&lt;div class="pageinfo pageinfo-primary"&gt;
&lt;p&gt;此文档已经不再维护。您当前查看的是快照版本。如果想要查看最新版本的文档，请参阅&lt;a href="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/telnet-handler/"&gt;最新版本&lt;/a&gt;。&lt;/p&gt;

&lt;/div&gt;

&lt;h2 id="扩展说明"&gt;扩展说明&lt;/h2&gt;
&lt;p&gt;所有服务器均支持 telnet 访问，用于人工干预。&lt;/p&gt;
&lt;h2 id="扩展接口"&gt;扩展接口&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;org.apache.dubbo.remoting.telnet.TelnetHandler&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="扩展配置"&gt;扩展配置&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:protocol&lt;/span&gt; telnet=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx,yyy&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt;&amp;lt;!-- 缺省值设置，当&amp;lt;dubbo:protocol&amp;gt;没有配置telnet属性时，使用此配置 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:provider&lt;/span&gt; telnet=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx,yyy&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="已知扩展"&gt;已知扩展&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.remoting.telnet.support.ClearTelnetHandler&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.remoting.telnet.support.ExitTelnetHandler&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.remoting.telnet.support.HelpTelnetHandler&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.remoting.telnet.support.StatusTelnetHandler&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.dubbo.telnet.ListTelnetHandler&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.dubbo.telnet.ChangeTelnetHandler&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.dubbo.telnet.CurrentTelnetHandler&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.dubbo.telnet.InvokeTelnetHandler&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.dubbo.telnet.TraceTelnetHandler&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.dubbo.telnet.CountTelnetHandler&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.dubbo.telnet.PortTelnetHandler&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="扩展示例"&gt;扩展示例&lt;/h2&gt;
&lt;p&gt;Maven 项目结构：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;src
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-main
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-java
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-com
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-xxx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-XxxTelnetHandler.java (实现TelnetHandler接口)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-resources
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-META-INF
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-dubbo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-org.apache.dubbo.remoting.telnet.TelnetHandler (纯文本文件，内容为：xxx=com.xxx.XxxTelnetHandler)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;XxxTelnetHandler.java：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;package&lt;/span&gt; com.xxx;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.remoting.telnet.TelnetHandler;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;@Help&lt;/span&gt;(parameter&lt;span style="color:#719e07"&gt;=&lt;/span&gt;&lt;span style="color:#2aa198"&gt;&amp;#34;...&amp;#34;&lt;/span&gt;, summary&lt;span style="color:#719e07"&gt;=&lt;/span&gt;&lt;span style="color:#2aa198"&gt;&amp;#34;...&amp;#34;&lt;/span&gt;, detail&lt;span style="color:#719e07"&gt;=&lt;/span&gt;&lt;span style="color:#2aa198"&gt;&amp;#34;...&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;public&lt;/span&gt; &lt;span style="color:#268bd2"&gt;class&lt;/span&gt; &lt;span style="color:#268bd2"&gt;XxxTelnetHandler&lt;/span&gt; &lt;span style="color:#268bd2"&gt;implements&lt;/span&gt; TelnetHandler {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#268bd2"&gt;public&lt;/span&gt; String &lt;span style="color:#268bd2"&gt;telnet&lt;/span&gt;(Channel channel, String message) &lt;span style="color:#268bd2"&gt;throws&lt;/span&gt; RemotingException {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#586e75"&gt;// ...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;META-INF/dubbo/org.apache.dubbo.remoting.telnet.TelnetHandler：&lt;/p&gt;</description></item><item><title>状态检查扩展</title><link>https://dubbo.apache.org/zh-cn/docs/references/spis/status-checker/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docs/references/spis/status-checker/</guid><description>&lt;div class="pageinfo pageinfo-primary"&gt;
&lt;p&gt;此文档已经不再维护。您当前查看的是快照版本。如果想要查看最新版本的文档，请参阅&lt;a href="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/status-checker/"&gt;最新版本&lt;/a&gt;。&lt;/p&gt;

&lt;/div&gt;

&lt;h2 id="扩展说明"&gt;扩展说明&lt;/h2&gt;
&lt;p&gt;检查服务依赖各种资源的状态，此状态检查可同时用于 telnet 的 status 命令和 hosting 的 status 页面。&lt;/p&gt;
&lt;h2 id="扩展接口"&gt;扩展接口&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;org.apache.dubbo.common.status.StatusChecker&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="扩展配置"&gt;扩展配置&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:protocol&lt;/span&gt; status=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx,yyy&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt;&amp;lt;!-- 缺省值设置，当&amp;lt;dubbo:protocol&amp;gt;没有配置status属性时，使用此配置 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:provider&lt;/span&gt; status=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx,yyy&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="已知扩展"&gt;已知扩展&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.common.status.support.MemoryStatusChecker&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.common.status.support.LoadStatusChecker&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.dubbo.status.ServerStatusChecker&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.dubbo.status.ThreadPoolStatusChecker&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.registry.directory.RegistryStatusChecker&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.config.spring.status.SpringStatusChecker&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.rpc.config.spring.status.DataSourceStatusChecker&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="扩展示例"&gt;扩展示例&lt;/h2&gt;
&lt;p&gt;Maven 项目结构：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;src
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-main
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-java
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-com
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-xxx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-XxxStatusChecker.java (实现StatusChecker接口)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-resources
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-META-INF
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-dubbo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-org.apache.dubbo.common.status.StatusChecker (纯文本文件，内容为：xxx=com.xxx.XxxStatusChecker)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;XxxStatusChecker.java：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;package&lt;/span&gt; com.xxx;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.common.status.StatusChecker;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;public&lt;/span&gt; &lt;span style="color:#268bd2"&gt;class&lt;/span&gt; &lt;span style="color:#268bd2"&gt;XxxStatusChecker&lt;/span&gt; &lt;span style="color:#268bd2"&gt;implements&lt;/span&gt; StatusChecker {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#268bd2"&gt;public&lt;/span&gt; Status &lt;span style="color:#268bd2"&gt;check&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#586e75"&gt;// ...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;META-INF/dubbo/org.apache.dubbo.common.status.StatusChecker：&lt;/p&gt;</description></item><item><title>容器扩展</title><link>https://dubbo.apache.org/zh-cn/docs/references/spis/container/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docs/references/spis/container/</guid><description>&lt;div class="pageinfo pageinfo-primary"&gt;
&lt;p&gt;此文档已经不再维护。您当前查看的是快照版本。如果想要查看最新版本的文档，请参阅&lt;a href="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/container/"&gt;最新版本&lt;/a&gt;。&lt;/p&gt;

&lt;/div&gt;

&lt;h2 id="扩展说明"&gt;扩展说明&lt;/h2&gt;
&lt;p&gt;服务容器扩展，用于自定义加载内容。&lt;/p&gt;
&lt;h2 id="扩展接口"&gt;扩展接口&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;org.apache.dubbo.container.Container&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="扩展配置"&gt;扩展配置&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;java org.apache.dubbo.container.Main spring jetty log4j
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="已知扩展"&gt;已知扩展&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.container.spring.SpringContainer&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.container.spring.JettyContainer&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.container.spring.Log4jContainer&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="扩展示例"&gt;扩展示例&lt;/h2&gt;
&lt;p&gt;Maven 项目结构：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;src
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-main
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-java
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-com
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-xxx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-XxxContainer.java (实现Container接口)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-resources
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-META-INF
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-dubbo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-org.apache.dubbo.container.Container (纯文本文件，内容为：xxx=com.xxx.XxxContainer)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;XxxContainer.java：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;package&lt;/span&gt; com.xxx;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;org.apache.dubbo.container.Container;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;public&lt;/span&gt; &lt;span style="color:#268bd2"&gt;class&lt;/span&gt; &lt;span style="color:#268bd2"&gt;XxxContainer&lt;/span&gt; &lt;span style="color:#268bd2"&gt;implements&lt;/span&gt; Container {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#268bd2"&gt;public&lt;/span&gt; Status &lt;span style="color:#268bd2"&gt;start&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#586e75"&gt;// ...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#268bd2"&gt;public&lt;/span&gt; Status &lt;span style="color:#268bd2"&gt;stop&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#586e75"&gt;// ...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;META-INF/dubbo/org.apache.dubbo.container.Container：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-properties" data-lang="properties"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;xxx&lt;span style="color:#719e07"&gt;=&lt;/span&gt;&lt;span style="color:#2aa198"&gt;com.xxx.XxxContainer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>缓存扩展</title><link>https://dubbo.apache.org/zh-cn/docs/references/spis/cache/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docs/references/spis/cache/</guid><description>&lt;div class="pageinfo pageinfo-primary"&gt;
&lt;p&gt;此文档已经不再维护。您当前查看的是快照版本。如果想要查看最新版本的文档，请参阅&lt;a href="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/cache/"&gt;最新版本&lt;/a&gt;。&lt;/p&gt;

&lt;/div&gt;

&lt;h2 id="扩展说明"&gt;扩展说明&lt;/h2&gt;
&lt;p&gt;用请求参数作为 key，缓存返回结果。&lt;/p&gt;
&lt;h2 id="扩展接口"&gt;扩展接口&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;org.apache.dubbo.cache.CacheFactory&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="扩展配置"&gt;扩展配置&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:service&lt;/span&gt; cache=&lt;span style="color:#2aa198"&gt;&amp;#34;lru&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt;&amp;lt;!-- 方法级缓存 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:service&amp;gt;&amp;lt;dubbo:method&lt;/span&gt; cache=&lt;span style="color:#2aa198"&gt;&amp;#34;lru&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&amp;lt;/dubbo:service&amp;gt;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt;&amp;lt;!-- 缺省值设置，当&amp;lt;dubbo:service&amp;gt;没有配置cache属性时，使用此配置 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:provider&lt;/span&gt; cache=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx,yyy&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="已知扩展"&gt;已知扩展&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.cache.support.lru.LruCacheFactory&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.cache.support.threadlocal.ThreadLocalCacheFactory&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.cache.support.jcache.JCacheFactory&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="扩展示例"&gt;扩展示例&lt;/h2&gt;
&lt;p&gt;Maven 项目结构：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;src
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-main
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-java
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-com
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-xxx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-XxxCacheFactory.java (实现CacheFactory接口)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-resources
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-META-INF
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-dubbo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-org.apache.dubbo.cache.CacheFactory (纯文本文件，内容为：xxx=com.xxx.XxxCacheFactory)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;XxxCacheFactory.java：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;package&lt;/span&gt; com.xxx;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.cache.CacheFactory;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;public&lt;/span&gt; &lt;span style="color:#268bd2"&gt;class&lt;/span&gt; &lt;span style="color:#268bd2"&gt;XxxCacheFactory&lt;/span&gt; &lt;span style="color:#268bd2"&gt;implements&lt;/span&gt; CacheFactory {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#268bd2"&gt;public&lt;/span&gt; Cache &lt;span style="color:#268bd2"&gt;getCache&lt;/span&gt;(URL url, String name) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#719e07"&gt;return&lt;/span&gt; &lt;span style="color:#719e07"&gt;new&lt;/span&gt; XxxCache(url, name);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;XxxCache.java：&lt;/p&gt;</description></item><item><title>验证扩展</title><link>https://dubbo.apache.org/zh-cn/docs/references/spis/validation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docs/references/spis/validation/</guid><description>&lt;div class="pageinfo pageinfo-primary"&gt;
&lt;p&gt;此文档已经不再维护。您当前查看的是快照版本。如果想要查看最新版本的文档，请参阅&lt;a href="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/validation/"&gt;最新版本&lt;/a&gt;。&lt;/p&gt;

&lt;/div&gt;

&lt;h2 id="扩展说明"&gt;扩展说明&lt;/h2&gt;
&lt;p&gt;参数验证扩展点。&lt;/p&gt;
&lt;h2 id="扩展接口"&gt;扩展接口&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;org.apache.dubbo.validation.Validation&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="扩展配置"&gt;扩展配置&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:service&lt;/span&gt; validation=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx,yyy&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#586e75"&gt;&amp;lt;!-- 缺省值设置，当&amp;lt;dubbo:service&amp;gt;没有配置validation属性时，使用此配置 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:provider&lt;/span&gt; validation=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx,yyy&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="已知扩展"&gt;已知扩展&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;org.apache.dubbo.validation.support.jvalidation.JValidation&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="扩展示例"&gt;扩展示例&lt;/h2&gt;
&lt;p&gt;Maven 项目结构：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;src
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-main
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-java
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-com
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-xxx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-XxxValidation.java (实现Validation接口)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-resources
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-META-INF
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-dubbo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-org.apache.dubbo.validation.Validation (纯文本文件，内容为：xxx=com.xxx.XxxValidation)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;XxxValidation.java：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;package&lt;/span&gt; com.xxx;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.validation.Validation;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;public&lt;/span&gt; &lt;span style="color:#268bd2"&gt;class&lt;/span&gt; &lt;span style="color:#268bd2"&gt;XxxValidation&lt;/span&gt; &lt;span style="color:#268bd2"&gt;implements&lt;/span&gt; Validation {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#268bd2"&gt;public&lt;/span&gt; Object &lt;span style="color:#268bd2"&gt;getValidator&lt;/span&gt;(URL url) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#586e75"&gt;// ...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;XxxValidator.java：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;package&lt;/span&gt; com.xxx;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.validation.Validator;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;public&lt;/span&gt; &lt;span style="color:#268bd2"&gt;class&lt;/span&gt; &lt;span style="color:#268bd2"&gt;XxxValidator&lt;/span&gt; &lt;span style="color:#268bd2"&gt;implements&lt;/span&gt; Validator {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#268bd2"&gt;public&lt;/span&gt; &lt;span style="color:#268bd2"&gt;XxxValidator&lt;/span&gt;(URL url) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#586e75"&gt;// ...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#268bd2"&gt;public&lt;/span&gt; &lt;span style="color:#dc322f"&gt;void&lt;/span&gt; &lt;span style="color:#268bd2"&gt;validate&lt;/span&gt;(Invocation invocation) &lt;span style="color:#268bd2"&gt;throws&lt;/span&gt; Exception {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#586e75"&gt;// ...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;META-INF/dubbo/org.apache.dubbo.validation.Validation：&lt;/p&gt;</description></item><item><title>日志适配扩展</title><link>https://dubbo.apache.org/zh-cn/docs/references/spis/logger-adapter/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docs/references/spis/logger-adapter/</guid><description>&lt;div class="pageinfo pageinfo-primary"&gt;
&lt;p&gt;此文档已经不再维护。您当前查看的是快照版本。如果想要查看最新版本的文档，请参阅&lt;a href="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/logger-adapter/"&gt;最新版本&lt;/a&gt;。&lt;/p&gt;

&lt;/div&gt;

&lt;h2 id="扩展说明"&gt;扩展说明&lt;/h2&gt;
&lt;p&gt;日志输出适配扩展点。&lt;/p&gt;
&lt;h2 id="扩展接口"&gt;扩展接口&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;org.apache.dubbo.common.logger.LoggerAdapter&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="扩展配置"&gt;扩展配置&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;&amp;lt;dubbo:application&lt;/span&gt; logger=&lt;span style="color:#2aa198"&gt;&amp;#34;xxx&amp;#34;&lt;/span&gt; &lt;span style="color:#268bd2"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;或者：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;-Ddubbo:application.logger&lt;span style="color:#719e07"&gt;=&lt;/span&gt;xxx
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="已知扩展"&gt;已知扩展&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.common.logger.slf4j.Slf4jLoggerAdapter&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.common.logger.jcl.JclLoggerAdapter&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.common.logger.log4j.Log4jLoggerAdapter&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.common.logger.log4j2.Log4j2LoggerAdapter&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org.apache.dubbo.common.logger.jdk.JdkLoggerAdapter&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="扩展示例"&gt;扩展示例&lt;/h2&gt;
&lt;p&gt;Maven 项目结构：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;src
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-main
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-java
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-com
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-xxx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-XxxLoggerAdapter.java (实现LoggerAdapter接口)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-resources
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-META-INF
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-dubbo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; |-org.apache.dubbo.common.logger.LoggerAdapter (纯文本文件，内容为：xxx=com.xxx.XxxLoggerAdapter)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;XxxLoggerAdapter.java：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;package&lt;/span&gt; com.xxx;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.common.logger.LoggerAdapter;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;public&lt;/span&gt; &lt;span style="color:#268bd2"&gt;class&lt;/span&gt; &lt;span style="color:#268bd2"&gt;XxxLoggerAdapter&lt;/span&gt; &lt;span style="color:#268bd2"&gt;implements&lt;/span&gt; LoggerAdapter {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#268bd2"&gt;public&lt;/span&gt; Logger &lt;span style="color:#268bd2"&gt;getLogger&lt;/span&gt;(URL url) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#586e75"&gt;// ...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;XxxLogger.java：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;package&lt;/span&gt; com.xxx;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#719e07"&gt;import&lt;/span&gt; org.apache.dubbo.common.logger.Logger;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#268bd2"&gt;public&lt;/span&gt; &lt;span style="color:#268bd2"&gt;class&lt;/span&gt; &lt;span style="color:#268bd2"&gt;XxxLogger&lt;/span&gt; &lt;span style="color:#268bd2"&gt;implements&lt;/span&gt; Logger {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#268bd2"&gt;public&lt;/span&gt; &lt;span style="color:#268bd2"&gt;XxxLogger&lt;/span&gt;(URL url) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#586e75"&gt;// ...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#268bd2"&gt;public&lt;/span&gt; &lt;span style="color:#dc322f"&gt;void&lt;/span&gt; &lt;span style="color:#268bd2"&gt;info&lt;/span&gt;(String msg) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#586e75"&gt;// ...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#586e75"&gt;// ...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;META-INF/dubbo/org.apache.dubbo.common.logger.LoggerAdapter：&lt;/p&gt;</description></item><item><title>扩展点开发指南</title><link>https://dubbo.apache.org/zh-cn/docs/references/spis/dubbo-spi/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/docs/references/spis/dubbo-spi/</guid><description>&lt;div class="pageinfo pageinfo-primary"&gt;
&lt;p&gt;此文档已经不再维护。您当前查看的是快照版本。如果想要查看最新版本的文档，请参阅&lt;a href="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/spi/overview/"&gt;最新版本&lt;/a&gt;。&lt;/p&gt;

&lt;/div&gt;

&lt;h2 id="1简介"&gt;1.简介&lt;/h2&gt;
&lt;p&gt;SPI 全称为 Service Provider Interface，是一种服务发现机制。SPI 的本质是将接口实现类的全限定名配置在文件中，并由服务加载器读取配置文件，加载实现类。这样可以在运行时，动态为接口替换实现类。正因此特性，我们可以很容易的通过 SPI 机制为我们的程序提供拓展功能。SPI 机制在第三方框架中也有所应用，比如 Dubbo 就是通过 SPI 机制加载所有的组件。不过，Dubbo 并未使用 Java 原生的 SPI 机制，而是对其进行了增强，使其能够更好的满足需求。在 Dubbo 中，SPI 是一个非常重要的模块。基于 SPI，我们可以很容易的对 Dubbo 进行拓展。
Dubbo 中，SPI 主要有两种用法，一种是加载固定的扩展类，另一种是加载自适应扩展类。这两种方式会在下面详细的介绍。
需要特别注意的是: 在 Dubbo 中，基于 SPI 扩展加载的类是单例的。&lt;/p&gt;
&lt;h3 id="11-加载固定的扩展类"&gt;1.1 加载固定的扩展类&lt;/h3&gt;
&lt;p&gt;如果让你来设计加载固定扩展类，你会怎么做了？
一种常见思路是读取特定目录下的配置文件，然后解析出全类名，通过反射机制来实例化这个类，然后将这个类放在集合中存起来，如果有需要的时候，直接从集合中取。Dubbo 中的实现也是这么一个思路。
不过在 Dubbo 中，实现的更加完善，它实现类了 IOC 和 AOP 的功能。IOC 就是说如果这个扩展类依赖其他属性，Dubbo 会自动的将这个属性进行注入。这个功能如何实现了？一个常见思路是获取这个扩展类的 setter
方法，调用 setter 方法进行属性注入。AOP 指的是什么了？这个说的是 Dubbo 能够为扩展类注入其包装类。比如 DubboProtocol 是 Protocol 的扩展类，ProtocolListenerWrapper 是 DubboProtocol 的包装类。&lt;/p&gt;
&lt;h3 id="12-加载自适应扩展类"&gt;1.2 加载自适应扩展类&lt;/h3&gt;
&lt;p&gt;先说明下自适应扩展类的使用场景。比如我们有需求，在调用某一个方法时，基于参数选择调用到不同的实现类。和工厂方法有些类似，基于不同的参数，构造出不同的实例对象。
在 Dubbo 中实现的思路和这个差不多，不过 Dubbo 的实现更加灵活，它的实现和策略模式有些类似。每一种扩展类相当于一种策略，基于 URL 消息总线，将参数传递给 ExtensionLoader，通过 ExtensionLoader 基于参数加载对应的扩展类，实现运行时动态调用到目标实例上。&lt;/p&gt;</description></item></channel></rss>