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 e0054a5304 deploy: 496ddc34f35348224c44a090e4a74a587003e8f3
e0054a5304 is described below
commit e0054a53042293aaa2836b1b07f9e3e3f3c66218
Author: AlbumenJ <[email protected]>
AuthorDate: Thu Jan 19 12:42:43 2023 +0000
deploy: 496ddc34f35348224c44a090e4a74a587003e8f3
---
sitemap.xml | 2 +-
.../advanced-features-and-usage/traffic/index.xml | 192 +++++++++------------
.../traffic/mesh-style/index.html | 10 +-
.../traffic/routing-rule/index.html | 41 +++--
zh/sitemap.xml | 2 +-
5 files changed, 107 insertions(+), 140 deletions(-)
diff --git a/sitemap.xml b/sitemap.xml
index 018088ef81..0cfdd34bce 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/sitemap.xml</loc><lastmod>2023-01-19T09:58:15+08:00</lastmod></sitemap><sitemap><loc>https://cn.dubbo.apache.org/en/sitemap.xml</loc><lastmod>2023-01-17T14:11:51+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/sitemap.xml</loc><lastmod>2023-01-19T20:38:57+08:00</lastmod></sitemap><sitemap><loc>https://cn.dubbo.apache.org/en/sitemap.xml</loc><lastmod>2023-01-17T14:11:51+08:00</lastmod></sitemap></sitemapindex>
\ No newline at end of file
diff --git a/zh/docs3-v2/java-sdk/advanced-features-and-usage/traffic/index.xml
b/zh/docs3-v2/java-sdk/advanced-features-and-usage/traffic/index.xml
index 902085c144..901ec575df 100644
--- a/zh/docs3-v2/java-sdk/advanced-features-and-usage/traffic/index.xml
+++ b/zh/docs3-v2/java-sdk/advanced-features-and-usage/traffic/index.xml
@@ -1,16 +1,12 @@
<rss version="2.0"
xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Apache Dubbo –
流量治理规则</title><link>https://cn.dubbo.apache.org/zh/docs3-v2/java-sdk/advanced-features-and-usage/traffic/</link><description>Recent
content in 流量治理规则 on Apache Dubbo</description><generator>Hugo --
gohugo.io</generator><language>en-us</language><atom:link
href="https://cn.dubbo.apache.org/zh/docs3-v2/java-sdk/advanced-features-and-usage/traffic/index.xml"
rel="self" type="application/rss+xml"/><ite [...]
+<h2 id="路由规则概述">路由规则概述</h2>
<p>路由规则在发起一次RPC调用前起到过滤目标服务器地址的作用,过滤后的地址列表,将作为消费端最终发起RPC调用的备选地址。</p>
+<p>您可以随时在服务治理控制台 <a
href="https://github.com/apache/dubbo-admin">Dubbo-Admin</a> 写入路由规则。</p>
<ul>
<li>条件路由。支持以服务或 Consumer 应用为粒度配置路由规则。</li>
<li>标签路由。以 Provider 应用为粒度配置路由规则。</li>
</ul>
-<p>后续我们计划在 2.6.x 版本的基础上继续增强脚本路由功能。</p>
-<h2 id="条件路由">条件路由</h2>
-<p>您可以随时在服务治理控制台 <a
href="https://github.com/apache/dubbo-admin">Dubbo-Admin</a> 写入路由规则</p>
-<h3 id="简介">简介</h3>
-<ul>
-<li>
-<p>应用粒度</p>
+<h3 id="应用粒度">应用粒度</h3>
<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-yaml" data-lang="yaml"><span
style="display:flex;"><span><span style="color:#586e75">#
app1的消费者只能消费所有端口为20880的服务实例</span>
</span></span><span style="display:flex;"><span><span
style="color:#586e75"># app2的消费者只能消费所有端口为20881的服务实例</span>
</span></span><span style="display:flex;"><span>---
@@ -23,9 +19,7 @@
</span></span><span style="display:flex;"><span> -
application=app1 =&gt; address=*:20880
</span></span><span style="display:flex;"><span> -
application=app2 =&gt; address=*:20881
</span></span><span style="display:flex;"><span>...
-</span></span></code></pre></div></li>
-<li>
-<p>服务粒度</p>
+</span></span></code></pre></div><h3 id="服务粒度">服务粒度</h3>
<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-yaml" data-lang="yaml"><span
style="display:flex;"><span><span style="color:#586e75">#
DemoService的sayHello方法只能消费所有端口为20880的服务实例</span>
</span></span><span style="display:flex;"><span><span
style="color:#586e75"># DemoService的sayHi方法只能消费所有端口为20881的服务实例</span>
</span></span><span style="display:flex;"><span>---
@@ -38,10 +32,10 @@
</span></span><span style="display:flex;"><span> - method=sayHello
=&gt; address=*:20880
</span></span><span style="display:flex;"><span> - method=sayHi
=&gt; address=*:20881
</span></span><span style="display:flex;"><span>...
-</span></span></code></pre></div></li>
-</ul>
-<h3 id="规则详解">规则详解</h3>
-<h4 id="各字段含义">各字段含义</h4>
+</span></span></code></pre></div><blockquote>
+<p>后续我们计划在 2.6.x 版本的基础上继续增强脚本路由功能。</p>
+</blockquote>
+<h2 id="规则详解">规则详解</h2>
<ul>
<li><code>scope</code>表示路由规则的作用粒度,scope的取值会决定key的取值。<strong>必填</strong>。
<ul>
@@ -61,124 +55,61 @@
<li><code>priority=1</code> 路由规则的优先级,用于排序,优先级越大越靠前执行,可不填,缺省为
<code>0</code>。</li>
<li><code>conditions</code>
定义具体的路由规则内容。<strong>必填</strong>。</li>
</ul>
-<h4 id="conditions规则体">Conditions规则体</h4>
-<pre><code>`conditions`部分是规则的主体,由1到任意多条规则组成,下面我们就每个规则的配置语法做详细说明:
-</code></pre>
-<ol>
-<li><strong>格式</strong></li>
-</ol>
+<h3 id="conditions规则体">Conditions规则体</h3>
+<p><code>conditions</code>部分是规则的主体,由1到任意多条规则组成,下面我们就每个规则的配置语法做详细说明:</p>
+<p><strong>格式</strong></p>
<ul>
<li><code>=&gt;</code> 之前的为消费者匹配条件,所有参数和消费者的 URL
进行对比,当消费者满足匹配条件时,对该消费者执行后面的过滤规则。</li>
<li><code>=&gt;</code> 之后为提供者地址列表的过滤条件,所有参数和提供者的 URL
进行对比,消费者最终只拿到过滤后的地址列表。</li>
<li>如果匹配条件为空,表示对所有消费方应用,如:<code>=&gt; host !=
10.20.153.11</code></li>
<li>如果过滤条件为空,表示禁止访问,如:<code>host = 10.20.153.10
=&gt;</code></li>
</ul>
-<ol start="2">
-<li><strong>表达式</strong></li>
-</ol>
-<p>参数支持:</p>
+<p><strong>表达式</strong></p>
+<p>参数支持</p>
<ul>
<li>服务调用信息,如:method, argument 等,暂不支持参数路由</li>
<li>URL 本身的字段,如:protocol, host, port 等</li>
<li>以及 URL 上的所有参数,如:application, organization 等</li>
</ul>
-<p>条件支持:</p>
+<p>条件支持</p>
<ul>
<li>等号 <code>=</code> 表示&quot;匹配&quot;,如:<code>host =
10.20.153.10</code></li>
<li>不等号 <code>!=</code> 表示&quot;不匹配&quot;,如:<code>host !=
10.20.153.10</code></li>
</ul>
-<p>值支持:</p>
+<p>值支持</p>
<ul>
<li>以逗号 <code>,</code> 分隔多个值,如:<code>host !=
10.20.153.10,10.20.153.11</code></li>
<li>以星号 <code>*</code> 结尾,表示通配,如:<code>host !=
10.20.*</code></li>
<li>以美元符 <code>$</code> 开头,表示引用消费者参数,如:<code>host =
$host</code></li>
</ul>
-<ol start="3">
-<li><strong>Condition示例</strong></li>
-</ol>
-<ul>
-<li>排除预发布机:</li>
-</ul>
+<h3 id="condition示例">Condition示例</h3>
+<p>排除预发布机</p>
<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-fallback" data-lang="fallback"><span
style="display:flex;"><span>=&gt; host != 172.22.3.91
-</span></span></code></pre></div><ul>
-<li>白名单:</li>
-</ul>
+</span></span></code></pre></div><p>白名单</p>
<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-fallback" data-lang="fallback"><span
style="display:flex;"><span>register.ip != 10.20.153.10,10.20.153.11
=&gt;
-</span></span></code></pre></div>
-<div class="alert alert-warning" role="alert">
-<h4 class="alert-heading">注意</h4>
-一个服务只能有一条白名单规则,否则两条规则交叉,就都被筛选掉了
-</div>
-<ul>
-<li>黑名单:</li>
-</ul>
+</span></span></code></pre></div><blockquote>
+<p>一个服务只能有一条白名单规则,否则两条规则交叉,就都被筛选掉了</p>
+</blockquote>
+<p>黑名单</p>
<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-fallback" data-lang="fallback"><span
style="display:flex;"><span>register.ip = 10.20.153.10,10.20.153.11 =&gt;
-</span></span></code></pre></div><ul>
-<li>服务寄宿在应用上,只暴露一部分的机器,防止整个集群挂掉:</li>
-</ul>
+</span></span></code></pre></div><p>服务寄宿在应用上,只暴露一部分的机器,防止整个集群挂掉</p>
<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-fallback" data-lang="fallback"><span
style="display:flex;"><span>=&gt; host = 172.22.3.1*,172.22.3.2*
-</span></span></code></pre></div><ul>
-<li>为重要应用提供额外的机器:</li>
-</ul>
+</span></span></code></pre></div><p>为重要应用提供额外的机器</p>
<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-fallback" data-lang="fallback"><span
style="display:flex;"><span>application != kylin =&gt; host !=
172.22.3.95,172.22.3.96
-</span></span></code></pre></div><ul>
-<li>读写分离:</li>
-</ul>
+</span></span></code></pre></div><p>读写分离</p>
<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-fallback" data-lang="fallback"><span
style="display:flex;"><span>method = find*,list*,get*,is* =&gt; host =
172.22.3.94,172.22.3.95,172.22.3.96
</span></span><span style="display:flex;"><span>method !=
find*,list*,get*,is* =&gt; host = 172.22.3.97,172.22.3.98
-</span></span></code></pre></div><ul>
-<li>前后台分离:</li>
-</ul>
+</span></span></code></pre></div><p>前后台分离</p>
<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-fallback" data-lang="fallback"><span
style="display:flex;"><span>application = bops =&gt; host =
172.22.3.91,172.22.3.92,172.22.3.93
</span></span><span style="display:flex;"><span>application !=
bops =&gt; host = 172.22.3.94,172.22.3.95,172.22.3.96
-</span></span></code></pre></div><ul>
-<li>隔离不同机房网段:</li>
-</ul>
+</span></span></code></pre></div><p>隔离不同机房网段</p>
<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-fallback" data-lang="fallback"><span
style="display:flex;"><span>host != 172.22.3.* =&gt; host != 172.22.3.*
-</span></span></code></pre></div><ul>
-<li>提供者与消费者部署在同集群内,本机只访问本机的服务:</li>
-</ul>
+</span></span></code></pre></div><p>提供者与消费者部署在同集群内,本机只访问本机的服务</p>
<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-fallback" data-lang="fallback"><span
style="display:flex;"><span>=&gt; host = $host
</span></span></code></pre></div><h2
id="标签路由规则">标签路由规则</h2>
-<h3 id="简介-1">简介</h3>
<p>标签路由通过将某一个或多个服务的提供者划分到同一个分组,约束流量只在指定分组中流转,从而实现流量隔离的目的,可以作为蓝绿发布、灰度发布等场景的能力基础。</p>
-<h4 id="provider">Provider</h4>
-<p>标签主要是指对Provider端应用实例的分组,目前有两种方式可以完成实例分组,分别是<code>动态规则打标</code>和<code>静态规则打标</code>,其中动态规则相较于静态规则优先级更高,而当两种规则同时存在且出现冲突时,将以动态规则为准。</p>
-<ul>
-<li>
-<p>动态规则打标,可随时在<strong>服务治理控制台</strong>下发标签归组规则</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-yaml" data-lang="yaml"><span
style="display:flex;"><span><span style="color:#586e75">#
governance-tagrouter-provider应用增加了两个标签分组tag1和tag2</span>
-</span></span><span style="display:flex;"><span><span
style="color:#586e75"># tag1包含一个实例 127.0.0.1:20880</span>
-</span></span><span style="display:flex;"><span><span
style="color:#586e75"># tag2包含一个实例 127.0.0.1:20881</span>
-</span></span><span style="display:flex;"><span>---
-</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">force</span>: <span
style="color:#cb4b16">false</span>
-</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">runtime</span>: <span
style="color:#cb4b16">true</span>
-</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">enabled</span>: <span
style="color:#cb4b16">true</span>
-</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">key</span>: governance-tagrouter-provider
-</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">tags</span>:
-</span></span><span style="display:flex;"><span> - <span
style="color:#268bd2">name</span>: tag1
-</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">addresses</span>: [<span
style="color:#2aa198">&#34;127.0.0.1:20880&#34;</span>]
-</span></span><span style="display:flex;"><span> - <span
style="color:#268bd2">name</span>: tag2
-</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">addresses</span>: [<span
style="color:#2aa198">&#34;127.0.0.1:20881&#34;</span>]
-</span></span><span style="display:flex;"><span> ...
-</span></span></code></pre></div></li>
-<li>
-<p>静态打标</p>
-<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-xml" data-lang="xml"><span
style="display:flex;"><span><span
style="color:#268bd2">&lt;dubbo:provider</span> tag=<span
style="color:#2aa198">&#34;tag1&#34;</span><span
style="color:#268bd2">/&gt;</span>
-</span></span></code></pre></div><p>or</p>
-<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-xml" data-lang="xml"><span
style="display:flex;"><span><span
style="color:#268bd2">&lt;dubbo:service</span> tag=<span
style="color:#2aa198">&#34;tag1&#34;</span><span
style="color:#268bd2">/&gt;</span>
-</span></span></code></pre></div><p>or</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>java <span style="color:#2aa198">-jar
xxx-provider.jar -Ddubbo.provider.tag={the tag you want, may come from OS
ENV}</span>
-</span></span></code></pre></div></li>
-</ul>
-<h4 id="consumer">Consumer</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>RpcContext<span
style="color:#719e07">.</span>getContext<span
style="color:#719e07">().</span>setAttachment<span
style="color:#719e07">(</span>Constants<span
style="color:#719e07">.</span>TAG_KEY<span
style="color:#719e07">,</span><spa [...]
-</span></span></code></pre></div><p>请求标签的作用域为每一次
invocation,使用 attachment 来传递请求标签,注意保存在 attachment
中的值将会在一次完整的远程调用中持续传递,得益于这样的特性,我们只需要在起始调用时,通过一行代码的设置,达到标签的持续传递。</p>
-<blockquote>
-<p>目前仅仅支持 hardcoding 的方式设置 dubboTag。注意到 RpcContext 是线程绑定的,优雅的使用 TagRouter
特性,建议通过 servlet 过滤器(在 web 环境下),或者定制的 SPI 过滤器设置 dubboTag。</p>
-</blockquote>
<h3 id="规则详解-1">规则详解</h3>
-<h4 id="格式">格式</h4>
+<p><strong>格式</strong></p>
<ul>
<li><code>Key</code>明确规则体作用到哪个应用。<strong>必填</strong>。</li>
<li><code>enabled=true</code> 当前路由规则是否生效,可不填,缺省生效。</li>
@@ -192,7 +123,7 @@
</li>
<li>addresses, 当前标签包含的实例列表</li>
</ul>
-<h4 id="降级约定">降级约定</h4>
+<p><strong>降级约定</strong></p>
<ol>
<li>
<p><code>dubbo.tag=tag1</code> 时优先选择 标记了<code>tag=tag1</code> 的
provider。若集群中不存在与请求标记对应的服务,默认将降级请求
tag为空的provider;如果要改变这种默认行为,即找不到匹配tag1的provider返回异常,需设置<code>dubbo.force.tag=true</code>。</p>
@@ -201,10 +132,43 @@
<p><code>dubbo.tag</code>未设置时,只会匹配tag为空的provider。即使集群中存在可用的服务,若 tag
不匹配也就无法调用,这与约定1不同,携带标签的请求可以降级访问到无标签的服务,但不携带标签/携带其他种类标签的请求永远无法访问到其他标签的服务。</p>
</li>
</ol>
-<div class="alert alert-primary" role="alert">
-<h4 class="alert-heading">提示</h4>
-自定义路由参考<a
href="https://cn.dubbo.apache.org/zh/docs3-v2/java-sdk/reference-manual/spi/description/router/">路由扩展</a>
-</div></description></item><item><title>Docs3-V2:
配置规则</title><link>https://cn.dubbo.apache.org/zh/docs3-v2/java-sdk/advanced-features-and-usage/traffic/config-rule/</link><pubDate>Mon,
01 Jan 0001 00:00:00
+0000</pubDate><guid>https://cn.dubbo.apache.org/zh/docs3-v2/java-sdk/advanced-features-and-usage/traffic/config-rule/</guid><description>
+<h3 id="provider">Provider</h3>
+<p>标签主要是指对Provider端应用实例的分组,目前有两种方式可以完成实例分组,分别是<code>动态规则打标</code>和<code>静态规则打标</code>,其中动态规则相较于静态规则优先级更高,而当两种规则同时存在且出现冲突时,将以动态规则为准。</p>
+<blockquote>
+<p>可随时在<strong>服务治理控制台</strong>下发标签归组规则</p>
+</blockquote>
+<p><strong>动态规则打标</strong></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-yaml" data-lang="yaml"><span
style="display:flex;"><span><span style="color:#586e75">#
governance-tagrouter-provider应用增加了两个标签分组tag1和tag2</span>
+</span></span><span style="display:flex;"><span><span
style="color:#586e75"># tag1包含一个实例 127.0.0.1:20880</span>
+</span></span><span style="display:flex;"><span><span
style="color:#586e75"># tag2包含一个实例 127.0.0.1:20881</span>
+</span></span><span style="display:flex;"><span>---
+</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">force</span>: <span
style="color:#cb4b16">false</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">runtime</span>: <span
style="color:#cb4b16">true</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">enabled</span>: <span
style="color:#cb4b16">true</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">key</span>: governance-tagrouter-provider
+</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">tags</span>:
+</span></span><span style="display:flex;"><span> - <span
style="color:#268bd2">name</span>: tag1
+</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">addresses</span>: [<span
style="color:#2aa198">&#34;127.0.0.1:20880&#34;</span>]
+</span></span><span style="display:flex;"><span> - <span
style="color:#268bd2">name</span>: tag2
+</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">addresses</span>: [<span
style="color:#2aa198">&#34;127.0.0.1:20881&#34;</span>]
+</span></span><span style="display:flex;"><span>...
+</span></span></code></pre></div><p><strong>静态打标</strong></p>
+<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-xml" data-lang="xml"><span
style="display:flex;"><span><span
style="color:#268bd2">&lt;dubbo:provider</span> tag=<span
style="color:#2aa198">&#34;tag1&#34;</span><span
style="color:#268bd2">/&gt;</span>
+</span></span></code></pre></div><p><strong>or</strong></p>
+<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-xml" data-lang="xml"><span
style="display:flex;"><span><span
style="color:#268bd2">&lt;dubbo:service</span> tag=<span
style="color:#2aa198">&#34;tag1&#34;</span><span
style="color:#268bd2">/&gt;</span>
+</span></span></code></pre></div><p><strong>or</strong></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>java <span style="color:#2aa198">-jar
xxx-provider.jar -Ddubbo.provider.tag={the tag you want, may come from OS
ENV}</span>
+</span></span></code></pre></div><h3
id="consumer">Consumer</h3>
+<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-java" data-lang="java"><span
style="display:flex;"><span>RpcContext<span
style="color:#719e07">.</span>getContext<span
style="color:#719e07">().</span>setAttachment<span
style="color:#719e07">(</span>Constants<span
style="color:#719e07">.</span>TAG_KEY<span
style="color:#719e07">,</span><spa [...]
+</span></span></code></pre></div><blockquote>
+<p>请求标签的作用域为每一次 invocation,使用 attachment 来传递请求标签,注意保存在 attachment
中的值将会在一次完整的远程调用中持续传递,得益于这样的特性,我们只需要在起始调用时,通过一行代码的设置,达到标签的持续传递。</p>
+</blockquote>
+<blockquote>
+<p>目前仅仅支持 hardcoding 的方式设置 dubboTag。注意到 RpcContext 是线程绑定的,优雅的使用 TagRouter
特性,建议通过 servlet 过滤器(在 web 环境下),或者定制的 SPI 过滤器设置 dubboTag。</p>
+</blockquote>
+<blockquote>
+<p>自定义路由参考<a
href="https://cn.dubbo.apache.org/zh/docs3-v2/java-sdk/reference-manual/spi/description/router/">路由扩展</a></p>
+</blockquote></description></item><item><title>Docs3-V2:
配置规则</title><link>https://cn.dubbo.apache.org/zh/docs3-v2/java-sdk/advanced-features-and-usage/traffic/config-rule/</link><pubDate>Mon,
01 Jan 0001 00:00:00
+0000</pubDate><guid>https://cn.dubbo.apache.org/zh/docs3-v2/java-sdk/advanced-features-and-usage/traffic/config-rule/</guid><description>
<h2 id="配置规则概述">配置规则概述</h2>
<p>覆盖规则是 Dubbo 设计的在无需重启应用的情况下,动态调整 RPC 调用行为的一种能力。2.7.0
版本开始,支持从<strong>服务</strong>和<strong>应用</strong>两个粒度来调整动态配置。</p>
<blockquote>
@@ -372,14 +336,14 @@
</span></span><span style="display:flex;"><span> ...
</span></span></code></pre></div></description></item><item><title>Docs3-V2:
Mesh
路由规则</title><link>https://cn.dubbo.apache.org/zh/docs3-v2/java-sdk/advanced-features-and-usage/traffic/mesh-style/</link><pubDate>Mon,
01 Jan 0001 00:00:00
+0000</pubDate><guid>https://cn.dubbo.apache.org/zh/docs3-v2/java-sdk/advanced-features-and-usage/traffic/mesh-style/</guid><description>
<h3 id="基本思想">基本思想</h3>
-<p>基于路由链,采用Pipeline的处理方式,如下图所示:</p>
+<p>基于路由链,采用 Pipeline 的处理方式</p>
<p><img src="https://cn.dubbo.apache.org/imgs/user/route-rule1.png"
alt="route-rule1.png"></p>
-<p>可以把路由链的逻辑简单的理解为 target = rn(&hellip;r3(r2(r1(src))))。对于每一个 router
内部的逻辑,可以抽象为输入地址 addrs-in 与 router 中按全量地址 addrs-all 实现切分好的 n 个互不相交的地址池
addrs-pool-1 &hellip; addrs-pool-n 按实现定义好的规则取交集作为输出
addrs-out。以此类推,完成整个路由链的计算。</p>
-<p><img src="https://cn.dubbo.apache.org/imgs/user/route-rule2.png"
alt="route-rule2.png"></p>
+<p>可以把路由链的逻辑简单的理解为 target = rn(&hellip;r3(r2(r1(src))))。</p>
+<p>对于每一个 router 内部的逻辑,可以抽象为输入地址 addrs-in 与 router 中按全量地址 addrs-all 实现切分好的 n
个互不相交的地址池 addrs-pool-1 &hellip; addrs-pool-n 按实现定义好的规则取交集作为输出
addrs-out。以此类推,完成整个路由链的计算。</p>
<p>另外一方面,如果 router(n) 需要执行 fallback 逻辑的时候,那么需要经过 router(n) 就应该决定好 fallback
逻辑</p>
+<p><img src="https://cn.dubbo.apache.org/imgs/user/route-rule2.png"
alt="route-rule2.png"></p>
<h3 id="fallback-处理原则">fallback 处理原则</h3>
<p>由于多个 router 之间多个条件组件之后,很容易出现地址被筛选为空的情况,那么我们需要针对这情况进行 fallback
处理,保证业务在正确性的前提下,能够顺利找到有效地址。</p>
-<p>首先我们看一下以下规则</p>
<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-yaml" data-lang="yaml"><span
style="display:flex;"><span><span
style="color:#268bd2">apiVersion</span>: service.dubbo.apache.org/v1alpha1
</span></span><span style="display:flex;"><span><span
style="color:#268bd2">kind</span>: VirtualService
</span></span><span style="display:flex;"><span><span
style="color:#268bd2">metadata</span>:
@@ -456,8 +420,10 @@
</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">labels</span>:
</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">sigma.ali/mg</span>: v3-host
</span></span></code></pre></div><p>我们以脚本路由为例,这个脚本路由的匹配条件是遵循一个原则的,就是匹配的范围是从精确到广泛的一个过程,在这个示例来说,就是
sayHello(string)参数 -&gt; sayHello 方法 -&gt; 接口级路由 的一个匹配查找过程。</p>
+<blockquote>
<p>那么如果我们已经满足某个条件,但是选到的 subset 地址为空,我们将如何进行 fallback 处理呢?</p>
-<p>以匹配 sayHello(string)参数 条件为例,我们选择到的是 v1
subset,如果是空,我们可以向上一级是寻找地址,也就是方法级去寻找地址,具体的配置为下</p>
+</blockquote>
+<p>以匹配 sayHello(string)参数 条件为例,我们选择到的是 v1
subset,如果是空,我们可以向上一级是寻找地址,也就是方法级去寻找地址。</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-yaml" data-lang="yaml"><span
style="display:flex;"><span> - <span
style="color:#268bd2">name</span>: sayHello-String-method-route
</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">match</span>:
</span></span><span style="display:flex;"><span> - <span
style="color:#268bd2">method</span>:
@@ -479,7 +445,7 @@
</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">host</span>: demo
</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">subset</span>: v3
</span></span></code></pre></div><p>此时我们选到的地址是 v2 方法级地址,如果
v2 还是没有地址,根据规则的定义,我们是可以 fallback 到 v3 接口级。</p>
-<p>假设我们有一个方法匹配时,如果没有地址,需要不进行 fallback,直接报错,我们可以这样配置</p>
+<p>假设我们有一个方法匹配时,如果没有地址,需要不进行 fallback,直接报错,可以配置以下方式</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-yaml" data-lang="yaml"><span
style="display:flex;"><span><span
style="color:#268bd2">apiVersion</span>: service.dubbo.apache.org/v1alpha1
</span></span><span style="display:flex;"><span><span
style="color:#268bd2">kind</span>: VirtualService
</span></span><span style="display:flex;"><span><span
style="color:#268bd2">metadata</span>:
@@ -564,17 +530,19 @@
</span></span><span style="display:flex;"><span> - <span
style="color:#268bd2">name</span>: v3
</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">labels</span>:
</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">sigma.ali/mg</span>: v3-host
-</span></span></code></pre></div><p>从这个规则我们看出来匹配到
some-method 条件时对应的是 v4 subset,那么 v4 为空时,因为没有配置 fallback ,此时会直接报错</p>
-<h4 id="fallback-处理原则总结">fallback 处理原则总结</h4>
+</span></span></code></pre></div><p>从这个规则我们看出来匹配到
some-method 条件时对应的是 v4 subset,那么 v4 为空时,因为没有配置 fallback ,此时会直接报错。</p>
+<blockquote>
+<p>fallback 处理原则总结</p>
<ul>
<li>我们应该在 VirtualService route 中配置好 Destination 的 fallback 处理逻辑</li>
<li>在 fallback subset 时,如果对应的 subset 也配置有 fallback subset 时,也应递归处理;fallback
subset 之间的关系也应该是从具体到广泛</li>
<li>我们在编写匹配条件时,应该遵循从 具体条件到广泛条件 的原则</li>
</ul>
+</blockquote>
<h3 id="routechain-的组装模式-目前未实现">RouteChain 的组装模式 (目前未实现)</h3>
<p><img src="https://cn.dubbo.apache.org/imgs/user/route-rule3.png"
alt="route-rule3.png"></p>
<p>我们看到上面的图,在路由的过程当中,我们是 Pipeline 的处理方式,Pipeline 的 Router 节点存在顺序,并且每个
Router 都有一个唯一对应的 VirtualService 和 <strong>多个</strong> 相应的 DestinationRule
进行描述。</p>
-<p>以 Nacos 上存着的路由规则配置为例,配置的格式如下:</p>
+<p>以 Nacos 上存着的路由规则配置为例,配置格式如下</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-yaml" data-lang="yaml"><span
style="display:flex;"><span><span style="color:#268bd2">DataId</span>:
Demo.rule.yaml
</span></span><span style="display:flex;"><span><span
style="color:#268bd2">GROUP</span>: HSF
</span></span><span style="display:flex;"><span>
diff --git
a/zh/docs3-v2/java-sdk/advanced-features-and-usage/traffic/mesh-style/index.html
b/zh/docs3-v2/java-sdk/advanced-features-and-usage/traffic/mesh-style/index.html
index 4efef62d28..9d3bbff0c5 100644
---
a/zh/docs3-v2/java-sdk/advanced-features-and-usage/traffic/mesh-style/index.html
+++
b/zh/docs3-v2/java-sdk/advanced-features-and-usage/traffic/mesh-style/index.html
@@ -3,7 +3,7 @@
<link rel=stylesheet
href=https://cdn.jsdelivr.net/npm/@docsearch/css@3></head><body
class=td-section><header><nav class="js-navbar-scroll navbar navbar-expand
navbar-dark flex-column flex-md-row td-navbar"><a class=navbar-brand
href=/zh/><span class=navbar-logo><svg xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 321.39 78.54"><title id="title19">DUBBO LOGO</title><path
class="cls-1" d="M68.46 50.38c0 14.06 11.39 22.11 25.45 22.11s25.45-8.05
25.45-22.11V7.25H68.46zm21.24-28h8.6V31H89.7z [...]
<a
href="https://github.com/apache/dubbo-website/new/master/content/zh/docs3-v2/java-sdk/advanced-features-and-usage/traffic/mesh-style/_index.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%6
[...]
<a
href="https://github.com/apache/dubbo-website/issues/new?title=Mesh%20%e8%b7%af%e7%94%b1%e8%a7%84%e5%88%99"
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 class=td-toc><nav
id=TableOfContents><ul><li><ul><li><a href=#基本思想>基本思想</a></li><li><a
href=#fallback-处理原则>fallback 处理原则</a></li><li><a
href=#routechain-的组装模式-目前未实现>RouteChain 的组装模式
(目前未实现)</a></li></ul></li></ul></nav></div></aside><main class="col-12 col-md-9
col-xl-8 pl-md-5" role=main><nav aria-label=breadcrumb class="d-none d-md-block
d-print-none"><ol class="brea [...]
+<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas
fa-tasks fa-fw"></i> 提交项目问题</a></div><div class=td-toc><nav
id=TableOfContents><ul><li><ul><li><a href=#基本思想>基本思想</a></li><li><a
href=#fallback-处理原则>fallback 处理原则</a></li><li><a
href=#routechain-的组装模式-目前未实现>RouteChain 的组装模式
(目前未实现)</a></li></ul></li></ul></nav></div></aside><main class="col-12 col-md-9
col-xl-8 pl-md-5" role=main><nav aria-label=breadcrumb class="d-none d-md-block
d-print-none"><ol class="brea [...]
</span></span><span style=display:flex><span><span
style=color:#268bd2>kind</span>: VirtualService
</span></span><span style=display:flex><span><span
style=color:#268bd2>metadata</span>:
</span></span><span style=display:flex><span> <span
style=color:#268bd2>name</span>: demo-route
@@ -78,7 +78,7 @@
</span></span><span style=display:flex><span> - <span
style=color:#268bd2>name</span>: v3
</span></span><span style=display:flex><span> <span
style=color:#268bd2>labels</span>:
</span></span><span style=display:flex><span> <span
style=color:#268bd2>sigma.ali/mg</span>: v3-host
-</span></span></code></pre></div><p>我们以脚本路由为例,这个脚本路由的匹配条件是遵循一个原则的,就是匹配的范围是从精确到广泛的一个过程,在这个示例来说,就是
sayHello(string)参数 -> sayHello 方法 -> 接口级路由
的一个匹配查找过程。</p><p>那么如果我们已经满足某个条件,但是选到的 subset 地址为空,我们将如何进行 fallback
处理呢?</p><p>以匹配 sayHello(string)参数 条件为例,我们选择到的是 v1
subset,如果是空,我们可以向上一级是寻找地址,也就是方法级去寻找地址,具体的配置为下</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-yaml data-lang=yaml><span style=display:fl [...]
+</span></span></code></pre></div><p>我们以脚本路由为例,这个脚本路由的匹配条件是遵循一个原则的,就是匹配的范围是从精确到广泛的一个过程,在这个示例来说,就是
sayHello(string)参数 -> sayHello 方法 -> 接口级路由
的一个匹配查找过程。</p><blockquote><p>那么如果我们已经满足某个条件,但是选到的 subset 地址为空,我们将如何进行 fallback
处理呢?</p></blockquote><p>以匹配 sayHello(string)参数 条件为例,我们选择到的是 v1
subset,如果是空,我们可以向上一级是寻找地址,也就是方法级去寻找地址。</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-yaml data-lang=yaml><spa [...]
</span></span><span style=display:flex><span> <span
style=color:#268bd2>match</span>:
</span></span><span style=display:flex><span> - <span
style=color:#268bd2>method</span>:
</span></span><span style=display:flex><span> <span
style=color:#268bd2>name_match</span>:
@@ -98,7 +98,7 @@
</span></span><span style=display:flex><span> <span
style=color:#268bd2>destination</span>:
</span></span><span style=display:flex><span> <span
style=color:#268bd2>host</span>: demo
</span></span><span style=display:flex><span> <span
style=color:#268bd2>subset</span>: v3
-</span></span></code></pre></div><p>此时我们选到的地址是 v2 方法级地址,如果 v2
还是没有地址,根据规则的定义,我们是可以 fallback 到 v3 接口级。</p><p>假设我们有一个方法匹配时,如果没有地址,需要不进行
fallback,直接报错,我们可以这样配置</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-yaml data-lang=yaml><span style=display:flex><span><span
style=color:#268bd2>apiVersion</span>: service.dubbo.apache.org/v1alpha1
+</span></span></code></pre></div><p>此时我们选到的地址是 v2 方法级地址,如果 v2
还是没有地址,根据规则的定义,我们是可以 fallback 到 v3 接口级。</p><p>假设我们有一个方法匹配时,如果没有地址,需要不进行
fallback,直接报错,可以配置以下方式</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-yaml data-lang=yaml><span style=display:flex><span><span
style=color:#268bd2>apiVersion</span>: service.dubbo.apache.org/v1alpha1
</span></span><span style=display:flex><span><span
style=color:#268bd2>kind</span>: VirtualService
</span></span><span style=display:flex><span><span
style=color:#268bd2>metadata</span>:
</span></span><span style=display:flex><span> <span
style=color:#268bd2>name</span>: demo-route
@@ -182,7 +182,7 @@
</span></span><span style=display:flex><span> - <span
style=color:#268bd2>name</span>: v3
</span></span><span style=display:flex><span> <span
style=color:#268bd2>labels</span>:
</span></span><span style=display:flex><span> <span
style=color:#268bd2>sigma.ali/mg</span>: v3-host
-</span></span></code></pre></div><p>从这个规则我们看出来匹配到 some-method 条件时对应的是 v4
subset,那么 v4 为空时,因为没有配置 fallback ,此时会直接报错</p><h4 id=fallback-处理原则总结>fallback
处理原则总结</h4><ul><li>我们应该在 VirtualService route 中配置好 Destination 的 fallback
处理逻辑</li><li>在 fallback subset 时,如果对应的 subset 也配置有 fallback subset
时,也应递归处理;fallback subset 之间的关系也应该是从具体到广泛</li><li>我们在编写匹配条件时,应该遵循从 具体条件到广泛条件
的原则</li></ul><h3 id=routechain-的组装模式-目前未实现>RouteChain 的组装模式 (目前未实现)</h3><p><img
src=/imgs/user/route-rule3.png alt=route-rule [...]
+</span></span></code></pre></div><p>从这个规则我们看出来匹配到 some-method 条件时对应的是 v4
subset,那么 v4 为空时,因为没有配置 fallback ,此时会直接报错。</p><blockquote><p>fallback
处理原则总结</p><ul><li>我们应该在 VirtualService route 中配置好 Destination 的 fallback
处理逻辑</li><li>在 fallback subset 时,如果对应的 subset 也配置有 fallback subset
时,也应递归处理;fallback subset 之间的关系也应该是从具体到广泛</li><li>我们在编写匹配条件时,应该遵循从 具体条件到广泛条件
的原则</li></ul></blockquote><h3 id=routechain-的组装模式-目前未实现>RouteChain 的组装模式
(目前未实现)</h3><p><img src=/imgs/user/route-rule3.png alt=route [...]
</span></span><span style=display:flex><span><span
style=color:#268bd2>GROUP</span>: HSF
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span
style=color:#268bd2>content</span>:
@@ -203,7 +203,7 @@
</span></span><span style=display:flex><span>---
</span></span><span style=display:flex><span>...
</span></span></code></pre></div><p><code>VirtualService A</code> 与
<code>DestinationRule A1</code> 、<code>DestinationRule A2</code> 组成一个 Router
A,<code>VirtualService B</code> 与 <code>DestinationRule B</code> 组成 Router
B,以此类推,完成整个 router 链的组装。</p><div class=section-index><hr class=panel-line><div
class=entry><h5><a
href=/zh/docs3-v2/java-sdk/advanced-features-and-usage/traffic/mesh-style/dynamic-rule-deployment/>动态路由</a></h5><p>类groovy脚本动态路由。</p></div><div
class=entry><h5><a href=/zh/do [...]
-<button class="btn btn-primary mb-4 feedback--answer
feedback--answer-no">No</button><p class="feedback--response
feedback--response-yes">Glad to hear it! Please <a
href=https://github.com/apache/dubbo-website/issues/new>tell us how we can
improve</a>.</p><p class="feedback--response feedback--response-no">Sorry to
hear that. Please <a
href=https://github.com/apache/dubbo-website/issues/new>tell us how we can
improve</a>.</p></div><script>const yesButton=document.querySelector(".feedback
[...]
+<button class="btn btn-primary mb-4 feedback--answer
feedback--answer-no">No</button><p class="feedback--response
feedback--response-yes">Glad to hear it! Please <a
href=https://github.com/apache/dubbo-website/issues/new>tell us how we can
improve</a>.</p><p class="feedback--response feedback--response-no">Sorry to
hear that. Please <a
href=https://github.com/apache/dubbo-website/issues/new>tell us how we can
improve</a>.</p></div><script>const yesButton=document.querySelector(".feedback
[...]
<script src=/js/bootstrap.min.js
integrity=sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy
crossorigin=anonymous></script>
<script
src=/js/main.min.67b5ab62cb078146d9ab8cea15d59ffc7645b89f33906c50ab421a4d5eca73e9.js
integrity="sha256-Z7WrYssHgUbZq4zqFdWf/HZFuJ8zkGxQq0IaTV7Kc+k="
crossorigin=anonymous></script>
<script src=https://cdn.jsdelivr.net/npm/@docsearch/js@3></script>
diff --git
a/zh/docs3-v2/java-sdk/advanced-features-and-usage/traffic/routing-rule/index.html
b/zh/docs3-v2/java-sdk/advanced-features-and-usage/traffic/routing-rule/index.html
index 0a734cacbc..c6dfba4eec 100644
---
a/zh/docs3-v2/java-sdk/advanced-features-and-usage/traffic/routing-rule/index.html
+++
b/zh/docs3-v2/java-sdk/advanced-features-and-usage/traffic/routing-rule/index.html
@@ -1,9 +1,9 @@
-<!doctype html><html lang=zh class=no-js><head><meta charset=utf-8><meta
name=viewport
content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta
name=generator content="Hugo 0.110.0"><meta name=ROBOTS content="INDEX,
FOLLOW"><link rel="shortcut icon" href=/favicons/favicon.ico><link
rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png
sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png
sizes=16x16><link rel=icon type=image/png href=/favicons [...]
+<!doctype html><html lang=zh class=no-js><head><meta charset=utf-8><meta
name=viewport
content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta
name=generator content="Hugo 0.110.0"><meta name=ROBOTS content="INDEX,
FOLLOW"><link rel="shortcut icon" href=/favicons/favicon.ico><link
rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png
sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png
sizes=16x16><link rel=icon type=image/png href=/favicons [...]
<link rel=preload
href=/scss/main.min.8637cb48af1c2672dbf22e4e83652c0cebe2d667477b88c8a046be155bcf7cfe.css
as=style><link
href=/scss/main.min.8637cb48af1c2672dbf22e4e83652c0cebe2d667477b88c8a046be155bcf7cfe.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></head><body
class=td-page><header><nav class="js-navbar-scroll navbar navbar-expand
navbar-dark flex-column flex-md-row td-navbar"><a class=navbar-brand
href=/zh/><span class=navbar-logo><svg xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 321.39 78.54"><title id="title19">DUBBO LOGO</title><path
class="cls-1" d="M68.46 50.38c0 14.06 11.39 22.11 25.45 22.11s25.45-8.05
25.45-22.11V7.25H68.46zm21.24-28h8.6V31H89.7zm0 [...]
<a
href="https://github.com/apache/dubbo-website/new/master/content/zh/docs3-v2/java-sdk/advanced-features-and-usage/traffic/routing-rule.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%
[...]
<a
href="https://github.com/apache/dubbo-website/issues/new?title=%e8%b7%af%e7%94%b1%e8%a7%84%e5%88%99"
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 class=td-toc><nav
id=TableOfContents><ul><li><a href=#条件路由>条件路由</a><ul><li><a
href=#简介>简介</a></li><li><a href=#规则详解>规则详解</a></li></ul></li><li><a
href=#标签路由规则>标签路由规则</a><ul><li><a href=#简介-1>简介</a></li><li><a
href=#规则详解-1>规则详解</a></li></ul></li></ul></nav></div></aside><main
class="col-12 col-md-9 col-xl-8 pl-md-5" role=main><nav aria-label=breadcrumb
class="d-none d-m [...]
+<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas
fa-tasks fa-fw"></i> 提交项目问题</a></div><div class=td-toc><nav
id=TableOfContents><ul><li><a href=#路由规则概述>路由规则概述</a><ul><li><a
href=#应用粒度>应用粒度</a></li><li><a href=#服务粒度>服务粒度</a></li></ul></li><li><a
href=#规则详解>规则详解</a><ul><li><a href=#conditions规则体>Conditions规则体</a></li><li><a
href=#condition示例>Condition示例</a></li></ul></li><li><a
href=#标签路由规则>标签路由规则</a><ul><li><a href=#规则详解-1>规则详解</a></li><li><a
href=#provider>P [...]
</span></span><span style=display:flex><span><span style=color:#586e75>#
app2的消费者只能消费所有端口为20881的服务实例</span>
</span></span><span style=display:flex><span>---
</span></span><span style=display:flex><span><span
style=color:#268bd2>scope</span>: application
@@ -15,7 +15,7 @@
</span></span><span style=display:flex><span> - application=app1 =>
address=*:20880
</span></span><span style=display:flex><span> - application=app2 =>
address=*:20881
</span></span><span style=display:flex><span>...
-</span></span></code></pre></div></li><li><p>服务粒度</p><div class=highlight><pre
tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-yaml data-lang=yaml><span style=display:flex><span><span
style=color:#586e75># DemoService的sayHello方法只能消费所有端口为20880的服务实例</span>
+</span></span></code></pre></div><h3 id=服务粒度>服务粒度</h3><div
class=highlight><pre tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-yaml data-lang=yaml><span style=display:flex><span><span
style=color:#586e75># DemoService的sayHello方法只能消费所有端口为20880的服务实例</span>
</span></span><span style=display:flex><span><span style=color:#586e75>#
DemoService的sayHi方法只能消费所有端口为20881的服务实例</span>
</span></span><span style=display:flex><span>---
</span></span><span style=display:flex><span><span
style=color:#268bd2>scope</span>: service
@@ -27,19 +27,18 @@
</span></span><span style=display:flex><span> - method=sayHello =>
address=*:20880
</span></span><span style=display:flex><span> - method=sayHi =>
address=*:20881
</span></span><span style=display:flex><span>...
-</span></span></code></pre></div></li></ul><h3 id=规则详解>规则详解</h3><h4
id=各字段含义>各字段含义</h4><ul><li><code>scope</code>表示路由规则的作用粒度,scope的取值会决定key的取值。<strong>必填</strong>。<ul><li>service
服务粒度</li><li>application
应用粒度</li></ul></li><li><code>Key</code>明确规则体作用在哪个服务或应用。<strong>必填</strong>。<ul><li>scope=service时,key取值为[{group}:]{service}[:{version}]的组合</li><li>scope=application时,key取值为application名称</li></ul></li><li><code>enabled=true</code>
当前路由规则是否生效,可不填,缺省生效。</li><li><code>force=false</code> 当路由结 [...]
-</code></pre><ol><li><strong>格式</strong></li></ol><ul><li><code>=></code>
之前的为消费者匹配条件,所有参数和消费者的 URL
进行对比,当消费者满足匹配条件时,对该消费者执行后面的过滤规则。</li><li><code>=></code>
之后为提供者地址列表的过滤条件,所有参数和提供者的 URL
进行对比,消费者最终只拿到过滤后的地址列表。</li><li>如果匹配条件为空,表示对所有消费方应用,如:<code>=> host !=
10.20.153.11</code></li><li>如果过滤条件为空,表示禁止访问,如:<code>host = 10.20.153.10
=></code></li></ul><ol
start=2><li><strong>表达式</strong></li></ol><p>参数支持:</p><ul><li>服务调用信息,如:method,
argument 等,暂不支持参数路由</li><li>URL 本身的字段,如:protocol, host, port [...]
-</span></span></code></pre></div><ul><li>白名单:</li></ul><div
class=highlight><pre tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-fallback data-lang=fallback><span
style=display:flex><span>register.ip != 10.20.153.10,10.20.153.11 =>
-</span></span></code></pre></div><div class="alert alert-warning"
role=alert><h4
class=alert-heading>注意</h4>一个服务只能有一条白名单规则,否则两条规则交叉,就都被筛选掉了</div><ul><li>黑名单:</li></ul><div
class=highlight><pre tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-fallback data-lang=fallback><span
style=display:flex><span>register.ip = 10.20.153.10,10.20.153.11 =>
-</span></span></code></pre></div><ul><li>服务寄宿在应用上,只暴露一部分的机器,防止整个集群挂掉:</li></ul><div
class=highlight><pre tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-fallback data-lang=fallback><span
style=display:flex><span>=> host = 172.22.3.1*,172.22.3.2*
-</span></span></code></pre></div><ul><li>为重要应用提供额外的机器:</li></ul><div
class=highlight><pre tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-fallback data-lang=fallback><span
style=display:flex><span>application != kylin => host !=
172.22.3.95,172.22.3.96
-</span></span></code></pre></div><ul><li>读写分离:</li></ul><div
class=highlight><pre tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-fallback data-lang=fallback><span
style=display:flex><span>method = find*,list*,get*,is* => host =
172.22.3.94,172.22.3.95,172.22.3.96
+</span></span></code></pre></div><blockquote><p>后续我们计划在 2.6.x
版本的基础上继续增强脚本路由功能。</p></blockquote><h2
id=规则详解>规则详解</h2><ul><li><code>scope</code>表示路由规则的作用粒度,scope的取值会决定key的取值。<strong>必填</strong>。<ul><li>service
服务粒度</li><li>application
应用粒度</li></ul></li><li><code>Key</code>明确规则体作用在哪个服务或应用。<strong>必填</strong>。<ul><li>scope=service时,key取值为[{group}:]{service}[:{version}]的组合</li><li>scope=application时,key取值为application名称</li></ul></li><li><code>enabled=true</code>
当前路由规则是否生效,可不填,缺省生效。</li><li [...]
+</span></span></code></pre></div><p>白名单</p><div class=highlight><pre
tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-fallback data-lang=fallback><span
style=display:flex><span>register.ip != 10.20.153.10,10.20.153.11 =>
+</span></span></code></pre></div><blockquote><p>一个服务只能有一条白名单规则,否则两条规则交叉,就都被筛选掉了</p></blockquote><p>黑名单</p><div
class=highlight><pre tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-fallback data-lang=fallback><span
style=display:flex><span>register.ip = 10.20.153.10,10.20.153.11 =>
+</span></span></code></pre></div><p>服务寄宿在应用上,只暴露一部分的机器,防止整个集群挂掉</p><div
class=highlight><pre tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-fallback data-lang=fallback><span
style=display:flex><span>=> host = 172.22.3.1*,172.22.3.2*
+</span></span></code></pre></div><p>为重要应用提供额外的机器</p><div class=highlight><pre
tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-fallback data-lang=fallback><span
style=display:flex><span>application != kylin => host !=
172.22.3.95,172.22.3.96
+</span></span></code></pre></div><p>读写分离</p><div class=highlight><pre
tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-fallback data-lang=fallback><span
style=display:flex><span>method = find*,list*,get*,is* => host =
172.22.3.94,172.22.3.95,172.22.3.96
</span></span><span style=display:flex><span>method != find*,list*,get*,is*
=> host = 172.22.3.97,172.22.3.98
-</span></span></code></pre></div><ul><li>前后台分离:</li></ul><div
class=highlight><pre tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-fallback data-lang=fallback><span
style=display:flex><span>application = bops => host =
172.22.3.91,172.22.3.92,172.22.3.93
+</span></span></code></pre></div><p>前后台分离</p><div class=highlight><pre
tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-fallback data-lang=fallback><span
style=display:flex><span>application = bops => host =
172.22.3.91,172.22.3.92,172.22.3.93
</span></span><span style=display:flex><span>application != bops => host =
172.22.3.94,172.22.3.95,172.22.3.96
-</span></span></code></pre></div><ul><li>隔离不同机房网段:</li></ul><div
class=highlight><pre tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-fallback data-lang=fallback><span style=display:flex><span>host
!= 172.22.3.* => host != 172.22.3.*
-</span></span></code></pre></div><ul><li>提供者与消费者部署在同集群内,本机只访问本机的服务:</li></ul><div
class=highlight><pre tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-fallback data-lang=fallback><span
style=display:flex><span>=> host = $host
-</span></span></code></pre></div><h2 id=标签路由规则>标签路由规则</h2><h3
id=简介-1>简介</h3><p>标签路由通过将某一个或多个服务的提供者划分到同一个分组,约束流量只在指定分组中流转,从而实现流量隔离的目的,可以作为蓝绿发布、灰度发布等场景的能力基础。</p><h4
id=provider>Provider</h4><p>标签主要是指对Provider端应用实例的分组,目前有两种方式可以完成实例分组,分别是<code>动态规则打标</code>和<code>静态规则打标</code>,其中动态规则相较于静态规则优先级更高,而当两种规则同时存在且出现冲突时,将以动态规则为准。</p><ul><li><p>动态规则打标,可随时在<strong>服务治理控制台</strong>下发标签归组规则</p><div
class=highlight><pre tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size: [...]
+</span></span></code></pre></div><p>隔离不同机房网段</p><div class=highlight><pre
tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-fallback data-lang=fallback><span style=display:flex><span>host
!= 172.22.3.* => host != 172.22.3.*
+</span></span></code></pre></div><p>提供者与消费者部署在同集群内,本机只访问本机的服务</p><div
class=highlight><pre tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-fallback data-lang=fallback><span
style=display:flex><span>=> host = $host
+</span></span></code></pre></div><h2
id=标签路由规则>标签路由规则</h2><p>标签路由通过将某一个或多个服务的提供者划分到同一个分组,约束流量只在指定分组中流转,从而实现流量隔离的目的,可以作为蓝绿发布、灰度发布等场景的能力基础。</p><h3
id=规则详解-1>规则详解</h3><p><strong>格式</strong></p><ul><li><code>Key</code>明确规则体作用到哪个应用。<strong>必填</strong>。</li><li><code>enabled=true</code>
当前路由规则是否生效,可不填,缺省生效。</li><li><code>force=false</code>
当路由结果为空时,是否强制执行,如果不强制执行,路由结果为空的路由规则将自动失效,可不填,缺省为
<code>false</code>。</li><li><code>runtime=false</code>
是否在每次调用时执行路由规则,否则只在提供者地址列表变更时预先执行并缓存结果,调用时直接从缓存中获取路由 [...]
</span></span><span style=display:flex><span><span style=color:#586e75>#
tag1包含一个实例 127.0.0.1:20880</span>
</span></span><span style=display:flex><span><span style=color:#586e75>#
tag2包含一个实例 127.0.0.1:20881</span>
</span></span><span style=display:flex><span>---
@@ -52,13 +51,13 @@
</span></span><span style=display:flex><span> <span
style=color:#268bd2>addresses</span>: [<span
style=color:#2aa198>"127.0.0.1:20880"</span>]
</span></span><span style=display:flex><span> - <span
style=color:#268bd2>name</span>: tag2
</span></span><span style=display:flex><span> <span
style=color:#268bd2>addresses</span>: [<span
style=color:#2aa198>"127.0.0.1:20881"</span>]
-</span></span><span style=display:flex><span> ...
-</span></span></code></pre></div></li><li><p>静态打标</p><div class=highlight><pre
tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-xml data-lang=xml><span style=display:flex><span><span
style=color:#268bd2><dubbo:provider</span> tag=<span
style=color:#2aa198>"tag1"</span><span style=color:#268bd2>/></span>
-</span></span></code></pre></div><p>or</p><div class=highlight><pre tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-xml data-lang=xml><span style=display:flex><span><span
style=color:#268bd2><dubbo:service</span> tag=<span
style=color:#2aa198>"tag1"</span><span style=color:#268bd2>/></span>
-</span></span></code></pre></div><p>or</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>java <span style=color:#2aa198>-jar xxx-provider.jar
-Ddubbo.provider.tag={the tag you want, may come from OS ENV}</span>
-</span></span></code></pre></div></li></ul><h4 id=consumer>Consumer</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>RpcContext<span
style=color:#719e07>.</span>getContext<span
style=color:#719e07>().</span>setAttachment<span
style=color:#719e07>(</span>Constants<span
style=color:#719e07>.</span>TAG_KEY<span style=color:#719e07>,</span><spa [...]
-</span></span></code></pre></div><p>请求标签的作用域为每一次 invocation,使用 attachment
来传递请求标签,注意保存在 attachment
中的值将会在一次完整的远程调用中持续传递,得益于这样的特性,我们只需要在起始调用时,通过一行代码的设置,达到标签的持续传递。</p><blockquote><p>目前仅仅支持
hardcoding 的方式设置 dubboTag。注意到 RpcContext 是线程绑定的,优雅的使用 TagRouter 特性,建议通过
servlet 过滤器(在 web 环境下),或者定制的 SPI 过滤器设置 dubboTag。</p></blockquote><h3
id=规则详解-1>规则详解</h3><h4
id=格式>格式</h4><ul><li><code>Key</code>明确规则体作用到哪个应用。<strong>必填</strong>。</li><li><code>enabled=true</code>
当前路由规则是否生效,可不填,缺省生效。</li><li><code>f [...]
-<button class="btn btn-primary mb-4 feedback--answer
feedback--answer-no">No</button><p class="feedback--response
feedback--response-yes">Glad to hear it! Please <a
href=https://github.com/apache/dubbo-website/issues/new>tell us how we can
improve</a>.</p><p class="feedback--response feedback--response-no">Sorry to
hear that. Please <a
href=https://github.com/apache/dubbo-website/issues/new>tell us how we can
improve</a>.</p></div><script>const yesButton=document.querySelector(".feedback
[...]
+</span></span><span style=display:flex><span>...
+</span></span></code></pre></div><p><strong>静态打标</strong></p><div
class=highlight><pre tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-xml data-lang=xml><span style=display:flex><span><span
style=color:#268bd2><dubbo:provider</span> tag=<span
style=color:#2aa198>"tag1"</span><span style=color:#268bd2>/></span>
+</span></span></code></pre></div><p><strong>or</strong></p><div
class=highlight><pre tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-xml data-lang=xml><span style=display:flex><span><span
style=color:#268bd2><dubbo:service</span> tag=<span
style=color:#2aa198>"tag1"</span><span style=color:#268bd2>/></span>
+</span></span></code></pre></div><p><strong>or</strong></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>java <span style=color:#2aa198>-jar xxx-provider.jar
-Ddubbo.provider.tag={the tag you want, may come from OS ENV}</span>
+</span></span></code></pre></div><h3 id=consumer>Consumer</h3><div
class=highlight><pre tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-java data-lang=java><span
style=display:flex><span>RpcContext<span
style=color:#719e07>.</span>getContext<span
style=color:#719e07>().</span>setAttachment<span
style=color:#719e07>(</span>Constants<span
style=color:#719e07>.</span>TAG_KEY<span style=color:#719e07>,</span><span
style=co [...]
+</span></span></code></pre></div><blockquote><p>请求标签的作用域为每一次 invocation,使用
attachment 来传递请求标签,注意保存在 attachment
中的值将会在一次完整的远程调用中持续传递,得益于这样的特性,我们只需要在起始调用时,通过一行代码的设置,达到标签的持续传递。</p></blockquote><blockquote><p>目前仅仅支持
hardcoding 的方式设置 dubboTag。注意到 RpcContext 是线程绑定的,优雅的使用 TagRouter 特性,建议通过
servlet 过滤器(在 web 环境下),或者定制的 SPI 过滤器设置
dubboTag。</p></blockquote><blockquote><p>自定义路由参考<a
href=/zh/docs3-v2/java-sdk/reference-manual/spi/description/router/>路由扩展</a></p></blockquote><style>.feedback--answer{
[...]
+<button class="btn btn-primary mb-4 feedback--answer
feedback--answer-no">No</button><p class="feedback--response
feedback--response-yes">Glad to hear it! Please <a
href=https://github.com/apache/dubbo-website/issues/new>tell us how we can
improve</a>.</p><p class="feedback--response feedback--response-no">Sorry to
hear that. Please <a
href=https://github.com/apache/dubbo-website/issues/new>tell us how we can
improve</a>.</p></div><script>const yesButton=document.querySelector(".feedback
[...]
<script src=/js/bootstrap.min.js
integrity=sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy
crossorigin=anonymous></script>
<script
src=/js/main.min.67b5ab62cb078146d9ab8cea15d59ffc7645b89f33906c50ab421a4d5eca73e9.js
integrity="sha256-Z7WrYssHgUbZq4zqFdWf/HZFuJ8zkGxQq0IaTV7Kc+k="
crossorigin=anonymous></script>
<script src=https://cdn.jsdelivr.net/npm/@docsearch/js@3></script>
diff --git a/zh/sitemap.xml b/zh/sitemap.xml
index 93d17672b3..c79ae1eba2 100644
--- a/zh/sitemap.xml
+++ b/zh/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/docs3-v2/java-sdk/faq/0/</loc><lastmod>2022-08-01T10:49:31+08:00</lastmod><changefreq>monthly</changefreq><priority>0.5</priority><xhtml:link
rel="alternate" hreflang="en"
href="https://cn.dubbo.apache.org/en/docs3-v2/java-sdk/faq/0/"/><xhtml:link
rel="alternate" hreflang="zh" href="https://c [...]
\ 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/docs3-v2/java-sdk/faq/0/</loc><lastmod>2022-08-01T10:49:31+08:00</lastmod><changefreq>monthly</changefreq><priority>0.5</priority><xhtml:link
rel="alternate" hreflang="en"
href="https://cn.dubbo.apache.org/en/docs3-v2/java-sdk/faq/0/"/><xhtml:link
rel="alternate" hreflang="zh" href="https://c [...]
\ No newline at end of file