This is an automated email from the ASF dual-hosted git repository.
github-bot pushed a commit to branch cn-site
in repository https://gitbox.apache.org/repos/asf/dubbo-website.git
The following commit(s) were added to refs/heads/cn-site by this push:
new 961a534d9f deploy: d16a1c5aa0bb7ade04fcc45eb55b5b04c8f2082a
961a534d9f is described below
commit 961a534d9fafff9255a59e4c93f492a94f3113a4
Author: chickenlj <[email protected]>
AuthorDate: Wed Mar 8 08:37:52 2023 +0000
deploy: d16a1c5aa0bb7ade04fcc45eb55b5b04c8f2082a
---
...ubbo-samples-extensibility-protocol-output1.png | Bin 0 -> 2529283 bytes
...ubbo-samples-extensibility-protocol-output2.jpg | Bin 0 -> 1168285 bytes
sitemap.xml | 2 +-
zh-cn/overview/tasks/extensibility/index.xml | 215 ++++++++++++++++++++-
.../tasks/extensibility/protocol/index.html | 173 ++++++++++++++++-
zh-cn/sitemap.xml | 2 +-
6 files changed, 385 insertions(+), 7 deletions(-)
diff --git
a/imgs/v3/tasks/extensibility/dubbo-samples-extensibility-protocol-output1.png
b/imgs/v3/tasks/extensibility/dubbo-samples-extensibility-protocol-output1.png
new file mode 100644
index 0000000000..7f42604bde
Binary files /dev/null and
b/imgs/v3/tasks/extensibility/dubbo-samples-extensibility-protocol-output1.png
differ
diff --git
a/imgs/v3/tasks/extensibility/dubbo-samples-extensibility-protocol-output2.jpg
b/imgs/v3/tasks/extensibility/dubbo-samples-extensibility-protocol-output2.jpg
new file mode 100644
index 0000000000..8380bcd466
Binary files /dev/null and
b/imgs/v3/tasks/extensibility/dubbo-samples-extensibility-protocol-output2.jpg
differ
diff --git a/sitemap.xml b/sitemap.xml
index 7a84891bf3..2af492a953 100644
--- a/sitemap.xml
+++ b/sitemap.xml
@@ -1 +1 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?><sitemapindex
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"><sitemap><loc>https://cn.dubbo.apache.org/zh-cn/sitemap.xml</loc><lastmod>2023-03-08T16:33:51+08:00</lastmod></sitemap><sitemap><loc>https://cn.dubbo.apache.org/en/sitemap.xml</loc><lastmod>2023-03-03T06:59:49+08:00</lastmod></sitemap></sitemapindex>
\ No newline at end of file
+<?xml version="1.0" encoding="utf-8" standalone="yes"?><sitemapindex
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"><sitemap><loc>https://cn.dubbo.apache.org/zh-cn/sitemap.xml</loc><lastmod>2023-03-08T16:34:37+08:00</lastmod></sitemap><sitemap><loc>https://cn.dubbo.apache.org/en/sitemap.xml</loc><lastmod>2023-03-03T06:59:49+08:00</lastmod></sitemap></sitemapindex>
\ No newline at end of file
diff --git a/zh-cn/overview/tasks/extensibility/index.xml
b/zh-cn/overview/tasks/extensibility/index.xml
index bd80c8adcc..9cfb841122 100644
--- a/zh-cn/overview/tasks/extensibility/index.xml
+++ b/zh-cn/overview/tasks/extensibility/index.xml
@@ -123,7 +123,220 @@
</span></span><span
style="display:flex;"><span>dubbo.provider.filter<span
style="color:#719e07">=</span><span
style="color:#2aa198">appended</span>
</span></span></code></pre></div><h2 id="运行结果">运行结果</h2>
<p>以<strong>使用本地IDE</strong>的方式来运行任务,结果如下:</p>
-<p><img
src="https://cn.dubbo.apache.org/imgs/v3/tasks/extensibility/dubbo-samples-extensibility-filter-output.jpg"
alt="dubbo-samples-extensibility-filter-output.jpg"></p></description></item><item><title>Overview:
Protocol</title><link>https://cn.dubbo.apache.org/zh-cn/overview/tasks/extensibility/protocol/</link><pubDate>Mon,
01 Jan 0001 00:00:00
+0000</pubDate><guid>https://cn.dubbo.apache.org/zh-cn/overview/tasks/extensibility/protocol/</guid><description/></item><item><tit
[...]
+<p><img
src="https://cn.dubbo.apache.org/imgs/v3/tasks/extensibility/dubbo-samples-extensibility-filter-output.jpg"
alt="dubbo-samples-extensibility-filter-output.jpg"></p></description></item><item><title>Overview:
Protocol</title><link>https://cn.dubbo.apache.org/zh-cn/overview/tasks/extensibility/protocol/</link><pubDate>Mon,
01 Jan 0001 00:00:00
+0000</pubDate><guid>https://cn.dubbo.apache.org/zh-cn/overview/tasks/extensibility/protocol/</guid><description>
+<p>Dubbo
通过协议扩展实现了很多内置的功能,同时也支持很多常用的协议。所有的自定义协议在<code>org.apache.dubbo.rpc.Protocol</code>文件中可以看到,以Dubbo
3为例,具体如下:</p>
+<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-properties" data-lang="properties"><span
style="display:flex;"><span><span style="color:#586e75">#
Dubbo通过协议扩展实现的内置功能</span>
+</span></span><span style="display:flex;"><span>filter<span
style="color:#719e07">=</span><span
style="color:#2aa198">org.apache.dubbo.rpc.cluster.filter.ProtocolFilterWrapper</span>
+</span></span><span style="display:flex;"><span>qos<span
style="color:#719e07">=</span><span
style="color:#2aa198">org.apache.dubbo.qos.protocol.QosProtocolWrapper</span>
+</span></span><span style="display:flex;"><span>registry<span
style="color:#719e07">=</span><span
style="color:#2aa198">org.apache.dubbo.registry.integration.InterfaceCompatibleRegistryProtocol</span>
+</span></span><span
style="display:flex;"><span>service-discovery-registry<span
style="color:#719e07">=</span><span
style="color:#2aa198">org.apache.dubbo.registry.integration.RegistryProtocol</span>
+</span></span><span style="display:flex;"><span>listener<span
style="color:#719e07">=</span><span
style="color:#2aa198">org.apache.dubbo.rpc.protocol.ProtocolListenerWrapper</span>
+</span></span><span style="display:flex;"><span>mock<span
style="color:#719e07">=</span><span
style="color:#2aa198">org.apache.dubbo.rpc.support.MockProtocol</span>
+</span></span><span
style="display:flex;"><span>serializationwrapper<span
style="color:#719e07">=</span><span
style="color:#2aa198">org.apache.dubbo.rpc.protocol.ProtocolSerializationWrapper</span>
+</span></span><span
style="display:flex;"><span>securitywrapper<span
style="color:#719e07">=</span><span
style="color:#2aa198">org.apache.dubbo.rpc.protocol.ProtocolSecurityWrapper</span>
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span
style="color:#586e75"># Dubbo对外支持的常用协议</span>
+</span></span><span style="display:flex;"><span>dubbo<span
style="color:#719e07">=</span><span
style="color:#2aa198">org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol</span>
+</span></span><span style="display:flex;"><span>injvm<span
style="color:#719e07">=</span><span
style="color:#2aa198">org.apache.dubbo.rpc.protocol.injvm.InjvmProtocol</span>
+</span></span><span style="display:flex;"><span>rest<span
style="color:#719e07">=</span><span
style="color:#2aa198">org.apache.dubbo.rpc.protocol.rest.RestProtocol</span>
+</span></span><span style="display:flex;"><span>grpc<span
style="color:#719e07">=</span><span
style="color:#2aa198">org.apache.dubbo.rpc.protocol.grpc.GrpcProtocol</span>
+</span></span><span style="display:flex;"><span>tri<span
style="color:#719e07">=</span><span
style="color:#2aa198">org.apache.dubbo.rpc.protocol.tri.TripleProtocol</span>
+</span></span></code></pre></div><p>我们可以看到,在Dubbo中通过协议扩展的能力实现了过滤、监控数据采集、服务发现、监听器、mock、序列化、安全等一系列能力,同时对外提供了<code>dubbo</code>,<code>injvm</code>,<code>rest</code>,<code>grpc</code>和<code>tri</code>协议。</p>
+<p>自定义一套私有协议有两种方式,第一种是对原有的协议进行包装,添加一些特定的业务逻辑。另外一种是完全自定义一套协议。前者实现简单,在<code>dubbo</code>中也是有广泛的使用,比如:<code>ProtocolFilterWrapper</code>,
<code>QosProtocolWrapper</code>,
<code>ProtocolListenerWrapper</code>等。后者实现复杂,一般常见的协议<code>dubbo</code>都实现了,并且通过了大量生产实践的验证。</p>
+<p>本文会通过示例演示如何通过现有协议实现一套自定义协议。</p>
+<h2 id="开始之前">开始之前</h2>
+<p>有两种部署运行方式,二选一</p>
+<h3 id="基于kubernetes">基于Kubernetes</h3>
+<ul>
+<li>安装<a
href="https://kubernetes.io/docs/tasks/tools/">Kubernetes</a>环境</li>
+<li>修改<a
href="https://github.com/apache/dubbo-samples/blob/master/10-task/dubbo-samples-extensibility/dubbo-samples-extensibility-protocol-provider/src/main/resources/application.properties">Provider</a>中的配置文件,启用Kubernetes中部署的nacos的地址
+<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-properties" data-lang="properties"><span
style="display:flex;"><span><span style="color:#586e75"># Specify the
application name of Dubbo</span>
+</span></span><span
style="display:flex;"><span>dubbo.application.name<span
style="color:#719e07">=</span><span
style="color:#2aa198">extensibility-protocol-provider</span>
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span
style="color:#586e75"># Enable token verification for each invocation</span>
+</span></span><span
style="display:flex;"><span>dubbo.provider.token<span
style="color:#719e07">=</span><span style="color:#2aa198">true</span>
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span
style="color:#586e75"># Specify the registry address</span>
+</span></span><span style="display:flex;"><span><span
style="color:#586e75">#
dubbo.registry.address=nacos://localhost:8848?username=nacos&amp;password=nacos</span>
+</span></span><span
style="display:flex;"><span>dubbo.registry.address<span
style="color:#719e07">=</span><span
style="color:#2aa198">nacos://${nacos.address:localhost}:8848?username=nacos&amp;password=nacos</span>
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span
style="color:#586e75"># 自定义协议edubbo</span>
+</span></span><span
style="display:flex;"><span>dubbo.provider.protocol<span
style="color:#719e07">=</span><span style="color:#2aa198">edubbo</span>
+</span></span></code></pre></div></li>
+<li>修改<a
href="https://github.com/apache/dubbo-samples/blob/master/10-task/dubbo-samples-extensibility/dubbo-samples-extensibility-protocol-consumer/src/main/resources/application.properties">Consumer</a>中的配置文件,启用Kubernetes中部署的nacos的地址
+<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-properties" data-lang="properties"><span
style="display:flex;"><span><span style="color:#586e75"># Specify the
application name of Dubbo</span>
+</span></span><span
style="display:flex;"><span>dubbo.application.name<span
style="color:#719e07">=</span><span
style="color:#2aa198">extensibility-protocol-consumer</span>
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span
style="color:#586e75"># Enable token verification for each invocation</span>
+</span></span><span
style="display:flex;"><span>dubbo.provider.token<span
style="color:#719e07">=</span><span style="color:#2aa198">true</span>
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span
style="color:#586e75"># Specify the registry address</span>
+</span></span><span style="display:flex;"><span><span
style="color:#586e75">#
dubbo.registry.address=nacos://localhost:8848?username=nacos&amp;password=nacos</span>
+</span></span><span
style="display:flex;"><span>dubbo.registry.address<span
style="color:#719e07">=</span><span
style="color:#2aa198">nacos://${nacos.address:localhost}:8848?username=nacos&amp;password=nacos</span>
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span
style="color:#586e75"># 自定义协议edubbo</span>
+</span></span><span
style="display:flex;"><span>dubbo.consumer.protocol<span
style="color:#719e07">=</span><span style="color:#2aa198">edubbo</span>
+</span></span></code></pre></div></li>
+<li>部署<code>[Extensibility Protocol
Task](https://github.com/apache/dubbo-samples/blob/master/10-task/dubbo-samples-extensibility/deploy/All.yml)</code></li>
+</ul>
+<h3 id="使用本地ide">使用本地IDE</h3>
+<ul>
+<li>部署<a
href="https://nacos.io/zh-cn/docs/quick-start.html">Nacos</a>2.2.0版本</li>
+<li>修改<a
href="https://github.com/apache/dubbo-samples/blob/master/10-task/dubbo-samples-extensibility/dubbo-samples-extensibility-protocol-provider/src/main/resources/application.properties">Provider</a>中的配置文件,启用本地nacos的地址
+<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-properties" data-lang="properties"><span
style="display:flex;"><span><span style="color:#586e75"># Specify the
application name of Dubbo</span>
+</span></span><span
style="display:flex;"><span>dubbo.application.name<span
style="color:#719e07">=</span><span
style="color:#2aa198">extensibility-protocol-provider</span>
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span
style="color:#586e75"># Enable token verification for each invocation</span>
+</span></span><span
style="display:flex;"><span>dubbo.provider.token<span
style="color:#719e07">=</span><span style="color:#2aa198">true</span>
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span
style="color:#586e75"># Specify the registry address</span>
+</span></span><span style="display:flex;"><span><span
style="color:#586e75"># 启用本地nacos的地址</span>
+</span></span><span
style="display:flex;"><span>dubbo.registry.address<span
style="color:#719e07">=</span><span
style="color:#2aa198">nacos://localhost:8848?username=nacos&amp;password=nacos</span>
+</span></span><span style="display:flex;"><span><span
style="color:#586e75">#
dubbo.registry.address=nacos://${nacos.address:localhost}:8848?username=nacos&amp;password=nacos</span>
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span
style="color:#586e75"># 自定义协议edubbo</span>
+</span></span><span
style="display:flex;"><span>dubbo.provider.protocol<span
style="color:#719e07">=</span><span style="color:#2aa198">edubbo</span>
+</span></span></code></pre></div></li>
+<li>修改<a
href="https://github.com/apache/dubbo-samples/blob/master/10-task/dubbo-samples-extensibility/dubbo-samples-extensibility-protocol-consumer/src/main/resources/application.properties">Consumer</a>中的配置文件,启用本地nacos的地址
+<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-properties" data-lang="properties"><span
style="display:flex;"><span><span style="color:#586e75"># Specify the
application name of Dubbo</span>
+</span></span><span
style="display:flex;"><span>dubbo.application.name<span
style="color:#719e07">=</span><span
style="color:#2aa198">extensibility-protocol-consumer</span>
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span
style="color:#586e75"># Enable token verification for each invocation</span>
+</span></span><span
style="display:flex;"><span>dubbo.provider.token<span
style="color:#719e07">=</span><span style="color:#2aa198">true</span>
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span
style="color:#586e75"># Specify the registry address</span>
+</span></span><span style="display:flex;"><span><span
style="color:#586e75"># 启用本地nacos的地址</span>
+</span></span><span
style="display:flex;"><span>dubbo.registry.address<span
style="color:#719e07">=</span><span
style="color:#2aa198">nacos://localhost:8848?username=nacos&amp;password=nacos</span>
+</span></span><span style="display:flex;"><span><span
style="color:#586e75">#
dubbo.registry.address=nacos://${nacos.address:localhost}:8848?username=nacos&amp;password=nacos</span>
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span
style="color:#586e75"># 自定义协议edubbo</span>
+</span></span><span
style="display:flex;"><span>dubbo.consumer.protocol<span
style="color:#719e07">=</span><span style="color:#2aa198">edubbo</span>
+</span></span></code></pre></div></li>
+</ul>
+<h2 id="任务详情">任务详情</h2>
+<p>基于现有的<code>dubbo</code>协议来实现自定义协议<code>edubbo</code>。</p>
+<h2 id="实现方式">实现方式</h2>
+<p>通过对<code>dubbo</code>协议进行包装来实现<code>edubbo</code>协议。</p>
+<h4 id="代码结构">代码结构</h4>
+<h5 id="common">Common</h5>
+<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-properties" data-lang="properties"><span
style="display:flex;"><span>src
+</span></span><span style="display:flex;"><span> |-main
+</span></span><span style="display:flex;"><span> |-java
+</span></span><span style="display:flex;"><span> |-org
+</span></span><span style="display:flex;"><span> |-apache
+</span></span><span style="display:flex;"><span> |-dubbo
+</span></span><span style="display:flex;"><span> |-samples
+</span></span><span style="display:flex;"><span> |-extensibility
+</span></span><span style="display:flex;"><span> |-protocol
+</span></span><span style="display:flex;"><span> |-common
+</span></span><span style="display:flex;"><span>
|-EnhancedProtocol.java <span style="color:#2aa198">(实现Protocol接口)</span>
+</span></span></code></pre></div><h5
id="provider">Provider</h5>
+<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-properties" data-lang="properties"><span
style="display:flex;"><span>src
+</span></span><span style="display:flex;"><span> |-main
+</span></span><span style="display:flex;"><span> |-java
+</span></span><span style="display:flex;"><span> |-org
+</span></span><span style="display:flex;"><span> |-apache
+</span></span><span style="display:flex;"><span> |-dubbo
+</span></span><span style="display:flex;"><span> |-samples
+</span></span><span style="display:flex;"><span> |-extensibility
+</span></span><span style="display:flex;"><span> |-protocol
+</span></span><span style="display:flex;"><span> |-provider
+</span></span><span style="display:flex;"><span>
|-ExtensibilityProtocolProviderApplication.java
+</span></span><span style="display:flex;"><span>
|-ExtensibilityProtocolServiceImpl.java
+</span></span><span style="display:flex;"><span> |-resources
+</span></span><span style="display:flex;"><span> |-META-INF
+</span></span><span style="display:flex;"><span>
|-application.properties <span style="color:#2aa198">(Dubbo
Provider配置文件)</span>
+</span></span><span style="display:flex;"><span> |-dubbo
+</span></span><span style="display:flex;"><span>
|-org.apache.dubbo.rpc.Protocol <span style="color:#2aa198">(纯文本文件)</span>
+</span></span></code></pre></div><h5
id="consumer">Consumer</h5>
+<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-properties" data-lang="properties"><span
style="display:flex;"><span>src
+</span></span><span style="display:flex;"><span> |-main
+</span></span><span style="display:flex;"><span> |-java
+</span></span><span style="display:flex;"><span> |-org
+</span></span><span style="display:flex;"><span> |-apache
+</span></span><span style="display:flex;"><span> |-dubbo
+</span></span><span style="display:flex;"><span> |-samples
+</span></span><span style="display:flex;"><span> |-extensibility
+</span></span><span style="display:flex;"><span> |-protocol
+</span></span><span style="display:flex;"><span> |-consumer
+</span></span><span style="display:flex;"><span>
|-ExtensibilityProtocolConsumerApplication.java
+</span></span><span style="display:flex;"><span>
|-ExtensibilityProtocolConsumerTask.java
+</span></span><span style="display:flex;"><span> |-resources
+</span></span><span style="display:flex;"><span> |-META-INF
+</span></span><span style="display:flex;"><span>
|-application.properties <span style="color:#2aa198">(Dubbo
Consumer配置文件)</span>
+</span></span><span style="display:flex;"><span> |-dubbo
+</span></span><span style="display:flex;"><span>
|-org.apache.dubbo.rpc.Protocol <span style="color:#2aa198">(纯文本文件)</span>
+</span></span></code></pre></div><h4 id="代码详情">代码详情</h4>
+<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-java" data-lang="java"><span
style="display:flex;"><span><span style="color:#719e07">package</span>
org.apache.dubbo.samples.extensibility.protocol.common<span
style="color:#719e07">;</span>
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span
style="color:#719e07">import</span> org.apache.dubbo.common.URL<span
style="color:#719e07">;</span>
+</span></span><span style="display:flex;"><span><span
style="color:#719e07">import</span> org.apache.dubbo.rpc.Protocol<span
style="color:#719e07">;</span>
+</span></span><span style="display:flex;"><span><span
style="color:#719e07">import</span> org.apache.dubbo.rpc.Invoker<span
style="color:#719e07">;</span>
+</span></span><span style="display:flex;"><span><span
style="color:#719e07">import</span> org.apache.dubbo.rpc.Exporter<span
style="color:#719e07">;</span>
+</span></span><span style="display:flex;"><span><span
style="color:#719e07">import</span>
org.apache.dubbo.rpc.ProtocolServer<span style="color:#719e07">;</span>
+</span></span><span style="display:flex;"><span><span
style="color:#719e07">import</span>
org.apache.dubbo.rpc.RpcException<span style="color:#719e07">;</span>
+</span></span><span style="display:flex;"><span><span
style="color:#719e07">import</span>
org.apache.dubbo.rpc.model.FrameworkModel<span
style="color:#719e07">;</span>
+</span></span><span style="display:flex;"><span><span
style="color:#719e07">import</span>
org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol<span
style="color:#719e07">;</span>
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span
style="color:#719e07">import</span> java.util.List<span
style="color:#719e07">;</span>
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span
style="color:#268bd2">public</span> <span
style="color:#268bd2">class</span> <span
style="color:#268bd2">EnhancedProtocol</span> <span
style="color:#268bd2">implements</span> Protocol <span
style="color:#719e07">{</span>
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">public</span> <span
style="color:#268bd2">EnhancedProtocol</span><span
style="color:#719e07">(</span>FrameworkModel frameworkModel<span
style="color:#719e07">)</span> <span style="color:#719e07">{</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#719e07">this</span><span
style="color:#719e07">.</span>protocol <span
style="color:#719e07">=</span> <span style="color:#719e07">new</span>
DubboProtocol<span style="color:#719e07">(</span>frameworkModel<span
style="color:#719e07">);</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#719e07">}</span>
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">private</span> <span
style="color:#268bd2">final</span> Protocol protocol<span
style="color:#719e07">;</span>
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">@Override</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">public</span> <span
style="color:#dc322f">int</span> <span
style="color:#268bd2">getDefaultPort</span><span
style="color:#719e07">()</span> <span style="color:#719e07">{</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#719e07">return</span> <span
style="color:#719e07">this</span><span
style="color:#719e07">.</span>protocol<span
style="color:#719e07">.</span>getDefaultPort<span
style="color:#719e07">();</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#719e07">}</span>
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">@Override</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">public</span> <span
style="color:#719e07">&lt;</span>T<span
style="color:#719e07">&gt;</span> Exporter<span
style="color:#719e07">&lt;</span>T<span
style="color:#719e07">&gt;</span> <span
style="color:#268bd2">export</span><span
style="color:#719e07">(</span>Invoker<span
style="color:#719e07">&lt;</span>T<span style="color:#719e07 [...]
+</span></span><span style="display:flex;"><span> <span
style="color:#586e75">// do something
+</span></span></span><span style="display:flex;"><span><span
style="color:#586e75"></span> <span
style="color:#719e07">return</span> <span
style="color:#719e07">this</span><span
style="color:#719e07">.</span>protocol<span
style="color:#719e07">.</span>export<span
style="color:#719e07">(</span>invoker<span
style="color:#719e07">);</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#719e07">}</span>
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">@Override</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">public</span> <span
style="color:#719e07">&lt;</span>T<span
style="color:#719e07">&gt;</span> Invoker<span
style="color:#719e07">&lt;</span>T<span
style="color:#719e07">&gt;</span> <span
style="color:#268bd2">refer</span><span
style="color:#719e07">(</span>Class<span
style="color:#719e07">&lt;</span>T<span style="color:#719e07">&a [...]
+</span></span><span style="display:flex;"><span> <span
style="color:#586e75">// do something
+</span></span></span><span style="display:flex;"><span><span
style="color:#586e75"></span> <span
style="color:#719e07">return</span> <span
style="color:#719e07">this</span><span
style="color:#719e07">.</span>protocol<span
style="color:#719e07">.</span>refer<span
style="color:#719e07">(</span>type<span style="color:#719e07">,</span>
url<span style="color:#719e07">);</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#719e07">}</span>
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">@Override</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">public</span> <span
style="color:#dc322f">void</span> <span
style="color:#268bd2">destroy</span><span
style="color:#719e07">()</span> <span style="color:#719e07">{</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#719e07">this</span><span
style="color:#719e07">.</span>protocol<span
style="color:#719e07">.</span>destroy<span
style="color:#719e07">();</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#719e07">}</span>
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">@Override</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">public</span> List<span
style="color:#719e07">&lt;</span>ProtocolServer<span
style="color:#719e07">&gt;</span> <span
style="color:#268bd2">getServers</span><span
style="color:#719e07">()</span> <span style="color:#719e07">{</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#719e07">return</span> protocol<span
style="color:#719e07">.</span>getServers<span
style="color:#719e07">();</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#719e07">}</span>
+</span></span><span style="display:flex;"><span><span
style="color:#719e07">}</span>
+</span></span></code></pre></div><h4 id="spi配置">SPI配置</h4>
+<h5 id="provider-1">Provider</h5>
+<p>在<code>resources/META-INF/dubbo/org.apache.dubbo.rpc.Protocol</code>文件中添加如下配置:</p>
+<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-properties" data-lang="properties"><span
style="display:flex;"><span>edubbo<span
style="color:#719e07">=</span><span
style="color:#2aa198">org.apache.dubbo.samples.extensibility.protocol.common.EnhancedProtocol</span>
+</span></span></code></pre></div><h5
id="consumer-1">Consumer</h5>
+<p>在<code>resources/META-INF/dubbo/org.apache.dubbo.rpc.Protocol</code>文件中添加如下配置:</p>
+<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-properties" data-lang="properties"><span
style="display:flex;"><span>edubbo<span
style="color:#719e07">=</span><span
style="color:#2aa198">org.apache.dubbo.samples.extensibility.protocol.common.EnhancedProtocol</span>
+</span></span></code></pre></div><h4 id="配置文件">配置文件</h4>
+<h5 id="provider-2">Provider</h5>
+<p>在<code>resources/application.properties</code>文件中添加如下配置:</p>
+<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-properties" data-lang="properties"><span
style="display:flex;"><span><span style="color:#586e75"># 自定义协议</span>
+</span></span><span
style="display:flex;"><span>dubbo.provider.protocol<span
style="color:#719e07">=</span><span style="color:#2aa198">edubbo</span>
+</span></span></code></pre></div><h5
id="consumer-2">Consumer</h5>
+<p>在<code>resources/application.properties</code>文件中添加如下配置:</p>
+<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-properties" data-lang="properties"><span
style="display:flex;"><span><span style="color:#586e75"># 自定义协议</span>
+</span></span><span
style="display:flex;"><span>dubbo.consumer.protocol<span
style="color:#719e07">=</span><span style="color:#2aa198">edubbo</span>
+</span></span></code></pre></div><h2 id="运行结果">运行结果</h2>
+<p>以<strong>使用本地IDE</strong>的方式来运行任务,结果如下:</p>
+<h4 id="注册协议">注册协议</h4>
+<p><img
src="https://cn.dubbo.apache.org/imgs/v3/tasks/extensibility/dubbo-samples-extensibility-protocol-output2.jpg"
alt="dubbo-samples-extensibility-protocol-output2.jpg"></p>
+<h4 id="输出结果">输出结果</h4>
+<p><img
src="https://cn.dubbo.apache.org/imgs/v3/tasks/extensibility/dubbo-samples-extensibility-protocol-output1.png"
alt="dubbo-samples-extensibility-protocol-output1.png"></p></description></item><item><title>Overview:
Registry</title><link>https://cn.dubbo.apache.org/zh-cn/overview/tasks/extensibility/registry/</link><pubDate>Mon,
01 Jan 0001 00:00:00
+0000</pubDate><guid>https://cn.dubbo.apache.org/zh-cn/overview/tasks/extensibility/registry/</guid><description/></item><ite
[...]
<p>通过自定义路由,可以根据业务场景的特点来实现特定的路由方式。</p>
<h2 id="开始之前">开始之前</h2>
<p>有两种部署运行方式,二选一</p>
diff --git a/zh-cn/overview/tasks/extensibility/protocol/index.html
b/zh-cn/overview/tasks/extensibility/protocol/index.html
index 6766bfc7ce..a22e2ecd82 100644
--- a/zh-cn/overview/tasks/extensibility/protocol/index.html
+++ b/zh-cn/overview/tasks/extensibility/protocol/index.html
@@ -1,4 +1,4 @@
-<!doctype html><html lang=zh-cn class=no-js><head><meta name=ROBOTS
content="INDEX, FOLLOW"><link rel=canonical
href=https://cn.dubbo.apache.org/zh-cn/overview/tasks/extensibility/protocol/><script>var
_hmt=_hmt||[];(function(){var
e,t=document.createElement("script");t.src="https://hm.baidu.com/hm.js?3b78f49ba47181e4d998a66b689446e9",e=document.getElementsByTagName("script")[0],e.parentNode.insertBefore(t,e)})()</script><meta
charset=utf-8><meta name=viewport content="width=device-width [...]
+<!doctype html><html lang=zh-cn class=no-js><head><meta name=ROBOTS
content="INDEX, FOLLOW"><link rel=canonical
href=https://cn.dubbo.apache.org/zh-cn/overview/tasks/extensibility/protocol/><script>var
_hmt=_hmt||[];(function(){var
e,t=document.createElement("script");t.src="https://hm.baidu.com/hm.js?3b78f49ba47181e4d998a66b689446e9",e=document.getElementsByTagName("script")[0],e.parentNode.insertBefore(t,e)})()</script><meta
charset=utf-8><meta name=viewport content="width=device-width [...]
<link rel=preload
href=/scss/main.min.578ffe330fde90c98ec1a836a78e3a4f7ea2a73a72f353cdd331fc3f8dd3a3cd.css
as=style><link
href=/scss/main.min.578ffe330fde90c98ec1a836a78e3a4f7ea2a73a72f353cdd331fc3f8dd3a3cd.css
rel=stylesheet integrity><script src=/js/jquery-3.5.1.min.js
integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0="
crossorigin=anonymous></script>
<link rel=stylesheet href=https://cdn.jsdelivr.net/npm/@docsearch/css@3><meta
name=theme-color content="#326ce5"><link rel=stylesheet
href=/css/feature-states.css><meta name=description content="自定义协议"><meta
property="og:description" content="自定义协议"><meta name=twitter:description
content="自定义协议"><meta property="og:url"
content="https://cn.dubbo.apache.org/zh-cn/overview/tasks/extensibility/protocol/"><meta
property="og:title" content="Protocol"><meta name=twitter:title
content="Protocol" [...]
<link href=/css/community.css rel=stylesheet><link href=/css/contactus.css
rel=stylesheet><link href=/css/language.css rel=stylesheet><script
src=/js/script.js></script></head><body class="td-page
td-documentation"><header><nav class="js-navbar-scroll navbar navbar-expand
navbar-dark flex-column flex-md-row td-navbar" data-auto-burger=primary><a
class=navbar-brand href=/zh-cn/><span class=navbar-logo></span><span
class="text-uppercase font-weight-bold">Apache Dubbo</span></a><div class="
[...]
@@ -717,11 +717,176 @@
<label for=m-zh-cnoverviewreferenceproposalsadmin-check><a
href=/zh-cn/overview/reference/proposals/admin/ title="Dubbo Admin 控制面总体架构设计"
class="align-left pl-0 td-sidebar-link td-sidebar-link__page"
id=m-zh-cnoverviewreferenceproposalsadmin><span>Admin
架构设计</span></a></label></li><li class="td-sidebar-nav__section-title
td-sidebar-nav__section without-child"
id=m-zh-cnoverviewreferenceproposalsmetrics-li><input type=checkbox
id=m-zh-cnoverviewreferenceproposalsmetrics-check>
<label for=m-zh-cnoverviewreferenceproposalsmetrics-check><a
href=/zh-cn/overview/reference/proposals/metrics/ class="align-left pl-0
td-sidebar-link td-sidebar-link__page"
id=m-zh-cnoverviewreferenceproposalsmetrics><span>指标埋点</span></a></label></li><li
class="td-sidebar-nav__section-title td-sidebar-nav__section without-child"
id=m-zh-cnoverviewreferenceproposalsheuristic-flow-control-li><input
type=checkbox id=m-zh-cnoverviewreferenceproposalsheuristic-flow-control-check>
<label for=m-zh-cnoverviewreferenceproposalsheuristic-flow-control-check><a
href=/zh-cn/overview/reference/proposals/heuristic-flow-control/
title=自适应负载均衡与限流 class="align-left pl-0 td-sidebar-link td-sidebar-link__page"
id=m-zh-cnoverviewreferenceproposalsheuristic-flow-control><span>服务柔性</span></a></label></li><li
class="td-sidebar-nav__section-title td-sidebar-nav__section without-child"
id=m-zh-cnoverviewreferenceproposalsservice-discovery-li><input type=checkbox
id=m-zh-cnoverviewref [...]
-<label for=m-zh-cnoverviewreferenceproposalsservice-discovery-check><a
href=/zh-cn/overview/reference/proposals/service-discovery/ title="Dubbo3
应用级服务发现设计" class="align-left pl-0 td-sidebar-link td-sidebar-link__page"
id=m-zh-cnoverviewreferenceproposalsservice-discovery><span>应用级服务发现</span></a></label></li></ul></li></ul></li></ul></li></ul></nav></div></div><main
class="col-12 col-md-9 col-xl-8 pl-md-5" role=main><nav aria-label=breadcrumb
class=td-breadcrumbs><ol class=breadcrumb><li [...]
-<button class="btn btn-primary mb-4
feedback--no">否</button></div><script>const
yes=document.querySelector(".feedback--yes"),no=document.querySelector(".feedback--no");document.querySelectorAll(".feedback--link").forEach(e=>{e.href=e.href+window.location.pathname});const
sendFeedback=e=>{gtag||console.log("!gtag"),gtag("event","click",{event_category:"Helpful",event_label:window.location.pathname,value:e})},disableButtons=()=>{yes.disabled=!0,yes.classList.add("feedback--button__disabled
[...]
+<label for=m-zh-cnoverviewreferenceproposalsservice-discovery-check><a
href=/zh-cn/overview/reference/proposals/service-discovery/ title="Dubbo3
应用级服务发现设计" class="align-left pl-0 td-sidebar-link td-sidebar-link__page"
id=m-zh-cnoverviewreferenceproposalsservice-discovery><span>应用级服务发现</span></a></label></li></ul></li></ul></li></ul></li></ul></nav></div></div><main
class="col-12 col-md-9 col-xl-8 pl-md-5" role=main><nav aria-label=breadcrumb
class=td-breadcrumbs><ol class=breadcrumb><li [...]
+</span></span><span style=display:flex><span>filter<span
style=color:#719e07>=</span><span
style=color:#2aa198>org.apache.dubbo.rpc.cluster.filter.ProtocolFilterWrapper</span>
+</span></span><span style=display:flex><span>qos<span
style=color:#719e07>=</span><span
style=color:#2aa198>org.apache.dubbo.qos.protocol.QosProtocolWrapper</span>
+</span></span><span style=display:flex><span>registry<span
style=color:#719e07>=</span><span
style=color:#2aa198>org.apache.dubbo.registry.integration.InterfaceCompatibleRegistryProtocol</span>
+</span></span><span style=display:flex><span>service-discovery-registry<span
style=color:#719e07>=</span><span
style=color:#2aa198>org.apache.dubbo.registry.integration.RegistryProtocol</span>
+</span></span><span style=display:flex><span>listener<span
style=color:#719e07>=</span><span
style=color:#2aa198>org.apache.dubbo.rpc.protocol.ProtocolListenerWrapper</span>
+</span></span><span style=display:flex><span>mock<span
style=color:#719e07>=</span><span
style=color:#2aa198>org.apache.dubbo.rpc.support.MockProtocol</span>
+</span></span><span style=display:flex><span>serializationwrapper<span
style=color:#719e07>=</span><span
style=color:#2aa198>org.apache.dubbo.rpc.protocol.ProtocolSerializationWrapper</span>
+</span></span><span style=display:flex><span>securitywrapper<span
style=color:#719e07>=</span><span
style=color:#2aa198>org.apache.dubbo.rpc.protocol.ProtocolSecurityWrapper</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#586e75>#
Dubbo对外支持的常用协议</span>
+</span></span><span style=display:flex><span>dubbo<span
style=color:#719e07>=</span><span
style=color:#2aa198>org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol</span>
+</span></span><span style=display:flex><span>injvm<span
style=color:#719e07>=</span><span
style=color:#2aa198>org.apache.dubbo.rpc.protocol.injvm.InjvmProtocol</span>
+</span></span><span style=display:flex><span>rest<span
style=color:#719e07>=</span><span
style=color:#2aa198>org.apache.dubbo.rpc.protocol.rest.RestProtocol</span>
+</span></span><span style=display:flex><span>grpc<span
style=color:#719e07>=</span><span
style=color:#2aa198>org.apache.dubbo.rpc.protocol.grpc.GrpcProtocol</span>
+</span></span><span style=display:flex><span>tri<span
style=color:#719e07>=</span><span
style=color:#2aa198>org.apache.dubbo.rpc.protocol.tri.TripleProtocol</span>
+</span></span></code></pre></div><p>我们可以看到,在Dubbo中通过协议扩展的能力实现了过滤、监控数据采集、服务发现、监听器、mock、序列化、安全等一系列能力,同时对外提供了<code>dubbo</code>,<code>injvm</code>,<code>rest</code>,<code>grpc</code>和<code>tri</code>协议。</p><p>自定义一套私有协议有两种方式,第一种是对原有的协议进行包装,添加一些特定的业务逻辑。另外一种是完全自定义一套协议。前者实现简单,在<code>dubbo</code>中也是有广泛的使用,比如:<code>ProtocolFilterWrapper</code>,
<code>QosProtocolWrapper</code>,
<code>ProtocolListenerWrapper</code>等。后者实现复杂,一般常见的协议<code>dubbo</code>都实现了,并且通过了大量生产实践的验证。</p><p>本文会通过示例演示如何通过现有协议实现一套自定义
[...]
+</span></span><span style=display:flex><span>dubbo.application.name<span
style=color:#719e07>=</span><span
style=color:#2aa198>extensibility-protocol-provider</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#586e75>#
Enable token verification for each invocation</span>
+</span></span><span style=display:flex><span>dubbo.provider.token<span
style=color:#719e07>=</span><span style=color:#2aa198>true</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#586e75>#
Specify the registry address</span>
+</span></span><span style=display:flex><span><span style=color:#586e75>#
dubbo.registry.address=nacos://localhost:8848?username=nacos&password=nacos</span>
+</span></span><span style=display:flex><span>dubbo.registry.address<span
style=color:#719e07>=</span><span
style=color:#2aa198>nacos://${nacos.address:localhost}:8848?username=nacos&password=nacos</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#586e75>#
自定义协议edubbo</span>
+</span></span><span style=display:flex><span>dubbo.provider.protocol<span
style=color:#719e07>=</span><span style=color:#2aa198>edubbo</span>
+</span></span></code></pre></div></li><li>修改<a
href=https://github.com/apache/dubbo-samples/blob/master/10-task/dubbo-samples-extensibility/dubbo-samples-extensibility-protocol-consumer/src/main/resources/application.properties>Consumer</a>中的配置文件,启用Kubernetes中部署的nacos的地址<div
class=highlight><pre tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-properties data-lang=properties><span
style=display:flex><span><span style=co [...]
+</span></span><span style=display:flex><span>dubbo.application.name<span
style=color:#719e07>=</span><span
style=color:#2aa198>extensibility-protocol-consumer</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#586e75>#
Enable token verification for each invocation</span>
+</span></span><span style=display:flex><span>dubbo.provider.token<span
style=color:#719e07>=</span><span style=color:#2aa198>true</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#586e75>#
Specify the registry address</span>
+</span></span><span style=display:flex><span><span style=color:#586e75>#
dubbo.registry.address=nacos://localhost:8848?username=nacos&password=nacos</span>
+</span></span><span style=display:flex><span>dubbo.registry.address<span
style=color:#719e07>=</span><span
style=color:#2aa198>nacos://${nacos.address:localhost}:8848?username=nacos&password=nacos</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#586e75>#
自定义协议edubbo</span>
+</span></span><span style=display:flex><span>dubbo.consumer.protocol<span
style=color:#719e07>=</span><span style=color:#2aa198>edubbo</span>
+</span></span></code></pre></div></li><li>部署<code>[Extensibility Protocol
Task](https://github.com/apache/dubbo-samples/blob/master/10-task/dubbo-samples-extensibility/deploy/All.yml)</code></li></ul><h3
id=使用本地ide>使用本地IDE</h3><ul><li>部署<a
href=https://nacos.io/zh-cn/docs/quick-start.html>Nacos</a>2.2.0版本</li><li>修改<a
href=https://github.com/apache/dubbo-samples/blob/master/10-task/dubbo-samples-extensibility/dubbo-samples-extensibility-protocol-provider/src/main/resources/application.pr
[...]
+</span></span><span style=display:flex><span>dubbo.application.name<span
style=color:#719e07>=</span><span
style=color:#2aa198>extensibility-protocol-provider</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#586e75>#
Enable token verification for each invocation</span>
+</span></span><span style=display:flex><span>dubbo.provider.token<span
style=color:#719e07>=</span><span style=color:#2aa198>true</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#586e75>#
Specify the registry address</span>
+</span></span><span style=display:flex><span><span style=color:#586e75>#
启用本地nacos的地址</span>
+</span></span><span style=display:flex><span>dubbo.registry.address<span
style=color:#719e07>=</span><span
style=color:#2aa198>nacos://localhost:8848?username=nacos&password=nacos</span>
+</span></span><span style=display:flex><span><span style=color:#586e75>#
dubbo.registry.address=nacos://${nacos.address:localhost}:8848?username=nacos&password=nacos</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#586e75>#
自定义协议edubbo</span>
+</span></span><span style=display:flex><span>dubbo.provider.protocol<span
style=color:#719e07>=</span><span style=color:#2aa198>edubbo</span>
+</span></span></code></pre></div></li><li>修改<a
href=https://github.com/apache/dubbo-samples/blob/master/10-task/dubbo-samples-extensibility/dubbo-samples-extensibility-protocol-consumer/src/main/resources/application.properties>Consumer</a>中的配置文件,启用本地nacos的地址<div
class=highlight><pre tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-properties data-lang=properties><span
style=display:flex><span><span style=color:#586e75> [...]
+</span></span><span style=display:flex><span>dubbo.application.name<span
style=color:#719e07>=</span><span
style=color:#2aa198>extensibility-protocol-consumer</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#586e75>#
Enable token verification for each invocation</span>
+</span></span><span style=display:flex><span>dubbo.provider.token<span
style=color:#719e07>=</span><span style=color:#2aa198>true</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#586e75>#
Specify the registry address</span>
+</span></span><span style=display:flex><span><span style=color:#586e75>#
启用本地nacos的地址</span>
+</span></span><span style=display:flex><span>dubbo.registry.address<span
style=color:#719e07>=</span><span
style=color:#2aa198>nacos://localhost:8848?username=nacos&password=nacos</span>
+</span></span><span style=display:flex><span><span style=color:#586e75>#
dubbo.registry.address=nacos://${nacos.address:localhost}:8848?username=nacos&password=nacos</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#586e75>#
自定义协议edubbo</span>
+</span></span><span style=display:flex><span>dubbo.consumer.protocol<span
style=color:#719e07>=</span><span style=color:#2aa198>edubbo</span>
+</span></span></code></pre></div></li></ul><h2
id=任务详情>任务详情</h2><p>基于现有的<code>dubbo</code>协议来实现自定义协议<code>edubbo</code>。</p><h2
id=实现方式>实现方式</h2><p>通过对<code>dubbo</code>协议进行包装来实现<code>edubbo</code>协议。</p><h4
id=代码结构>代码结构</h4><h5 id=common>Common</h5><div class=highlight><pre tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-properties data-lang=properties><span
style=display:flex><span>src
+</span></span><span style=display:flex><span> |-main
+</span></span><span style=display:flex><span> |-java
+</span></span><span style=display:flex><span> |-org
+</span></span><span style=display:flex><span> |-apache
+</span></span><span style=display:flex><span> |-dubbo
+</span></span><span style=display:flex><span> |-samples
+</span></span><span style=display:flex><span>
|-extensibility
+</span></span><span style=display:flex><span>
|-protocol
+</span></span><span style=display:flex><span>
|-common
+</span></span><span style=display:flex><span>
|-EnhancedProtocol.java <span style=color:#2aa198>(实现Protocol接口)</span>
+</span></span></code></pre></div><h5 id=provider>Provider</h5><div
class=highlight><pre tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-properties data-lang=properties><span
style=display:flex><span>src
+</span></span><span style=display:flex><span> |-main
+</span></span><span style=display:flex><span> |-java
+</span></span><span style=display:flex><span> |-org
+</span></span><span style=display:flex><span> |-apache
+</span></span><span style=display:flex><span> |-dubbo
+</span></span><span style=display:flex><span> |-samples
+</span></span><span style=display:flex><span>
|-extensibility
+</span></span><span style=display:flex><span>
|-protocol
+</span></span><span style=display:flex><span>
|-provider
+</span></span><span style=display:flex><span>
|-ExtensibilityProtocolProviderApplication.java
+</span></span><span style=display:flex><span>
|-ExtensibilityProtocolServiceImpl.java
+</span></span><span style=display:flex><span> |-resources
+</span></span><span style=display:flex><span> |-META-INF
+</span></span><span style=display:flex><span>
|-application.properties <span style=color:#2aa198>(Dubbo Provider配置文件)</span>
+</span></span><span style=display:flex><span> |-dubbo
+</span></span><span style=display:flex><span>
|-org.apache.dubbo.rpc.Protocol <span style=color:#2aa198>(纯文本文件)</span>
+</span></span></code></pre></div><h5 id=consumer>Consumer</h5><div
class=highlight><pre tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-properties data-lang=properties><span
style=display:flex><span>src
+</span></span><span style=display:flex><span> |-main
+</span></span><span style=display:flex><span> |-java
+</span></span><span style=display:flex><span> |-org
+</span></span><span style=display:flex><span> |-apache
+</span></span><span style=display:flex><span> |-dubbo
+</span></span><span style=display:flex><span> |-samples
+</span></span><span style=display:flex><span>
|-extensibility
+</span></span><span style=display:flex><span>
|-protocol
+</span></span><span style=display:flex><span>
|-consumer
+</span></span><span style=display:flex><span>
|-ExtensibilityProtocolConsumerApplication.java
+</span></span><span style=display:flex><span>
|-ExtensibilityProtocolConsumerTask.java
+</span></span><span style=display:flex><span> |-resources
+</span></span><span style=display:flex><span> |-META-INF
+</span></span><span style=display:flex><span>
|-application.properties <span style=color:#2aa198>(Dubbo Consumer配置文件)</span>
+</span></span><span style=display:flex><span> |-dubbo
+</span></span><span style=display:flex><span>
|-org.apache.dubbo.rpc.Protocol <span style=color:#2aa198>(纯文本文件)</span>
+</span></span></code></pre></div><h4 id=代码详情>代码详情</h4><div
class=highlight><pre tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-java data-lang=java><span style=display:flex><span><span
style=color:#719e07>package</span>
org.apache.dubbo.samples.extensibility.protocol.common<span
style=color:#719e07>;</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span
style=color:#719e07>import</span> org.apache.dubbo.common.URL<span
style=color:#719e07>;</span>
+</span></span><span style=display:flex><span><span
style=color:#719e07>import</span> org.apache.dubbo.rpc.Protocol<span
style=color:#719e07>;</span>
+</span></span><span style=display:flex><span><span
style=color:#719e07>import</span> org.apache.dubbo.rpc.Invoker<span
style=color:#719e07>;</span>
+</span></span><span style=display:flex><span><span
style=color:#719e07>import</span> org.apache.dubbo.rpc.Exporter<span
style=color:#719e07>;</span>
+</span></span><span style=display:flex><span><span
style=color:#719e07>import</span> org.apache.dubbo.rpc.ProtocolServer<span
style=color:#719e07>;</span>
+</span></span><span style=display:flex><span><span
style=color:#719e07>import</span> org.apache.dubbo.rpc.RpcException<span
style=color:#719e07>;</span>
+</span></span><span style=display:flex><span><span
style=color:#719e07>import</span>
org.apache.dubbo.rpc.model.FrameworkModel<span style=color:#719e07>;</span>
+</span></span><span style=display:flex><span><span
style=color:#719e07>import</span>
org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol<span
style=color:#719e07>;</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span
style=color:#719e07>import</span> java.util.List<span
style=color:#719e07>;</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span
style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span
style=color:#268bd2>EnhancedProtocol</span> <span
style=color:#268bd2>implements</span> Protocol <span
style=color:#719e07>{</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span> <span
style=color:#268bd2>public</span> <span
style=color:#268bd2>EnhancedProtocol</span><span
style=color:#719e07>(</span>FrameworkModel frameworkModel<span
style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+</span></span><span style=display:flex><span> <span
style=color:#719e07>this</span><span style=color:#719e07>.</span>protocol <span
style=color:#719e07>=</span> <span style=color:#719e07>new</span>
DubboProtocol<span style=color:#719e07>(</span>frameworkModel<span
style=color:#719e07>);</span>
+</span></span><span style=display:flex><span> <span
style=color:#719e07>}</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span> <span
style=color:#268bd2>private</span> <span style=color:#268bd2>final</span>
Protocol protocol<span style=color:#719e07>;</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span> <span
style=color:#268bd2>@Override</span>
+</span></span><span style=display:flex><span> <span
style=color:#268bd2>public</span> <span style=color:#dc322f>int</span> <span
style=color:#268bd2>getDefaultPort</span><span style=color:#719e07>()</span>
<span style=color:#719e07>{</span>
+</span></span><span style=display:flex><span> <span
style=color:#719e07>return</span> <span style=color:#719e07>this</span><span
style=color:#719e07>.</span>protocol<span
style=color:#719e07>.</span>getDefaultPort<span style=color:#719e07>();</span>
+</span></span><span style=display:flex><span> <span
style=color:#719e07>}</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span> <span
style=color:#268bd2>@Override</span>
+</span></span><span style=display:flex><span> <span
style=color:#268bd2>public</span> <span style=color:#719e07><</span>T<span
style=color:#719e07>></span> Exporter<span
style=color:#719e07><</span>T<span style=color:#719e07>></span> <span
style=color:#268bd2>export</span><span style=color:#719e07>(</span>Invoker<span
style=color:#719e07><</span>T<span style=color:#719e07>></span>
invoker<span style=color:#719e07>)</span> <span
style=color:#268bd2>throws</span> RpcEx [...]
+</span></span><span style=display:flex><span> <span
style=color:#586e75>// do something
+</span></span></span><span style=display:flex><span><span
style=color:#586e75></span> <span style=color:#719e07>return</span>
<span style=color:#719e07>this</span><span
style=color:#719e07>.</span>protocol<span
style=color:#719e07>.</span>export<span
style=color:#719e07>(</span>invoker<span style=color:#719e07>);</span>
+</span></span><span style=display:flex><span> <span
style=color:#719e07>}</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span> <span
style=color:#268bd2>@Override</span>
+</span></span><span style=display:flex><span> <span
style=color:#268bd2>public</span> <span style=color:#719e07><</span>T<span
style=color:#719e07>></span> Invoker<span
style=color:#719e07><</span>T<span style=color:#719e07>></span> <span
style=color:#268bd2>refer</span><span style=color:#719e07>(</span>Class<span
style=color:#719e07><</span>T<span style=color:#719e07>></span> type<span
style=color:#719e07>,</span> URL url<span style=color:#719e07>)</span> <span
styl [...]
+</span></span><span style=display:flex><span> <span
style=color:#586e75>// do something
+</span></span></span><span style=display:flex><span><span
style=color:#586e75></span> <span style=color:#719e07>return</span>
<span style=color:#719e07>this</span><span
style=color:#719e07>.</span>protocol<span
style=color:#719e07>.</span>refer<span style=color:#719e07>(</span>type<span
style=color:#719e07>,</span> url<span style=color:#719e07>);</span>
+</span></span><span style=display:flex><span> <span
style=color:#719e07>}</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span> <span
style=color:#268bd2>@Override</span>
+</span></span><span style=display:flex><span> <span
style=color:#268bd2>public</span> <span style=color:#dc322f>void</span> <span
style=color:#268bd2>destroy</span><span style=color:#719e07>()</span> <span
style=color:#719e07>{</span>
+</span></span><span style=display:flex><span> <span
style=color:#719e07>this</span><span style=color:#719e07>.</span>protocol<span
style=color:#719e07>.</span>destroy<span style=color:#719e07>();</span>
+</span></span><span style=display:flex><span> <span
style=color:#719e07>}</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span> <span
style=color:#268bd2>@Override</span>
+</span></span><span style=display:flex><span> <span
style=color:#268bd2>public</span> List<span
style=color:#719e07><</span>ProtocolServer<span
style=color:#719e07>></span> <span
style=color:#268bd2>getServers</span><span style=color:#719e07>()</span> <span
style=color:#719e07>{</span>
+</span></span><span style=display:flex><span> <span
style=color:#719e07>return</span> protocol<span
style=color:#719e07>.</span>getServers<span style=color:#719e07>();</span>
+</span></span><span style=display:flex><span> <span
style=color:#719e07>}</span>
+</span></span><span style=display:flex><span><span style=color:#719e07>}</span>
+</span></span></code></pre></div><h4 id=spi配置>SPI配置</h4><h5
id=provider-1>Provider</h5><p>在<code>resources/META-INF/dubbo/org.apache.dubbo.rpc.Protocol</code>文件中添加如下配置:</p><div
class=highlight><pre tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-properties data-lang=properties><span
style=display:flex><span>edubbo<span style=color:#719e07>=</span><span
style=color:#2aa198>org.apache.dubbo.samples.extensibility.protocol [...]
+</span></span></code></pre></div><h5
id=consumer-1>Consumer</h5><p>在<code>resources/META-INF/dubbo/org.apache.dubbo.rpc.Protocol</code>文件中添加如下配置:</p><div
class=highlight><pre tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-properties data-lang=properties><span
style=display:flex><span>edubbo<span style=color:#719e07>=</span><span
style=color:#2aa198>org.apache.dubbo.samples.extensibility.protocol.common.EnhancedProtoco
[...]
+</span></span></code></pre></div><h4 id=配置文件>配置文件</h4><h5
id=provider-2>Provider</h5><p>在<code>resources/application.properties</code>文件中添加如下配置:</p><div
class=highlight><pre tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-properties data-lang=properties><span
style=display:flex><span><span style=color:#586e75># 自定义协议</span>
+</span></span><span style=display:flex><span>dubbo.provider.protocol<span
style=color:#719e07>=</span><span style=color:#2aa198>edubbo</span>
+</span></span></code></pre></div><h5
id=consumer-2>Consumer</h5><p>在<code>resources/application.properties</code>文件中添加如下配置:</p><div
class=highlight><pre tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-properties data-lang=properties><span
style=display:flex><span><span style=color:#586e75># 自定义协议</span>
+</span></span><span style=display:flex><span>dubbo.consumer.protocol<span
style=color:#719e07>=</span><span style=color:#2aa198>edubbo</span>
+</span></span></code></pre></div><h2
id=运行结果>运行结果</h2><p>以<strong>使用本地IDE</strong>的方式来运行任务,结果如下:</p><h4
id=注册协议>注册协议</h4><p><img
src=/imgs/v3/tasks/extensibility/dubbo-samples-extensibility-protocol-output2.jpg
alt=dubbo-samples-extensibility-protocol-output2.jpg></p><h4
id=输出结果>输出结果</h4><p><img
src=/imgs/v3/tasks/extensibility/dubbo-samples-extensibility-protocol-output1.png
alt=dubbo-samples-extensibility-protocol-output1.png></p><div
id=pre-footer><h2>反馈</h2><p class=feedback--prompt> [...]
+<button class="btn btn-primary mb-4
feedback--no">否</button></div><script>const
yes=document.querySelector(".feedback--yes"),no=document.querySelector(".feedback--no");document.querySelectorAll(".feedback--link").forEach(e=>{e.href=e.href+window.location.pathname});const
sendFeedback=e=>{gtag||console.log("!gtag"),gtag("event","click",{event_category:"Helpful",event_label:window.location.pathname,value:e})},disableButtons=()=>{yes.disabled=!0,yes.classList.add("feedback--button__disabled
[...]
<a
href="https://github.com/apache/dubbo-website/new/master/content/zh-cn/overview/tasks/extensibility/protocol.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+m
[...]
<a href="https://github.com/apache/dubbo-website/issues/new?title=Protocol"
target=_blank><i class="fab fa-github fa-fw"></i> 登记问题</a>
-<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas
fa-tasks fa-fw"></i> 提交项目问题</a></div></div></div></div></div><footer
class="bg-dark py-5 row d-print-none footer-margin-0"><div
class="container-fluid mx-sm-5"><div class=row><div class="col-6 col-sm-4
text-xs-center order-sm-2"><ul class="list-inline mb-0"><li
class="list-inline-item mx-2 h3" data-toggle=tooltip data-placement=top
title="Dubbo mailing list archive" aria-label="Dubbo mailing list archive"><a c
[...]
+<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas
fa-tasks fa-fw"></i> 提交项目问题</a></div><nav id=TableOfContents><ul><li><a
href=#开始之前>开始之前</a><ul><li><a href=#基于kubernetes>基于Kubernetes</a></li><li><a
href=#使用本地ide>使用本地IDE</a></li></ul></li><li><a href=#任务详情>任务详情</a></li><li><a
href=#实现方式>实现方式</a><ul><li></li></ul></li><li><a
href=#运行结果>运行结果</a><ul><li></li></ul></li></ul></nav></div></div></div></div><footer
class="bg-dark py-5 row d-print-none footer-margin-0 [...]
<script src=/js/bootstrap.min.js
integrity=sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy
crossorigin=anonymous></script>
<script
src=/js/main.min.b075178d232d3b0039b3cb6af2fc2e9d90071820167a60f4eea3a79169975ee8.js
integrity="sha256-sHUXjSMtOwA5s8tq8vwunZAHGCAWemD07qOnkWmXXug="
crossorigin=anonymous></script>
<script src=https://cdn.jsdelivr.net/npm/@docsearch/js@3></script>
diff --git a/zh-cn/sitemap.xml b/zh-cn/sitemap.xml
index 7db2bde1f7..8812080b8a 100644
--- a/zh-cn/sitemap.xml
+++ b/zh-cn/sitemap.xml
@@ -1 +1 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?><urlset
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml"><url><loc>https://cn.dubbo.apache.org/zh-cn/blog/2023/01/16/%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B4%E5%8D%87%E7%BA%A7-dubbo3-%E5%85%A8%E9%9D%A2%E5%8F%96%E4%BB%A3-hsf2/</loc><lastmod>2023-02-22T15:03:22+08:00</lastmod><changefreq>monthly</changefreq><priority>0.5</priority></url><url><loc>https://cn.dubbo.apache.org/zh-cn/overview/mannu
[...]
\ No newline at end of file
+<?xml version="1.0" encoding="utf-8" standalone="yes"?><urlset
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml"><url><loc>https://cn.dubbo.apache.org/zh-cn/blog/2023/01/16/%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B4%E5%8D%87%E7%BA%A7-dubbo3-%E5%85%A8%E9%9D%A2%E5%8F%96%E4%BB%A3-hsf2/</loc><lastmod>2023-02-22T15:03:22+08:00</lastmod><changefreq>monthly</changefreq><priority>0.5</priority></url><url><loc>https://cn.dubbo.apache.org/zh-cn/overview/mannu
[...]
\ No newline at end of file