This is an automated email from the ASF dual-hosted git repository.
github-bot pushed a commit to branch asf-site-v2
in repository https://gitbox.apache.org/repos/asf/dubbo-website.git
The following commit(s) were added to refs/heads/asf-site-v2 by this push:
new 71050fc3d5e deploy: 1419c7cce72850627766a2bc7e85d1d0167e76f2
71050fc3d5e is described below
commit 71050fc3d5ebcc7b83b2a35bc2859c0648b28656
Author: Alanxtl <[email protected]>
AuthorDate: Mon Apr 13 06:38:11 2026 +0000
deploy: 1419c7cce72850627766a2bc7e85d1d0167e76f2
---
.../tutorial/traffic/condition_router/index.html | 21 ++++++++++++++----
.../tutorial/traffic/tag_router/index.html | 25 +++++++++++++++++++---
en/sitemap.xml | 2 +-
sitemap.xml | 2 +-
zh-cn/index.xml | 2 +-
.../tutorial/traffic/condition_router/index.html | 20 +++++++++++++----
.../mannual/golang-sdk/tutorial/traffic/index.xml | 2 +-
.../tutorial/traffic/tag_router/index.html | 24 ++++++++++++++++++---
zh-cn/sitemap.xml | 2 +-
9 files changed, 81 insertions(+), 19 deletions(-)
diff --git
a/en/overview/mannual/golang-sdk/tutorial/traffic/condition_router/index.html
b/en/overview/mannual/golang-sdk/tutorial/traffic/condition_router/index.html
index ab66fd18b72..e0dab175cf1 100644
---
a/en/overview/mannual/golang-sdk/tutorial/traffic/condition_router/index.html
+++
b/en/overview/mannual/golang-sdk/tutorial/traffic/condition_router/index.html
@@ -1,4 +1,4 @@
-<!doctype html><html lang=en class=no-js><head><meta name=ROBOTS
content="INDEX, FOLLOW"><link rel=alternate hreflang=zh-cn
href=https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/tutorial/traffic/condition_router/><link
rel=canonical
href=https://dubbo.apache.org/en/overview/mannual/golang-sdk/tutorial/traffic/condition_router/><script>var
_paq=window._paq=window._paq||[];_paq.push(["setDocumentTitle",document.domain+"/"+document.title]),_paq.push(["setCookieDomain","*.dubbo.apa
[...]
+<!doctype html><html lang=en class=no-js><head><meta name=ROBOTS
content="INDEX, FOLLOW"><link rel=alternate hreflang=zh-cn
href=https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/tutorial/traffic/condition_router/><link
rel=canonical
href=https://dubbo.apache.org/en/overview/mannual/golang-sdk/tutorial/traffic/condition_router/><script>var
_paq=window._paq=window._paq||[];_paq.push(["setDocumentTitle",document.domain+"/"+document.title]),_paq.push(["setCookieDomain","*.dubbo.apa
[...]
<a class=dropdown-item href=/en/overview/notices/>Security Notices</a>
<a class=dropdown-item href=/en/contact/>Contributor's Guide</a></div></li><li
class="nav-item nav-item-line px-2 mb-2 mb-lg-0"><a class=nav-link
href=/en/blog/><span>Blog</span></a></li><li class="nav-item nav-item-line px-2
mb-2 mb-lg-0"><a class=nav-link
href=/en/download/><span>DOWNLOAD</span></a></li><li class="nav-item dropdown
d-lg-block"><a class="nav-link dropdown-toggle" href=# id=navbarDropdown
role=button data-toggle=dropdown aria-haspopup=true
aria-expanded=false>ECOSYSTEM</ [...]
<a class=dropdown-item
href=/zh-cn/overview/mannual/control-plane/>Visualizable Console</a>
@@ -707,7 +707,7 @@ It uses <code>consumer => provider</code> expressions to
manage traffic for both
</span></span><span style=display:flex><span> ),
</span></span><span style=display:flex><span> )
</span></span><span style=display:flex><span>rep, err <span
style=color:#719e07>:=</span> srv.<span
style=color:#268bd2>Greet</span>(context.<span
style=color:#268bd2>Background</span>(), <span
style=color:#719e07>&</span>greet.GreetRequest{Name: <span
style=color:#2aa198>"hello world"</span>})
-</span></span></code></pre></div><blockquote><p>A configuration in Nacos is
needed if you want to use condition router.</p></blockquote><p>Example
config:</p><blockquote><p>The <code>Data Id</code> of config must be
<code>{application_name}.{router_type}</code> (e.g.
condition-server.condition-router).</p></blockquote><div class=highlight><pre
tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-yaml data-lang=yaml><span st [...]
+</span></span></code></pre></div><blockquote><p>The example above uses dynamic
configuration and requires a config in Nacos or another config
center.</p></blockquote><p>Example config:</p><blockquote><p>The <code>Data
Id</code> of config must be <code>{application_name}.{router_type}</code> (e.g.
condition-server.condition-router).</p></blockquote><div class=highlight><pre
tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=languag [...]
</span></span><span style=display:flex><span><span
style=color:#268bd2>scope</span>: <span
style=color:#2aa198>"application"</span>
</span></span><span style=display:flex><span><span
style=color:#268bd2>key</span>: <span
style=color:#2aa198>"condition-server"</span>
</span></span><span style=display:flex><span><span
style=color:#268bd2>priority</span>: <span style=color:#2aa198>1</span>
@@ -719,8 +719,21 @@ It uses <code>consumer => provider</code> expressions to
manage traffic for both
</span></span><span style=display:flex><span> <span
style=color:#268bd2>to</span>:
</span></span><span style=display:flex><span> - <span
style=color:#268bd2>match</span>: <span style=color:#2aa198>"port =
20000"</span>
</span></span></code></pre></div><p>For the complete example, please
-see: <a
href=https://github.com/apache/dubbo-go-samples/tree/main/router/condition>Full
Example Code</a>.</p><div id=pre-footer><h2>Feedback</h2><p
class=feedback--prompt>Was this page helpful?</p><button class="btn btn-primary
mb-4 feedback--yes">Yes</button>
-<button class="btn btn-primary mb-4
feedback--no">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__disable
[...]
+see: <a
href=https://github.com/apache/dubbo-go-samples/tree/main/router/condition>Full
Example Code</a>.</p><h3 id=static-configuration-api>Static configuration
API</h3><p>Besides the dynamic approach above, condition router also supports
injecting routing rules statically in code. Static configuration does not
require a config center, and it can work with direct URLs or with instances
discovered from a registry.</p><p>The following example shows a service-scope
static condition router: [...]
+</span></span><span style=display:flex><span> dubbo.<span
style=color:#268bd2>WithName</span>(clientApplication),
+</span></span><span style=display:flex><span> dubbo.<span
style=color:#268bd2>WithRouter</span>(
+</span></span><span style=display:flex><span> router.<span
style=color:#268bd2>WithScope</span>(<span
style=color:#2aa198>"service"</span>),
+</span></span><span style=display:flex><span> router.<span
style=color:#268bd2>WithKey</span>(greet.GreetServiceName),
+</span></span><span style=display:flex><span> router.<span
style=color:#268bd2>WithPriority</span>(<span style=color:#2aa198>100</span>),
+</span></span><span style=display:flex><span> router.<span
style=color:#268bd2>WithForce</span>(<span style=color:#cb4b16>true</span>),
+</span></span><span style=display:flex><span> router.<span
style=color:#268bd2>WithConditions</span>([]<span
style=color:#dc322f>string</span>{
+</span></span><span style=display:flex><span> <span
style=color:#2aa198>"method = Greet => port = 20000"</span>,
+</span></span><span style=display:flex><span> }),
+</span></span><span style=display:flex><span> ),
+</span></span><span style=display:flex><span>)
+</span></span></code></pre></div><p>Parameters:</p><ul><li><code>router.WithScope("service")</code>:
applies the rule at service
scope.</li><li><code>router.WithKey(greet.GreetServiceName)</code>: binds the
rule to the target service
key.</li><li><code>router.WithConditions(...)</code>: declares the static
condition expressions.</li><li><code>router.WithForce(true)</code>: controls
whether fallback is allowed when the rule does not match.</li></ul><p>The
static sample in <code>dubbo-go-s [...]
+see: <a
href=https://github.com/apache/dubbo-go-samples/tree/main/router/static_config/condition>Full
Example Code</a>.</p><h3 id=priority-and-merge-semantics>Priority and merge
semantics</h3><ul><li>Dynamically delivered routing rules override static
configuration.</li><li>When <code>dubbo.WithRouter(...)</code> is called
multiple times, append semantics apply and multiple static router entries are
appended to the instance configuration.</li><li>When
<code>router.WithConditions(...)</co [...]
+<button class="btn btn-primary mb-4
feedback--no">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__disable
[...]
<button class="contact-btn qr-container"
onmouseover='showQRCode("dingding-qr")'
onmouseout='hideQRCode("dingding-qr")'>DINGTALK CHANNEL<div class=qr-code
id=dingding-qr style=display:none><img
src=https://img.alicdn.com/imgextra/i4/O1CN01buuadT274Lj33QZWQ_!!6000000007743-0-tps-1170-1477.jpg
alt="DingTalk QR Code"></div></button>
<button class=contact-btn><a
href=https://github.com/apache/dubbo/>GitHub</a></button></div></div><div
class=footer-container-right><ul><li>DOCUMENTATION</li><li><a
href=/en/overview/>Overview</a></li><li><a href=/en/overview/quickstart/>Quick
Start</a></li><li><a
href=/en/contact/contributor/software-donation-guide_dev/>Developer
guide</a></li></ul><ul><li>RESOURCES</li><li><a
href=/en/contact/>Community</a></li></ul></div></div><div
style="width:85.125rem;height:0;border:1px solid #ddd [...]
project logo are either registered trademarks or trademarks of The Apache
Software Foundation in the United States
diff --git
a/en/overview/mannual/golang-sdk/tutorial/traffic/tag_router/index.html
b/en/overview/mannual/golang-sdk/tutorial/traffic/tag_router/index.html
index c480c82ad9e..188d4c513f3 100644
--- a/en/overview/mannual/golang-sdk/tutorial/traffic/tag_router/index.html
+++ b/en/overview/mannual/golang-sdk/tutorial/traffic/tag_router/index.html
@@ -1,4 +1,4 @@
-<!doctype html><html lang=en class=no-js><head><meta name=ROBOTS
content="INDEX, FOLLOW"><link rel=alternate hreflang=zh-cn
href=https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/tutorial/traffic/tag_router/><link
rel=canonical
href=https://dubbo.apache.org/en/overview/mannual/golang-sdk/tutorial/traffic/tag_router/><script>var
_paq=window._paq=window._paq||[];_paq.push(["setDocumentTitle",document.domain+"/"+document.title]),_paq.push(["setCookieDomain","*.dubbo.apache.org"]),_
[...]
+<!doctype html><html lang=en class=no-js><head><meta name=ROBOTS
content="INDEX, FOLLOW"><link rel=alternate hreflang=zh-cn
href=https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/tutorial/traffic/tag_router/><link
rel=canonical
href=https://dubbo.apache.org/en/overview/mannual/golang-sdk/tutorial/traffic/tag_router/><script>var
_paq=window._paq=window._paq||[];_paq.push(["setDocumentTitle",document.domain+"/"+document.title]),_paq.push(["setCookieDomain","*.dubbo.apache.org"]),_
[...]
<a class=dropdown-item href=/en/overview/notices/>Security Notices</a>
<a class=dropdown-item href=/en/contact/>Contributor's Guide</a></div></li><li
class="nav-item nav-item-line px-2 mb-2 mb-lg-0"><a class=nav-link
href=/en/blog/><span>Blog</span></a></li><li class="nav-item nav-item-line px-2
mb-2 mb-lg-0"><a class=nav-link
href=/en/download/><span>DOWNLOAD</span></a></li><li class="nav-item dropdown
d-lg-block"><a class="nav-link dropdown-toggle" href=# id=navbarDropdown
role=button data-toggle=dropdown aria-haspopup=true
aria-expanded=false>ECOSYSTEM</ [...]
<a class=dropdown-item
href=/zh-cn/overview/mannual/control-plane/>Visualizable Console</a>
@@ -703,8 +703,27 @@ to <a
href=https://dubbo-next.staged.apache.org/zh-cn/overview/reference/integra
</span></span><span style=display:flex><span>resp, err <span
style=color:#719e07>:=</span> svc.<span style=color:#268bd2>Greet</span>(ctx,
<span style=color:#719e07>&</span>greet.GreetRequest{Name: name})
</span></span></code></pre></div><p>Parameters:</p><ul><li><code>constant.TagKey</code>:
Sets tag that requests carry.</li><li><code>constant.ForceUseTag</code>: Sets
whether to force tag matching.</li></ul><blockquote><p>Untagged traffic is
routed only to untagged servers. Tagged traffic can be routed to servers with
matching tags or
to untagged servers, depending on the force
configuration.</p></blockquote><p>For the complete example, please
-see: <a
href=https://github.com/apache/dubbo-go-samples/tree/main/router/tag>Full
Example Code</a>.</p><div id=pre-footer><h2>Feedback</h2><p
class=feedback--prompt>Was this page helpful?</p><button class="btn btn-primary
mb-4 feedback--yes">Yes</button>
-<button class="btn btn-primary mb-4
feedback--no">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__disable
[...]
+see: <a
href=https://github.com/apache/dubbo-go-samples/tree/main/router/tag>Full
Example Code</a>.</p><h3 id=static-configuration-api>Static configuration
API</h3><p>Besides the usage above, tag router also supports injecting routing
rules statically in code. Static configuration does not require a config
center, and it can work with direct URLs or with instances discovered from a
registry.</p><p>The following example shows an application-scope static tag
router:</p><div class=highlight [...]
+</span></span><span style=display:flex><span> dubbo.<span
style=color:#268bd2>WithName</span>(clientApplication),
+</span></span><span style=display:flex><span> dubbo.<span
style=color:#268bd2>WithRouter</span>(
+</span></span><span style=display:flex><span> router.<span
style=color:#268bd2>WithScope</span>(<span
style=color:#2aa198>"application"</span>),
+</span></span><span style=display:flex><span> router.<span
style=color:#268bd2>WithKey</span>(clientApplication),
+</span></span><span style=display:flex><span> router.<span
style=color:#268bd2>WithPriority</span>(<span style=color:#2aa198>100</span>),
+</span></span><span style=display:flex><span> router.<span
style=color:#268bd2>WithForce</span>(<span style=color:#cb4b16>false</span>),
+</span></span><span style=display:flex><span> router.<span
style=color:#268bd2>WithTags</span>([]global.Tag{
+</span></span><span style=display:flex><span> {
+</span></span><span style=display:flex><span> Name:
<span style=color:#2aa198>"gray"</span>,
+</span></span><span style=display:flex><span>
Addresses: []<span style=color:#dc322f>string</span>{<span
style=color:#2aa198>"127.0.0.1:20002"</span>},
+</span></span><span style=display:flex><span> },
+</span></span><span style=display:flex><span> }),
+</span></span><span style=display:flex><span> ),
+</span></span><span style=display:flex><span>)
+</span></span></code></pre></div><p>Request tag attachment:</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-go data-lang=go><span style=display:flex><span>ctx <span
style=color:#719e07>:=</span> context.<span
style=color:#268bd2>WithValue</span>(context.<span
style=color:#268bd2>Background</span>(), constant.AttachmentKey, <span
style=color:#268bd2>map</span>[<span style=color:#dc322f>strin [...]
+</span></span><span style=display:flex><span> constant.Tagkey: <span
style=color:#2aa198>"gray"</span>,
+</span></span><span style=display:flex><span>})
+</span></span></code></pre></div><p>Parameters:</p><ul><li><code>router.WithScope("application")</code>:
applies the rule at application
scope.</li><li><code>router.WithKey(clientApplication)</code>: binds the rule
to the consumer application.</li><li><code>router.WithTags(...)</code>:
declares the static mapping from tag to address
list.</li><li><code>router.WithForce(...)</code>: controls whether fallback is
allowed when no tagged provider matches.</li></ul><p>The static sample in <cod
[...]
+see: <a
href=https://github.com/apache/dubbo-go-samples/tree/main/router/static_config/tag>Full
Example Code</a>.</p><h3 id=priority-and-merge-semantics>Priority and merge
semantics</h3><ul><li>Dynamically delivered routing rules override static
configuration.</li><li>When <code>dubbo.WithRouter(...)</code> is called
multiple times, append semantics apply and multiple static router entries are
appended to the instance configuration.</li><li>When
<code>router.WithTags(...)</code> is set m [...]
+<button class="btn btn-primary mb-4
feedback--no">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__disable
[...]
<button class="contact-btn qr-container"
onmouseover='showQRCode("dingding-qr")'
onmouseout='hideQRCode("dingding-qr")'>DINGTALK CHANNEL<div class=qr-code
id=dingding-qr style=display:none><img
src=https://img.alicdn.com/imgextra/i4/O1CN01buuadT274Lj33QZWQ_!!6000000007743-0-tps-1170-1477.jpg
alt="DingTalk QR Code"></div></button>
<button class=contact-btn><a
href=https://github.com/apache/dubbo/>GitHub</a></button></div></div><div
class=footer-container-right><ul><li>DOCUMENTATION</li><li><a
href=/en/overview/>Overview</a></li><li><a href=/en/overview/quickstart/>Quick
Start</a></li><li><a
href=/en/contact/contributor/software-donation-guide_dev/>Developer
guide</a></li></ul><ul><li>RESOURCES</li><li><a
href=/en/contact/>Community</a></li></ul></div></div><div
style="width:85.125rem;height:0;border:1px solid #ddd [...]
project logo are either registered trademarks or trademarks of The Apache
Software Foundation in the United States
diff --git a/en/sitemap.xml b/en/sitemap.xml
index ecc2742ac35..fb97d38253e 100644
--- a/en/sitemap.xml
+++ b/en/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://dubbo.apache.org/en/blog/2023/01/16/alibaba-upgrades-dubbo3-to-fully-replace-hsf2/</loc><lastmod>2024-09-30T17:53:33+08:00</lastmod><changefreq>monthly</changefreq><priority>0.5</priority><xhtml:link
rel="alternate" hreflang="zh-cn"
href="https://dubbo.apache.org/zh-cn/blog/2023/01/16/%E9%98%BF%E9%87%8C%E5%B7%B4%E5
[...]
\ 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://dubbo.apache.org/en/blog/2023/01/16/alibaba-upgrades-dubbo3-to-fully-replace-hsf2/</loc><lastmod>2024-09-30T17:53:33+08:00</lastmod><changefreq>monthly</changefreq><priority>0.5</priority><xhtml:link
rel="alternate" hreflang="zh-cn"
href="https://dubbo.apache.org/zh-cn/blog/2023/01/16/%E9%98%BF%E9%87%8C%E5%B7%B4%E5
[...]
\ No newline at end of file
diff --git a/sitemap.xml b/sitemap.xml
index 2af1a035c8f..e6a3df280d4 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://dubbo.apache.org/zh-cn/sitemap.xml</loc><lastmod>2026-04-13T14:28:01+08:00</lastmod></sitemap><sitemap><loc>https://dubbo.apache.org/en/sitemap.xml</loc><lastmod>2026-04-13T14:28:01+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://dubbo.apache.org/zh-cn/sitemap.xml</loc><lastmod>2026-04-13T14:28:39+08:00</lastmod></sitemap><sitemap><loc>https://dubbo.apache.org/en/sitemap.xml</loc><lastmod>2026-04-13T14:28:39+08:00</lastmod></sitemap></sitemapindex>
\ No newline at end of file
diff --git a/zh-cn/index.xml b/zh-cn/index.xml
index 92433272c7d..3a7b62db240 100644
--- a/zh-cn/index.xml
+++ b/zh-cn/index.xml
@@ -8481,7 +8481,7 @@ Dubbo &gt;= 3.1.6</p>
</span></span><span style="display:flex;"><span>
)
</span></span><span style="display:flex;"><span>rep,
err <span style="color:#719e07">:=</span> srv.<span
style="color:#268bd2">Greet</span>(context.<span
style="color:#268bd2">Background</span>(), <span
style="color:#719e07">&amp;</span>greet.GreetRequest{Name:
<span style="color:#2aa198">&#34;hello world&#34;</span>})
</span></span></code></pre></div><blockquote>
-<p>使用condition
router必须在nacos等配置中心动态设置匹配规则。</p></description></item><item><title>条件路由规则</title><link>https://dubbo.apache.org/zh-cn/overview/what/core-features/traffic/condition-rule/</link><pubDate>Mon,
01 Jan 0001 00:00:00
+0000</pubDate><guid>https://dubbo.apache.org/zh-cn/overview/what/core-features/traffic/condition-rule/</guid><description><p>条件路由规则将符合特定条件的请求转发到特定的地址实例子集上。规则首先对发起流量的请求参数进行匹配,符合匹配条件的请求将被转发到包含特定实例地址列表的子集。</p>
+<p>上述示例使用的是动态配置方式,需要在nacos等配置中心动态设置匹配规则。</p></description></item><item><title>条件路由规则</title><link>https://dubbo.apache.org/zh-cn/overview/what/core-features/traffic/condition-rule/</link><pubDate>Mon,
01 Jan 0001 00:00:00
+0000</pubDate><guid>https://dubbo.apache.org/zh-cn/overview/what/core-features/traffic/condition-rule/</guid><description><p>条件路由规则将符合特定条件的请求转发到特定的地址实例子集上。规则首先对发起流量的请求参数进行匹配,符合匹配条件的请求将被转发到包含特定实例地址列表的子集。</p>
<p>以下是一个条件路由规则示例。</p>
<p>基于以下示例规则,所有
<code>org.apache.dubbo.samples.CommentService</code> 服务
<code>getComment</code> 方法的调用都将被转发到有
<code>region=Hangzhou</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-yaml" data-lang="yaml"><span
style="display:flex;"><span><span
style="color:#268bd2">configVersion</span>: v3.0
diff --git
a/zh-cn/overview/mannual/golang-sdk/tutorial/traffic/condition_router/index.html
b/zh-cn/overview/mannual/golang-sdk/tutorial/traffic/condition_router/index.html
index 662f3f91d07..b3d574fb5bb 100644
---
a/zh-cn/overview/mannual/golang-sdk/tutorial/traffic/condition_router/index.html
+++
b/zh-cn/overview/mannual/golang-sdk/tutorial/traffic/condition_router/index.html
@@ -1,4 +1,4 @@
-<!doctype html><html lang=zh-cn class=no-js><head><meta name=ROBOTS
content="INDEX, FOLLOW"><link rel=alternate hreflang=en
href=https://dubbo.apache.org/en/overview/mannual/golang-sdk/tutorial/traffic/condition_router/><link
rel=canonical
href=https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/tutorial/traffic/condition_router/><script>var
_paq=window._paq=window._paq||[];_paq.push(["setDocumentTitle",document.domain+"/"+document.title]),_paq.push(["setCookieDomain","*.dubbo.apa
[...]
+<!doctype html><html lang=zh-cn class=no-js><head><meta name=ROBOTS
content="INDEX, FOLLOW"><link rel=alternate hreflang=en
href=https://dubbo.apache.org/en/overview/mannual/golang-sdk/tutorial/traffic/condition_router/><link
rel=canonical
href=https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/tutorial/traffic/condition_router/><script>var
_paq=window._paq=window._paq||[];_paq.push(["setDocumentTitle",document.domain+"/"+document.title]),_paq.push(["setCookieDomain","*.dubbo.apa
[...]
<a class=dropdown-item href=/zh-cn/overview/notices/>安全公告</a>
<a class=dropdown-item href=/zh-cn/contact/>贡献者指南</a></div></li><li
class="nav-item nav-item-line px-2 mb-2 mb-lg-0"><a class=nav-link
href=/zh-cn/blog/><span>博客</span></a></li><li class="nav-item nav-item-line
px-2 mb-2 mb-lg-0"><a class=nav-link
href=/zh-cn/download/><span>下载</span></a></li><li class="nav-item dropdown
d-lg-block"><a class="nav-link dropdown-toggle" href=# id=navbarDropdown
role=button data-toggle=dropdown aria-haspopup=true
aria-expanded=false>生态</a><div class="dropdo [...]
<a class=dropdown-item href=/zh-cn/overview/mannual/control-plane/>可视化控制台</a>
@@ -701,7 +701,7 @@
</span></span><span style=display:flex><span> ),
</span></span><span style=display:flex><span> )
</span></span><span style=display:flex><span>rep, err <span
style=color:#719e07>:=</span> srv.<span
style=color:#268bd2>Greet</span>(context.<span
style=color:#268bd2>Background</span>(), <span
style=color:#719e07>&</span>greet.GreetRequest{Name: <span
style=color:#2aa198>"hello world"</span>})
-</span></span></code></pre></div><blockquote><p>使用condition
router必须在nacos等配置中心动态设置匹配规则。</p></blockquote><p>Nacos配置示例:</p><blockquote><p>配置的<code>Data
ID</code>名字必须为: <code>{application_name}.{router_type}</code>。
+</span></span></code></pre></div><blockquote><p>上述示例使用的是动态配置方式,需要在nacos等配置中心动态设置匹配规则。</p></blockquote><p>Nacos配置示例:</p><blockquote><p>配置的<code>Data
ID</code>名字必须为: <code>{application_name}.{router_type}</code>。
例如: <code>condition-server.condition-router</code>。</p></blockquote><div
class=highlight><pre tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-yaml data-lang=yaml><span style=display:flex><span><span
style=color:#268bd2>configVersion</span>: v3.1
</span></span><span style=display:flex><span><span
style=color:#268bd2>scope</span>: <span
style=color:#2aa198>"application"</span>
</span></span><span style=display:flex><span><span
style=color:#268bd2>key</span>: <span
style=color:#2aa198>"condition-server"</span>
@@ -713,8 +713,20 @@
</span></span><span style=display:flex><span> <span
style=color:#268bd2>match</span>: <span style=color:#2aa198>"application =
condition-client"</span>
</span></span><span style=display:flex><span> <span
style=color:#268bd2>to</span>:
</span></span><span style=display:flex><span> - <span
style=color:#268bd2>match</span>: <span style=color:#2aa198>"port =
20000"</span>
-</span></span></code></pre></div><p>完整示例请见: <a
href=https://github.com/apache/dubbo-go-samples/tree/main/router/condition>本示例完整代码</a>。</p><div
id=pre-footer><h2>反馈</h2><p class=feedback--prompt>此页是否对您有帮助?</p><button
class="btn btn-primary mb-4 feedback--yes">是</button>
-<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
[...]
+</span></span></code></pre></div><p>完整示例请见: <a
href=https://github.com/apache/dubbo-go-samples/tree/main/router/condition>本示例完整代码</a>。</p><h3
id=静态配置-api>静态配置 API</h3><p>除上面的动态配置方式外,Condition router 也支持通过静态配置 API
在代码中注入路由规则。静态配置不要求配置中心参与,可以配合直连 URL 使用,也可以配合注册中心使用。</p><p>下面是一个服务级静态 condition
router 的示例:</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-go data-lang=go><span style=display:flex> [...]
+</span></span><span style=display:flex><span> dubbo.<span
style=color:#268bd2>WithName</span>(clientApplication),
+</span></span><span style=display:flex><span> dubbo.<span
style=color:#268bd2>WithRouter</span>(
+</span></span><span style=display:flex><span> router.<span
style=color:#268bd2>WithScope</span>(<span
style=color:#2aa198>"service"</span>),
+</span></span><span style=display:flex><span> router.<span
style=color:#268bd2>WithKey</span>(greet.GreetServiceName),
+</span></span><span style=display:flex><span> router.<span
style=color:#268bd2>WithPriority</span>(<span style=color:#2aa198>100</span>),
+</span></span><span style=display:flex><span> router.<span
style=color:#268bd2>WithForce</span>(<span style=color:#cb4b16>true</span>),
+</span></span><span style=display:flex><span> router.<span
style=color:#268bd2>WithConditions</span>([]<span
style=color:#dc322f>string</span>{
+</span></span><span style=display:flex><span> <span
style=color:#2aa198>"method = Greet => port = 20000"</span>,
+</span></span><span style=display:flex><span> }),
+</span></span><span style=display:flex><span> ),
+</span></span><span style=display:flex><span>)
+</span></span></code></pre></div><p>参数:</p><ul><li><code>router.WithScope("service")</code>:
按服务维度生效。</li><li><code>router.WithKey(greet.GreetServiceName)</code>:
指定当前规则作用的服务键。</li><li><code>router.WithConditions(...)</code>: 静态声明 condition
router 的匹配表达式。</li><li><code>router.WithForce(true)</code>:
控制规则命中失败时是否允许回退。</li></ul><p><code>dubbo-go-samples</code> 中的静态示例使用直连
URL,只是为了最小化演示,不代表该 API 只能用于直连场景。</p><p>静态配置示例请见: <a
href=https://github.com/apache/dubbo-go-samples/tree/main/router/stat [...]
+<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
[...]
<button class="contact-btn qr-container"
onmouseover='showQRCode("dingding-qr")'
onmouseout='hideQRCode("dingding-qr")'>钉钉<div class=qr-code id=dingding-qr
style=display:none><img
src=https://img.alicdn.com/imgextra/i4/O1CN01buuadT274Lj33QZWQ_!!6000000007743-0-tps-1170-1477.jpg
alt="DingTalk QR Code"></div></button>
<button class=contact-btn><a
href=https://github.com/apache/dubbo/>GitHub</a></button></div></div><div
class=footer-container-right><ul><li>文档</li><li><a
href=/zh-cn/overview/home/>概览</a></li><li><a
href=/zh-cn/overview/quickstart/>快速开始</a></li><li><a
href=/zh-cn/contact/contributor/software-donation-guide_dev/>开发者指南</a></li></ul><ul><li>资源</li><li><a
href=/zh-cn/contact/>社区</a></li></ul></div></div><div
style="width:85.125rem;height:0;border:1px solid
#dddee4;margin-bottom:32px"></div>< [...]
project logo are either registered trademarks or trademarks of The Apache
Software Foundation in the United States
diff --git a/zh-cn/overview/mannual/golang-sdk/tutorial/traffic/index.xml
b/zh-cn/overview/mannual/golang-sdk/tutorial/traffic/index.xml
index a2fb73a4c95..b4b6f3b663c 100644
--- a/zh-cn/overview/mannual/golang-sdk/tutorial/traffic/index.xml
+++ b/zh-cn/overview/mannual/golang-sdk/tutorial/traffic/index.xml
@@ -127,7 +127,7 @@
</span></span><span style="display:flex;"><span>
)
</span></span><span style="display:flex;"><span>rep,
err <span style="color:#719e07">:=</span> srv.<span
style="color:#268bd2">Greet</span>(context.<span
style="color:#268bd2">Background</span>(), <span
style="color:#719e07">&amp;</span>greet.GreetRequest{Name:
<span style="color:#2aa198">&#34;hello world&#34;</span>})
</span></span></code></pre></div><blockquote>
-<p>使用condition
router必须在nacos等配置中心动态设置匹配规则。</p></description></item><item><title>Sentinel限流降级</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/tutorial/traffic/sentinel/</link><pubDate>Mon,
01 Jan 0001 00:00:00
+0000</pubDate><guid>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/tutorial/traffic/sentinel/</guid><description><p>Dubbo-go
中提供了内置的限流组件,用户可根据自己的业务场景调整限流值、限流后的行为等,具体可 <a
href="https://github.com/apache/dubbo-go/blob/main/fil [...]
+<p>上述示例使用的是动态配置方式,需要在nacos等配置中心动态设置匹配规则。</p></description></item><item><title>Sentinel限流降级</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/tutorial/traffic/sentinel/</link><pubDate>Mon,
01 Jan 0001 00:00:00
+0000</pubDate><guid>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/tutorial/traffic/sentinel/</guid><description><p>Dubbo-go
中提供了内置的限流组件,用户可根据自己的业务场景调整限流值、限流后的行为等,具体可 <a
href="https://github.com/apache/dubbo-go/blob/main/filter [...]
<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-go" data-lang="go"><span
style="display:flex;"><span>server.<span
style="color:#268bd2">WithTpsLimiter</span>(<span
style="color:#2aa198">&#34;method-service&#34;</span>)
<span style="color:#586e75">// 目前支持 method-service、polaris
等几个实现</span>
</span></span><span
style="display:flex;"><span>server.<span
style="color:#268bd2">WithTpsLimiterXxx</span>() <span
style="color:#586e75">// 设置限流相关阈值,请根据具体方法填写</span>
</span></span><span
style="display:flex;"><span><span
style="color:#719e07">//tps.limit.strategy:
&#34;slidingWindow&#34;</span>
diff --git
a/zh-cn/overview/mannual/golang-sdk/tutorial/traffic/tag_router/index.html
b/zh-cn/overview/mannual/golang-sdk/tutorial/traffic/tag_router/index.html
index baae9507857..701e3812aca 100644
--- a/zh-cn/overview/mannual/golang-sdk/tutorial/traffic/tag_router/index.html
+++ b/zh-cn/overview/mannual/golang-sdk/tutorial/traffic/tag_router/index.html
@@ -1,4 +1,4 @@
-<!doctype html><html lang=zh-cn class=no-js><head><meta name=ROBOTS
content="INDEX, FOLLOW"><link rel=alternate hreflang=en
href=https://dubbo.apache.org/en/overview/mannual/golang-sdk/tutorial/traffic/tag_router/><link
rel=canonical
href=https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/tutorial/traffic/tag_router/><script>var
_paq=window._paq=window._paq||[];_paq.push(["setDocumentTitle",document.domain+"/"+document.title]),_paq.push(["setCookieDomain","*.dubbo.apache.org"]),_
[...]
+<!doctype html><html lang=zh-cn class=no-js><head><meta name=ROBOTS
content="INDEX, FOLLOW"><link rel=alternate hreflang=en
href=https://dubbo.apache.org/en/overview/mannual/golang-sdk/tutorial/traffic/tag_router/><link
rel=canonical
href=https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/tutorial/traffic/tag_router/><script>var
_paq=window._paq=window._paq||[];_paq.push(["setDocumentTitle",document.domain+"/"+document.title]),_paq.push(["setCookieDomain","*.dubbo.apache.org"]),_
[...]
<a class=dropdown-item href=/zh-cn/overview/notices/>安全公告</a>
<a class=dropdown-item href=/zh-cn/contact/>贡献者指南</a></div></li><li
class="nav-item nav-item-line px-2 mb-2 mb-lg-0"><a class=nav-link
href=/zh-cn/blog/><span>博客</span></a></li><li class="nav-item nav-item-line
px-2 mb-2 mb-lg-0"><a class=nav-link
href=/zh-cn/download/><span>下载</span></a></li><li class="nav-item dropdown
d-lg-block"><a class="nav-link dropdown-toggle" href=# id=navbarDropdown
role=button data-toggle=dropdown aria-haspopup=true
aria-expanded=false>生态</a><div class="dropdo [...]
<a class=dropdown-item href=/zh-cn/overview/mannual/control-plane/>可视化控制台</a>
@@ -695,8 +695,26 @@
</span></span><span style=display:flex><span>}
</span></span><span style=display:flex><span>ctx <span
style=color:#719e07>:=</span> context.<span
style=color:#268bd2>WithValue</span>(context.<span
style=color:#268bd2>Background</span>(), constant.AttachmentKey, atta)
</span></span><span style=display:flex><span>resp, err <span
style=color:#719e07>:=</span> svc.<span style=color:#268bd2>Greet</span>(ctx,
<span style=color:#719e07>&</span>greet.GreetRequest{Name: name})
-</span></span></code></pre></div><p>参数:</p><ul><li><code>constant.TagKey</code>:
设置客户端发送请求时所携带的tag标签。</li><li><code>constant.ForceUseTag</code>:
设置是否强制匹配标签。</li></ul><blockquote><p>未携带标签的流量只能打到未携带标签的服务,携带标签的流量则可以打到携带相应标签的服务以及不具有标签的服务(取决于是否配置force参数)。</p></blockquote><p>完整示例请见:
<a
href=https://github.com/apache/dubbo-go-samples/tree/main/router/tag>本示例完整代码</a>。</p><div
id=pre-footer><h2>反馈</h2><p class=feedback--prompt>此页是否对您有帮助?</p><button
class="btn btn-primary mb-4 feedback--yes">是</button>
-<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
[...]
+</span></span></code></pre></div><p>参数:</p><ul><li><code>constant.TagKey</code>:
设置客户端发送请求时所携带的tag标签。</li><li><code>constant.ForceUseTag</code>:
设置是否强制匹配标签。</li></ul><blockquote><p>未携带标签的流量只能打到未携带标签的服务,携带标签的流量则可以打到携带相应标签的服务以及不具有标签的服务(取决于是否配置force参数)。</p></blockquote><p>完整示例请见:
<a
href=https://github.com/apache/dubbo-go-samples/tree/main/router/tag>本示例完整代码</a>。</p><h3
id=静态配置-api>静态配置 API</h3><p>除上面的用法外,Tag router 也支持通过静态配置 API
在代码中注入路由规则。静态配置不要求配置中心参与,可以配合直连 URL 使用,也可以配合注册中心使用。</p><p>下面是 [...]
+</span></span><span style=display:flex><span> dubbo.<span
style=color:#268bd2>WithName</span>(clientApplication),
+</span></span><span style=display:flex><span> dubbo.<span
style=color:#268bd2>WithRouter</span>(
+</span></span><span style=display:flex><span> router.<span
style=color:#268bd2>WithScope</span>(<span
style=color:#2aa198>"application"</span>),
+</span></span><span style=display:flex><span> router.<span
style=color:#268bd2>WithKey</span>(clientApplication),
+</span></span><span style=display:flex><span> router.<span
style=color:#268bd2>WithPriority</span>(<span style=color:#2aa198>100</span>),
+</span></span><span style=display:flex><span> router.<span
style=color:#268bd2>WithForce</span>(<span style=color:#cb4b16>false</span>),
+</span></span><span style=display:flex><span> router.<span
style=color:#268bd2>WithTags</span>([]global.Tag{
+</span></span><span style=display:flex><span> {
+</span></span><span style=display:flex><span> Name:
<span style=color:#2aa198>"gray"</span>,
+</span></span><span style=display:flex><span>
Addresses: []<span style=color:#dc322f>string</span>{<span
style=color:#2aa198>"127.0.0.1:20002"</span>},
+</span></span><span style=display:flex><span> },
+</span></span><span style=display:flex><span> }),
+</span></span><span style=display:flex><span> ),
+</span></span><span style=display:flex><span>)
+</span></span></code></pre></div><p>携带请求 tag:</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-go data-lang=go><span style=display:flex><span>ctx <span
style=color:#719e07>:=</span> context.<span
style=color:#268bd2>WithValue</span>(context.<span
style=color:#268bd2>Background</span>(), constant.AttachmentKey, <span
style=color:#268bd2>map</span>[<span style=color:#dc322f>string</span>]<span
[...]
+</span></span><span style=display:flex><span> constant.Tagkey: <span
style=color:#2aa198>"gray"</span>,
+</span></span><span style=display:flex><span>})
+</span></span></code></pre></div><p>参数:</p><ul><li><code>router.WithScope("application")</code>:
按应用维度生效。</li><li><code>router.WithKey(clientApplication)</code>: 指定当前路由规则绑定的
consumer application。</li><li><code>router.WithTags(...)</code>: 静态声明 tag
到地址列表的映射关系。</li><li><code>router.WithForce(...)</code>: 控制 tag
不匹配时是否允许回退。</li></ul><p><code>dubbo-go-samples</code> 中的静态示例使用直连
URL,只是为了最小化演示,不代表静态配置 API 只能用于直连场景。</p><p>静态配置示例请见: <a
href=https://github.com/apache/dubbo-go-samples/tree/main/rou [...]
+<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
[...]
<button class="contact-btn qr-container"
onmouseover='showQRCode("dingding-qr")'
onmouseout='hideQRCode("dingding-qr")'>钉钉<div class=qr-code id=dingding-qr
style=display:none><img
src=https://img.alicdn.com/imgextra/i4/O1CN01buuadT274Lj33QZWQ_!!6000000007743-0-tps-1170-1477.jpg
alt="DingTalk QR Code"></div></button>
<button class=contact-btn><a
href=https://github.com/apache/dubbo/>GitHub</a></button></div></div><div
class=footer-container-right><ul><li>文档</li><li><a
href=/zh-cn/overview/home/>概览</a></li><li><a
href=/zh-cn/overview/quickstart/>快速开始</a></li><li><a
href=/zh-cn/contact/contributor/software-donation-guide_dev/>开发者指南</a></li></ul><ul><li>资源</li><li><a
href=/zh-cn/contact/>社区</a></li></ul></div></div><div
style="width:85.125rem;height:0;border:1px solid
#dddee4;margin-bottom:32px"></div>< [...]
project logo are either registered trademarks or trademarks of The Apache
Software Foundation in the United States
diff --git a/zh-cn/sitemap.xml b/zh-cn/sitemap.xml
index 96b17aeefde..a1006508e72 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://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-11-28T15:14:12+08:00</lastmod><changefreq>monthly</changefreq><priority>0.5</priority><xhtml:link
rel="alternate" hreflang="en" href="https://dubbo.apach [...]
\ 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://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-11-28T15:14:12+08:00</lastmod><changefreq>monthly</changefreq><priority>0.5</priority><xhtml:link
rel="alternate" hreflang="en" href="https://dubbo.apach [...]
\ No newline at end of file