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 bc06f4505a deploy: 64367254c4cccc71b078f1423991d6e957935dc1
bc06f4505a is described below
commit bc06f4505a6e0cee97c6ade6b97b8bd4d97310e0
Author: AlbumenJ <[email protected]>
AuthorDate: Sun Jun 18 05:44:41 2023 +0000
deploy: 64367254c4cccc71b078f1423991d6e957935dc1
---
sitemap.xml | 2 +-
.../advanced-features-and-usage/observability/index.xml | 2 +-
.../observability/tracing/index.html | 6 +++---
.../advanced-features-and-usage/service/index.xml | 17 +++++++++--------
.../service/local-mock/index.html | 16 +++++++++-------
.../java-sdk/reference-manual/protocol/http/index.html | 6 +++---
.../java-sdk/reference-manual/protocol/index.xml | 7 +++++--
.../java-sdk/reference-manual/protocol/rest/index.html | 6 +++---
zh-cn/sitemap.xml | 2 +-
9 files changed, 35 insertions(+), 29 deletions(-)
diff --git a/sitemap.xml b/sitemap.xml
index 4bc1d3ca2b..d1b56fde50 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>2023-06-18T13:38:48+08:00</lastmod></sitemap><sitemap><loc>https://dubbo.apache.org/en/sitemap.xml</loc><lastmod>2023-05-10T11:59:30+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>2023-06-18T13:40:09+08:00</lastmod></sitemap><sitemap><loc>https://dubbo.apache.org/en/sitemap.xml</loc><lastmod>2023-05-10T11:59:30+08:00</lastmod></sitemap></sitemapindex>
\ No newline at end of file
diff --git
a/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/observability/index.xml
b/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/observability/index.xml
index 534cf766f4..909060b0b5 100644
---
a/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/observability/index.xml
+++
b/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/observability/index.xml
@@ -274,7 +274,7 @@
<li><a
href="https://dubbo.apache.org/zh-cn/overview/tasks/observability/tracing/skywalking/">使用
Skywalking 实现 Dubbo 全链路追踪</a></li>
</ul>
<h2 id="关联日志">关联日志</h2>
-<p>Dubbo Tracing 还实现了与日志系统的自动关联,即将 tracing-id、span-id 等信息自动置入日志 MDC
上下文,你只需要设置日志输出格式中包含类似 <code>%X{traceId:-},%X{spanId:-}]</code>,即可实现业务日志与
tracing 系统的自动关联,具体可参见 <a
href="https://github.com/apache/dubbo-samples/blob/master/4-governance/dubbo-samples-spring-boot-tracing/dubbo-samples-spring-boot-tracing-otel-otlp/provider/src/main/resources/application.yml">Tracing
日志上下文配置示例</a>。</p></description></item><item><title>Overview:
日志管理</title><link>https://dubbo.apache.org/z [...]
+<p>Dubbo Tracing 还实现了与日志系统的自动关联,即将 tracing-id、span-id 等信息自动置入日志 MDC
上下文,你只需要设置日志输出格式中包含类似 <code>%X{traceId:-},%X{spanId:-}]</code>,即可实现业务日志与
tracing 系统的自动关联,具体可参见 <a
href="https://github.com/apache/dubbo-samples/blob/master/4-governance/dubbo-samples-tracing/dubbo-samples-spring-boot-tracing-otel-otlp/provider/src/main/resources/application.yml">Tracing
日志上下文配置示例</a>。</p></description></item><item><title>Overview:
日志管理</title><link>https://dubbo.apache.org/zh-cn/overvie [...]
<p>在 Dubbo 框架内所有的日志输出都是通过 LoggerFactory 这个静态工厂类来获得 Logger 的对象实体,并且抽离了一个
LoggerAdapter 用于对接第三方日志框架,所以就有了JDKLoggerAdapter, Log4jLoggerAdapter,
SLF4JLoggerAdapter等一些实现子类,分别对接了不同 Log 第三方实现。既然 Dubbo 能够支持这么多log实现,那么这些实现在 Dubbo
中优先级是在呢么样的呢?这里的优先级是指未配置指定的 logger 提供方的情况下,由 Dubbo 框架自己选择。优先级如下:</p>
<table>
<thead>
diff --git
a/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/observability/tracing/index.html
b/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/observability/tracing/index.html
index 569c5a6c47..b1d893a7ff 100644
---
a/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/observability/tracing/index.html
+++
b/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/observability/tracing/index.html
@@ -1,4 +1,4 @@
-<!doctype html><html lang=zh-cn class=no-js><head><meta name=ROBOTS
content="INDEX, FOLLOW"><link rel=canonical
href=https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/observability/tracing/><meta
charset=utf-8><meta name=viewport
content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta
name=generator content="Hugo 0.113.0"><link rel="shortcut icon" type=image/png
href=/imgs/favicon.png><link rel=apple-touch-icon
href=/favicons/apple-touch-ico [...]
+<!doctype html><html lang=zh-cn class=no-js><head><meta name=ROBOTS
content="INDEX, FOLLOW"><link rel=canonical
href=https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/observability/tracing/><meta
charset=utf-8><meta name=viewport
content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta
name=generator content="Hugo 0.113.0"><link rel="shortcut icon" type=image/png
href=/imgs/favicon.png><link rel=apple-touch-icon
href=/favicons/apple-touch-ico [...]
<script>var
doNotTrack=!1;if(!doNotTrack){window.dataLayer=window.dataLayer||[];function
gtag(){dataLayer.push(arguments)}gtag("js",new
Date),gtag("config","G-1TFHM5YBH0",{anonymize_ip:!1})}</script><link
rel=preload
href=/scss/main.min.827bbd3e83b1e0c66a1c08738c713f88f8068e84600146c2dbf9035f0f496f01.css
as=style><link
href=/scss/main.min.827bbd3e83b1e0c66a1c08738c713f88f8068e84600146c2dbf9035f0f496f01.css
rel=stylesheet integrity><script src=/js/jquery-3.5.1.min.js
integrity="sha256-9/a [...]
<link rel=stylesheet href=https://cdn.jsdelivr.net/npm/@docsearch/css@3><meta
name=theme-color content="#326ce5"><link rel=stylesheet
href=/css/feature-states.css><meta name=description content="链路追踪"><meta
property="og:description" content="链路追踪"><meta name=twitter:description
content="链路追踪"><meta property="og:url"
content="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/observability/tracing/"><meta
property="og:title" content="链路追踪"><meta name=twit [...]
<link href=/css/community.css rel=stylesheet><link href=/css/contactus.css
rel=stylesheet><link href=/css/language.css rel=stylesheet><script
src=/js/script.js></script></head><body class="td-page
td-documentation"><header><nav class="js-navbar-scroll navbar navbar-expand
navbar-dark flex-column flex-md-row td-navbar" data-auto-burger=primary><a
class=navbar-brand href=/zh-cn/><span class=navbar-logo></span><span
class="text-uppercase font-weight-bold">Apache Dubbo</span></a><div class="
[...]
@@ -675,8 +675,8 @@
</span></span><span style=display:flex><span> <span
style=color:#268bd2><artifactId></span>dubbo-spring-boot-tracing-otel-zipkin-starter<span
style=color:#268bd2></artifactId></span>
</span></span><span style=display:flex><span> <span
style=color:#268bd2><version></span>3.2.1-SNAPSHOT<span
style=color:#268bd2></version></span>
</span></span><span style=display:flex><span><span
style=color:#268bd2></dependency></span>
-</span></span></code></pre></div><p>更多完整示例请参见:</p><ul><li><a
href=/zh-cn/overview/tasks/observability/tracing/zipkin/>使用 Zipkin 实现 Dubbo
全链路追踪</a></li><li><a
href=/zh-cn/overview/tasks/observability/tracing/skywalking/>使用 Skywalking 实现
Dubbo 全链路追踪</a></li></ul><h2 id=关联日志>关联日志</h2><p>Dubbo Tracing
还实现了与日志系统的自动关联,即将 tracing-id、span-id 等信息自动置入日志 MDC 上下文,你只需要设置日志输出格式中包含类似
<code>%X{traceId:-},%X{spanId:-}]</code>,即可实现业务日志与 tracing 系统的自动关联,具体可参见 <a
href=https://github.com/apache/dubbo-samples [...]
-<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><a
href=/zh-cn/overview/tasks/observability/tracing/zipkin/>使用 Zipkin 实现 Dubbo
全链路追踪</a></li><li><a
href=/zh-cn/overview/tasks/observability/tracing/skywalking/>使用 Skywalking 实现
Dubbo 全链路追踪</a></li></ul><h2 id=关联日志>关联日志</h2><p>Dubbo Tracing
还实现了与日志系统的自动关联,即将 tracing-id、span-id 等信息自动置入日志 MDC 上下文,你只需要设置日志输出格式中包含类似
<code>%X{traceId:-},%X{spanId:-}]</code>,即可实现业务日志与 tracing 系统的自动关联,具体可参见 <a
href=https://github.com/apache/dubbo-samples [...]
+<button class="btn btn-primary mb-4
feedback--no">否</button></div><script>const
yes=document.querySelector(".feedback--yes"),no=document.querySelector(".feedback--no");document.querySelectorAll(".feedback--link").forEach(e=>{e.href=e.href+window.location.pathname});const
sendFeedback=e=>{gtag||console.log("!gtag"),gtag("event","click",{event_category:"Helpful",event_label:window.location.pathname,value:e})},disableButtons=()=>{yes.disabled=!0,yes.classList.add("feedback--button__disabled
[...]
<a
href="https://github.com/apache/dubbo-website/new/master/content/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/observability/tracing.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-s
[...]
<a
href="https://github.com/apache/dubbo-website/issues/new?title=%e9%93%be%e8%b7%af%e8%bf%bd%e8%b8%aa"
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></main><div class="d-none d-xl-block
col-xl-2 td-toc d-print-none"><nav id=TableOfContents><ul><li><a
href=#概述>概述</a></li><li><a href=#使用方式>使用方式</a></li><li><a
href=#关联日志>关联日志</a></li></ul></nav></div></div></div></div><footer
class="bg-dark py-5 row d-print-none footer-margin-0"><div
class="container-fluid mx-sm-5"><div class=row><div class="col-6 col-sm-4
text-xs-center o [...]
diff --git
a/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/service/index.xml
b/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/service/index.xml
index 22c5b1df94..42c1386bdb 100644
---
a/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/service/index.xml
+++
b/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/service/index.xml
@@ -2249,7 +2249,9 @@ key 为服务名,value 为服务提供者 url,此配置优先级最高,<
</span></span><span style="display:flex;"><span><span
style="color:#719e07">});</span>
</span></span></code></pre></div></description></item><item><title>Overview:
本地伪装</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/service/local-mock/</link><pubDate>Mon,
01 Jan 0001 00:00:00
+0000</pubDate><guid>https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/service/local-mock/</guid><description>
<h2 id="特性说明">特性说明</h2>
-<p>在 Dubbo3 中有一种机制可以实现轻量级的服务降级,也就是本地伪装 [^1]。</p>
+<p>在 Dubbo3 中有一种机制可以实现轻量级的服务降级,也就是本地伪装。</p>
+<p>Mock 是 Stub 的一个子集,便于服务提供方在客户端执行容错逻辑,因经常需要在出现 RpcException
(比如网络失败,超时等)时进行容错,而在出现业务异常(比如登录用户名密码错误)时不需要容错,
+如果用 Stub,可能就需要捕获并依赖 RpcException 类,而用 Mock 就可以不依赖 RpcException,因为它的约定就是只有出现
RpcException 时才执行。</p>
<h2 id="使用场景">使用场景</h2>
<p>本地伪装常被用于服务降级。比如某验权服务,当服务提供方全部挂掉后,假如此时服务消费方发起了一次远程调用,那么本次调用将会失败并抛出一个
<code>RpcException</code> 异常。</p>
<p>为了避免出现这种直接抛出异常的情况出现,那么客户端就可以利用本地伪装来提供 Mock 数据返回授权失败。</p>
@@ -2259,7 +2261,8 @@ key 为服务名,value 为服务提供者 url,此配置优先级最高,<
<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:reference</span> interface=<span
style="color:#2aa198">&#34;com.foo.BarService&#34;</span>
mock=<span style="color:#2aa198">&#34;true&#34;</span> <span
style="color:#268bd2">/&gt;</span>
</span></span></code></pre></div><p>或</p>
<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-xml" data-lang="xml"><span
style="display:flex;"><span><span
style="color:#268bd2">&lt;dubbo:reference</span> interface=<span
style="color:#2aa198">&#34;com.foo.BarService&#34;</span>
mock=<span
style="color:#2aa198">&#34;com.foo.BarServiceMock&#34;</span>
<span style="color:#268bd2" [...]
-</span></span></code></pre></div><p>在工程中提供 Mock 实现
[^2]:</p>
+</span></span></code></pre></div><p>在工程中提供 Mock 实现 [^2]:
+在 interface 旁放一个 Mock 实现,它实现 BarService 接口,并有一个无参构造函数。同时,如果没有在配置文件中显式指定 Mock
类的时候,那么需要保证 Mock 类的全限定类名是 <code>原全限定类名+Mock</code> 的形式,例如
<code>com.foo.BarServiceMock</code>,否则将会 Mock 失败。</p>
<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-java" data-lang="java"><span
style="display:flex;"><span><span style="color:#719e07">package</span>
com.foo<span style="color:#719e07">;</span>
</span></span><span style="display:flex;"><span><span
style="color:#268bd2">public</span> <span
style="color:#268bd2">class</span> <span
style="color:#268bd2">BarServiceMock</span> <span
style="color:#268bd2">implements</span> BarService <span
style="color:#719e07">{</span>
</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">public</span> String <span
style="color:#268bd2">sayHello</span><span
style="color:#719e07">(</span>String name<span
style="color:#719e07">)</span> <span style="color:#719e07">{</span>
@@ -2270,7 +2273,7 @@ key 为服务名,value 为服务提供者 url,此配置优先级最高,<
</span></span></code></pre></div><h3
id="使用-return-关键字-mock-返回值">使用 return 关键字 Mock 返回值</h3>
<p>使用 <code>return</code> 来返回一个字符串表示的对象,作为 Mock 的返回值。合法的字符串可以是:</p>
<ul>
-<li><em>empty</em>:代表空,返回基本类型的默认值、集合类的空值、自定义实体类的空对象 [^3]</li>
+<li><em>empty</em>:代表空,返回基本类型的默认值、集合类的空值、自定义实体类的空对象,如果返回值是一个实体类,那么此时返回的将会是一个属性都为默认值的空对象而不是
<code>null</code>。</li>
<li><em>null</em>:返回 <code>null</code></li>
<li><em>true</em>:返回 <code>true</code></li>
<li><em>false</em>:返回 <code>false</code></li>
@@ -2297,7 +2300,8 @@ key 为服务名,value 为服务提供者 url,此配置优先级最高,<
<p>当调用出错时,抛出一个默认的 RPCException:</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></span><span style="display:flex;"><span><span
style="color:#268bd2">&lt;dubbo:reference</span> interface=<span
style="color:#2aa198">&#34;com.foo.BarService&#34;</span>
mock=<span style="color:#2aa198">&#34;throw&#34;</span><span
style="color:#268bd2">/&gt;</span>
-</span></span></code></pre></div><p>当调用出错时,抛出指定的 Exception
[^4]:</p>
+</span></span></code></pre></div><p>当调用出错时,抛出指定的
Exception:</p>
+<p>自定义异常必须拥有一个入参为 <code>String</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-xml" data-lang="xml"><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span
style="color:#268bd2">&lt;dubbo:reference</span> interface=<span
style="color:#2aa198">&#34;com.foo.BarService&#34;</span>
mock=<span style="color:#2aa198">&#34;throw
com.foo.MockException&#34;</span><span
style="color:#268bd2">/&gt;</span>
</span></span></code></pre></div><h3
id="使用-force-和-fail-关键字来配置-mock-的行为">使用 force 和 fail 关键字来配置 Mock 的行为</h3>
@@ -2329,10 +2333,7 @@ key 为服务名,value 为服务提供者 url,此配置优先级最高,<
</span></span><span style="display:flex;"><span><span
style="color:#268bd2">&lt;dubbo:reference</span> id=<span
style="color:#2aa198">&#34;demoService&#34;</span> check=<span
style="color:#2aa198">&#34;false&#34;</span> interface=<span
style="color:#2aa198">&#34;com.foo.BarService&#34;</span><span
style="color:#268bd2">&gt;</span>
</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">&lt;dubbo:parameter</span> key=<span
style="color:#2aa198">&#34;sayHello.mock&#34;</span> value=<span
style="color:#2aa198">&#34;force:return fake&#34;</span><span
style="color:#268bd2">/&gt;</span>
</span></span><span style="display:flex;"><span><span
style="color:#268bd2">&lt;/dubbo:reference&gt;</span>
-</span></span></code></pre></div>
-<div class="alert alert-primary" role="alert">
-<h4 class="alert-heading">注意事项</h4>
-</div></description></item><item><title>Overview:
多注册中心</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/service/multi-registry/</link><pubDate>Mon,
01 Jan 0001 00:00:00
+0000</pubDate><guid>https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/service/multi-registry/</guid><description>
+</span></span></code></pre></div></description></item><item><title>Overview:
多注册中心</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/service/multi-registry/</link><pubDate>Mon,
01 Jan 0001 00:00:00
+0000</pubDate><guid>https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/service/multi-registry/</guid><description>
<h2 id="特性说明">特性说明</h2>
<p>Dubbo
支持同一服务向多注册中心同时注册,或者不同服务分别注册到不同的注册中心上去,甚至可以同时引用注册在不同注册中心上的同名服务。另外,注册中心是支持自定义扩展的
<sup id="fnref:1"><a href="#fn:1" class="footnote-ref"
role="doc-noteref">1</a></sup>。</p>
<h2 id="使用场景">使用场景</h2>
diff --git
a/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/service/local-mock/index.html
b/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/service/local-mock/index.html
index 308ee88399..b8c3dd5dd5 100644
---
a/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/service/local-mock/index.html
+++
b/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/service/local-mock/index.html
@@ -1,4 +1,4 @@
-<!doctype html><html lang=zh-cn class=no-js><head><meta name=ROBOTS
content="INDEX, FOLLOW"><link rel=canonical
href=https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/service/local-mock/><meta
charset=utf-8><meta name=viewport
content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta
name=generator content="Hugo 0.113.0"><link rel="shortcut icon" type=image/png
href=/imgs/favicon.png><link rel=apple-touch-icon
href=/favicons/apple-touch-icon-1 [...]
+<!doctype html><html lang=zh-cn class=no-js><head><meta name=ROBOTS
content="INDEX, FOLLOW"><link rel=canonical
href=https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/service/local-mock/><meta
charset=utf-8><meta name=viewport
content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta
name=generator content="Hugo 0.113.0"><link rel="shortcut icon" type=image/png
href=/imgs/favicon.png><link rel=apple-touch-icon
href=/favicons/apple-touch-icon-1 [...]
<script>var
doNotTrack=!1;if(!doNotTrack){window.dataLayer=window.dataLayer||[];function
gtag(){dataLayer.push(arguments)}gtag("js",new
Date),gtag("config","G-1TFHM5YBH0",{anonymize_ip:!1})}</script><link
rel=preload
href=/scss/main.min.827bbd3e83b1e0c66a1c08738c713f88f8068e84600146c2dbf9035f0f496f01.css
as=style><link
href=/scss/main.min.827bbd3e83b1e0c66a1c08738c713f88f8068e84600146c2dbf9035f0f496f01.css
rel=stylesheet integrity><script src=/js/jquery-3.5.1.min.js
integrity="sha256-9/a [...]
<link rel=stylesheet href=https://cdn.jsdelivr.net/npm/@docsearch/css@3><meta
name=theme-color content="#326ce5"><link rel=stylesheet
href=/css/feature-states.css><meta name=description content="了解如何在 Dubbo
中利用本地伪装实现服务降级"><meta property="og:description" content="了解如何在 Dubbo
中利用本地伪装实现服务降级"><meta name=twitter:description content="了解如何在 Dubbo
中利用本地伪装实现服务降级"><meta property="og:url"
content="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/service/local-moc
[...]
<link href=/css/community.css rel=stylesheet><link href=/css/contactus.css
rel=stylesheet><link href=/css/language.css rel=stylesheet><script
src=/js/script.js></script></head><body class="td-page
td-documentation"><header><nav class="js-navbar-scroll navbar navbar-expand
navbar-dark flex-column flex-md-row td-navbar" data-auto-burger=primary><a
class=navbar-brand href=/zh-cn/><span class=navbar-logo></span><span
class="text-uppercase font-weight-bold">Apache Dubbo</span></a><div class="
[...]
@@ -670,16 +670,18 @@
<label for=m-zh-cnoverviewreferenceprotocols-check><a
href=/zh-cn/overview/reference/protocols/ class="align-left pl-0
td-sidebar-link td-sidebar-link__section"
id=m-zh-cnoverviewreferenceprotocols><span>协议规范</span></a></label><ul
class="ul-3 foldable"><li class="td-sidebar-nav__section-title
td-sidebar-nav__section without-child"
id=m-zh-cnoverviewreferenceprotocolstriple-li><input type=checkbox
id=m-zh-cnoverviewreferenceprotocolstriple-check>
<label for=m-zh-cnoverviewreferenceprotocolstriple-check><a
href=/zh-cn/overview/reference/protocols/triple/ title="Triple 协议设计理念与规范"
class="align-left pl-0 td-sidebar-link td-sidebar-link__page"
id=m-zh-cnoverviewreferenceprotocolstriple><span>Triple
协议规范</span></a></label></li><li class="td-sidebar-nav__section-title
td-sidebar-nav__section without-child"
id=m-zh-cnoverviewreferenceprotocolstcp-li><input type=checkbox
id=m-zh-cnoverviewreferenceprotocolstcp-check>
<label for=m-zh-cnoverviewreferenceprotocolstcp-check><a
href=/zh-cn/overview/reference/protocols/tcp/ class="align-left pl-0
td-sidebar-link td-sidebar-link__page"
id=m-zh-cnoverviewreferenceprotocolstcp><span>Dubbo2
协议规范</span></a></label></li><li class="td-sidebar-nav__section-title
td-sidebar-nav__section without-child"
id=m-zh-cnoverviewreferenceprotocolshttp-li><input type=checkbox
id=m-zh-cnoverviewreferenceprotocolshttp-check>
-<label for=m-zh-cnoverviewreferenceprotocolshttp-check><a
href=/zh-cn/overview/reference/protocols/http/ class="align-left pl-0
td-sidebar-link td-sidebar-link__page"
id=m-zh-cnoverviewreferenceprotocolshttp><span>HTTP
协议规范</span></a></label></li></ul></li></ul></li></ul></li></ul></nav></div></div><main
class="col-12 col-md-9 col-xl-8 pl-md-5" role=main><nav aria-label=breadcrumb
class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a
href=https://dubbo.apache.org/zh-cn/o [...]
+<label for=m-zh-cnoverviewreferenceprotocolshttp-check><a
href=/zh-cn/overview/reference/protocols/http/ class="align-left pl-0
td-sidebar-link td-sidebar-link__page"
id=m-zh-cnoverviewreferenceprotocolshttp><span>HTTP
协议规范</span></a></label></li></ul></li></ul></li></ul></li></ul></nav></div></div><main
class="col-12 col-md-9 col-xl-8 pl-md-5" role=main><nav aria-label=breadcrumb
class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a
href=https://dubbo.apache.org/zh-cn/o [...]
+如果用 Stub,可能就需要捕获并依赖 RpcException 类,而用 Mock 就可以不依赖 RpcException,因为它的约定就是只有出现
RpcException 时才执行。</p><h2
id=使用场景>使用场景</h2><p>本地伪装常被用于服务降级。比如某验权服务,当服务提供方全部挂掉后,假如此时服务消费方发起了一次远程调用,那么本次调用将会失败并抛出一个
<code>RpcException</code> 异常。</p><p>为了避免出现这种直接抛出异常的情况出现,那么客户端就可以利用本地伪装来提供 Mock
数据返回授权失败。</p><h2 id=使用方式>使用方式</h2><h3 id=开启-mock-配置>开启 Mock 配置</h3><p>在 Spring
XML 配置文件中按以下方式配置:</p><div class=highlight><pre tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4>
[...]
</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-xml data-lang=xml><span style=display:flex><span><span
style=color:#268bd2><dubbo:reference</span> interface=<span
style=color:#2aa198>"com.foo.BarService"</span> mock=<span
style=color:#2aa198>"com.foo.BarServiceMock"</span> <span
style=color:#268bd2>/></span>
-</span></span></code></pre></div><p>在工程中提供 Mock 实现 [^2]:</p><div
class=highlight><pre tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-java data-lang=java><span style=display:flex><span><span
style=color:#719e07>package</span> com.foo<span style=color:#719e07>;</span>
+</span></span></code></pre></div><p>在工程中提供 Mock 实现 [^2]:
+在 interface 旁放一个 Mock 实现,它实现 BarService 接口,并有一个无参构造函数。同时,如果没有在配置文件中显式指定 Mock
类的时候,那么需要保证 Mock 类的全限定类名是 <code>原全限定类名+Mock</code> 的形式,例如
<code>com.foo.BarServiceMock</code>,否则将会 Mock 失败。</p><div class=highlight><pre
tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-java data-lang=java><span style=display:flex><span><span
style=color:#719e07>package</span> com.foo<span style=color:#719e07>;</span>
</span></span><span style=display:flex><span><span
style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span
style=color:#268bd2>BarServiceMock</span> <span
style=color:#268bd2>implements</span> BarService <span
style=color:#719e07>{</span>
</span></span><span style=display:flex><span> <span
style=color:#268bd2>public</span> String <span
style=color:#268bd2>sayHello</span><span style=color:#719e07>(</span>String
name<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
</span></span><span style=display:flex><span> <span
style=color:#586e75>// 你可以伪造容错数据,此方法只在出现RpcException时被执行
</span></span></span><span style=display:flex><span><span
style=color:#586e75></span> <span style=color:#719e07>return</span>
<span style=color:#2aa198>"容错数据"</span><span
style=color:#719e07>;</span>
</span></span><span style=display:flex><span> <span
style=color:#719e07>}</span>
</span></span><span style=display:flex><span><span style=color:#719e07>}</span>
-</span></span></code></pre></div><h3 id=使用-return-关键字-mock-返回值>使用 return 关键字
Mock 返回值</h3><p>使用 <code>return</code> 来返回一个字符串表示的对象,作为 Mock
的返回值。合法的字符串可以是:</p><ul><li><em>empty</em>:代表空,返回基本类型的默认值、集合类的空值、自定义实体类的空对象
[^3]</li><li><em>null</em>:返回 <code>null</code></li><li><em>true</em>:返回
<code>true</code></li><li><em>false</em>:返回 <code>false</code></li><li><em>JSON
字符串</em>:返回反序列化 JSON 串后所得到的对象</li></ul><p>举个例子,如果服务的消费方经常需要 try-catch
捕获异常,如:</p><div class=highlight><pre tabindex=0 style=co [...]
+</span></span></code></pre></div><h3 id=使用-return-关键字-mock-返回值>使用 return 关键字
Mock 返回值</h3><p>使用 <code>return</code> 来返回一个字符串表示的对象,作为 Mock
的返回值。合法的字符串可以是:</p><ul><li><em>empty</em>:代表空,返回基本类型的默认值、集合类的空值、自定义实体类的空对象,如果返回值是一个实体类,那么此时返回的将会是一个属性都为默认值的空对象而不是
<code>null</code>。</li><li><em>null</em>:返回
<code>null</code></li><li><em>true</em>:返回
<code>true</code></li><li><em>false</em>:返回 <code>false</code></li><li><em>JSON
字符串</em>:返回反序列化 JSON 串后所得到的对象</li></ul><p>举个例子,如果服务的消费方经常需要 try-catch 捕获异 [...]
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span
style=color:#268bd2>public</span> Offer <span
style=color:#268bd2>findOffer</span><span style=color:#719e07>(</span>String
offerId<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
</span></span><span style=display:flex><span> Offer offer <span
style=color:#719e07>=</span> <span style=color:#cb4b16>null</span><span
style=color:#719e07>;</span>
@@ -695,7 +697,7 @@
</span></span></code></pre></div><p>那么请考虑改为 Mock 实现,并在 Mock 实现中 <code>return
null</code>。如果只是想简单的忽略异常,在 <code>2.0.11</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-xml data-lang=xml><span style=display:flex><span><span
style=color:#268bd2><dubbo:reference</span> interface=<span
style=color:#2aa198>"com.foo.BarService"</span> mock=<span
style=color:#2aa198>"ret [...]
</span></span></code></pre></div><h3 id=使用-throw-关键字-mock-抛出异常>使用 throw 关键字
Mock 抛出异常</h3><p>使用 <code>throw</code> 来返回一个 Exception 对象,作为 Mock
的返回值。</p><p>当调用出错时,抛出一个默认的 RPCException:</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></span><span style=display:flex><span><span
style=color:#268bd2><dubbo:reference</span> interface=<span
style=color:#2aa198>"com.foo.BarService"</span> mock=<span
style=color:#2aa198>"throw"</span><span style=color:#268bd2>/></span>
-</span></span></code></pre></div><p>当调用出错时,抛出指定的 Exception [^4]:</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></span></code></pre></div><p>当调用出错时,抛出指定的
Exception:</p><p>自定义异常必须拥有一个入参为 <code>String</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-xml data-lang=xml><span style=display:flex><span>
</span></span><span style=display:flex><span><span
style=color:#268bd2><dubbo:reference</span> interface=<span
style=color:#2aa198>"com.foo.BarService"</span> mock=<span
style=color:#2aa198>"throw com.foo.MockException"</span><span
style=color:#268bd2>/></span>
</span></span></code></pre></div><h3 id=使用-force-和-fail-关键字来配置-mock-的行为>使用
force 和 fail 关键字来配置 Mock 的行为</h3><p><code>force:</code> 代表强制使用 Mock
行为,在这种情况下不会走远程调用。</p><p><code>fail:</code> 与默认行为一致,只有当远程调用发生错误时才使用 Mock
行为。也就是说,配置的时候其实是可以不使用 <code>fail</code> 关键字的,直接使用 <code>throw</code> 或者
<code>return</code> 就可以了。</p><p><code>force:</code> 和 <code>fail:</code> 都支持与
<code>throw</code> 或者 <code>return</code> 组合使用。</p><p>强制返回指定值:</p><div
class=highlight><pre tabindex=0 style=color:#93a1a1;back [...]
</span></span><span style=display:flex><span><span
style=color:#268bd2><dubbo:reference</span> interface=<span
style=color:#2aa198>"com.foo.BarService"</span> mock=<span
style=color:#2aa198>"force:return fake"</span><span
style=color:#268bd2>/></span>
@@ -715,8 +717,8 @@
</span></span><span style=display:flex><span><span
style=color:#268bd2><dubbo:reference</span> id=<span
style=color:#2aa198>"demoService"</span> check=<span
style=color:#2aa198>"false"</span> interface=<span
style=color:#2aa198>"com.foo.BarService"</span><span
style=color:#268bd2>></span>
</span></span><span style=display:flex><span> <span
style=color:#268bd2><dubbo:parameter</span> key=<span
style=color:#2aa198>"sayHello.mock"</span> value=<span
style=color:#2aa198>"force:return fake"</span><span
style=color:#268bd2>/></span>
</span></span><span style=display:flex><span><span
style=color:#268bd2></dubbo:reference></span>
-</span></span></code></pre></div><div class="alert alert-primary"
role=alert><h4 class=alert-heading>注意事项</h4></div><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><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
[...]
<a
href="https://github.com/apache/dubbo-website/new/master/content/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/service/local-mock.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-star
[...]
<a
href="https://github.com/apache/dubbo-website/issues/new?title=%e6%9c%ac%e5%9c%b0%e4%bc%aa%e8%a3%85"
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></main><div class="d-none d-xl-block
col-xl-2 td-toc d-print-none"><nav id=TableOfContents><ul><li><a
href=#特性说明>特性说明</a></li><li><a href=#使用场景>使用场景</a></li><li><a
href=#使用方式>使用方式</a><ul><li><a href=#开启-mock-配置>开启 Mock 配置</a></li><li><a
href=#使用-return-关键字-mock-返回值>使用 return 关键字 Mock 返回值</a></li><li><a
href=#使用-throw-关键字-mock-抛出异常>使用 throw 关键字 Mock 抛出异常</a></li><li><a href= [...]
diff --git
a/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/http/index.html
b/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/http/index.html
index a2a9968bee..ba425b7cd0 100644
--- a/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/http/index.html
+++ b/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/http/index.html
@@ -1,4 +1,4 @@
-<!doctype html><html lang=zh-cn class=no-js><head><meta name=ROBOTS
content="INDEX, FOLLOW"><link rel=canonical
href=https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/http/><meta
charset=utf-8><meta name=viewport
content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta
name=generator content="Hugo 0.113.0"><link rel="shortcut icon" type=image/png
href=/imgs/favicon.png><link rel=apple-touch-icon
href=/favicons/apple-touch-icon-180x180.png sizes [...]
+<!doctype html><html lang=zh-cn class=no-js><head><meta name=ROBOTS
content="INDEX, FOLLOW"><link rel=canonical
href=https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/http/><meta
charset=utf-8><meta name=viewport
content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta
name=generator content="Hugo 0.113.0"><link rel="shortcut icon" type=image/png
href=/imgs/favicon.png><link rel=apple-touch-icon
href=/favicons/apple-touch-icon-180x180.png sizes [...]
<script>var
doNotTrack=!1;if(!doNotTrack){window.dataLayer=window.dataLayer||[];function
gtag(){dataLayer.push(arguments)}gtag("js",new
Date),gtag("config","G-1TFHM5YBH0",{anonymize_ip:!1})}</script><link
rel=preload
href=/scss/main.min.827bbd3e83b1e0c66a1c08738c713f88f8068e84600146c2dbf9035f0f496f01.css
as=style><link
href=/scss/main.min.827bbd3e83b1e0c66a1c08738c713f88f8068e84600146c2dbf9035f0f496f01.css
rel=stylesheet integrity><script src=/js/jquery-3.5.1.min.js
integrity="sha256-9/a [...]
<link rel=stylesheet href=https://cdn.jsdelivr.net/npm/@docsearch/css@3><meta
name=theme-color content="#326ce5"><link rel=stylesheet
href=/css/feature-states.css><meta name=description content="HTTP协议"><meta
property="og:description" content="HTTP协议"><meta name=twitter:description
content="HTTP协议"><meta property="og:url"
content="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/http/"><meta
property="og:title" content="HTTP协议"><meta name=twitter:title c [...]
<link href=/css/community.css rel=stylesheet><link href=/css/contactus.css
rel=stylesheet><link href=/css/language.css rel=stylesheet><script
src=/js/script.js></script></head><body class="td-page
td-documentation"><header><nav class="js-navbar-scroll navbar navbar-expand
navbar-dark flex-column flex-md-row td-navbar" data-auto-burger=primary><a
class=navbar-brand href=/zh-cn/><span class=navbar-logo></span><span
class="text-uppercase font-weight-bold">Apache Dubbo</span></a><div class="
[...]
@@ -687,8 +687,8 @@
</span></span><span style=display:flex><span> <span
style=color:#268bd2><servlet-name></span>dubbo<span
style=color:#268bd2></servlet-name></span>
</span></span><span style=display:flex><span> <span
style=color:#268bd2><url-pattern></span>/*<span
style=color:#268bd2></url-pattern></span>
</span></span><span style=display:flex><span><span
style=color:#268bd2></servlet-mapping></span>
-</span></span></code></pre></div><blockquote><p>如果使用 servlet
派发请求</p><ul><li>协议的端口 <code><dubbo:protocol port="8080" /></code> 必须与
servlet 容器的端口相同,</li><li>协议的上下文路径 <code><dubbo:protocol contextpath="foo"
/></code> 必须与 servlet 应用的上下文路径相同。</li></ul></blockquote><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><div class="alert alert-primary"
role=alert><h4 class=alert-heading>注意</h4><p>如果使用 servlet 派发请求</p><ul><li>协议的端口
<code><dubbo:protocol port="8080" /></code> 必须与 servlet
容器的端口相同,</li><li>协议的上下文路径 <code><dubbo:protocol contextpath="foo" /></code>
必须与 servlet 应用的上下文路径相同。</li></ul></div><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
[...]
<a
href="https://github.com/apache/dubbo-website/new/master/content/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/http.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+
[...]
<a
href="https://github.com/apache/dubbo-website/issues/new?title=HTTP%e5%8d%8f%e8%ae%ae"
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></main><div class="d-none d-xl-block
col-xl-2 td-toc d-print-none"><nav id=TableOfContents><ul><li><a
href=#特性说明>特性说明</a><ul><li></li></ul></li><li><a href=#使用场景>使用场景</a></li><li><a
href=#使用方式>使用方式</a><ul><li><a href=#配置协议>配置协议</a></li><li><a
href=#配置-jetty-server-默认>配置 Jetty Server (默认)</a></li><li><a
href=#配置-servlet-bridge-server-推荐使用>配置 Servlet Bridge Server (推荐使用)</a>< [...]
diff --git
a/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/index.xml
b/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/index.xml
index 79876413f7..6dd4e7de08 100644
--- a/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/index.xml
+++ b/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/index.xml
@@ -333,6 +333,7 @@ Interface 方式。</p>
<p>此协议提供通过 web 访问服务的简单方式,将服务与其他基于 web 的应用程序集成。
支持 JSON、XML 和 Text 格式的请求和响应,发布和使用服务的便捷方式,也提供了服务版本控制、服务过滤、服务元数据和服务参数, 实现 Dubbo
框架的灵活性和可伸缩性。</p>
<h2 id="使用场景">使用场景</h2>
+<p>将 Dubbo 服务公开为 RESTful API,与微服务和现有 RESTful 系统集成,实现与非 Java
客户端的互操作性,并促进混合通信。</p>
<h2 id="使用方式">使用方式</h2>
<h3 id="快速入门">快速入门</h3>
<p>在 dubbo 中开发一个 REST 风格的服务会比较简单,下面以一个注册用户的简单服务为例说明。</p>
@@ -839,13 +840,15 @@ Interface 方式。</p>
</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">&lt;servlet-name&gt;</span>dubbo<span
style="color:#268bd2">&lt;/servlet-name&gt;</span>
</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">&lt;url-pattern&gt;</span>/*<span
style="color:#268bd2">&lt;/url-pattern&gt;</span>
</span></span><span style="display:flex;"><span><span
style="color:#268bd2">&lt;/servlet-mapping&gt;</span>
-</span></span></code></pre></div><blockquote>
+</span></span></code></pre></div>
+<div class="alert alert-primary" role="alert">
+<h4 class="alert-heading">注意</h4>
<p>如果使用 servlet 派发请求</p>
<ul>
<li>协议的端口 <code>&lt;dubbo:protocol port=&quot;8080&quot;
/&gt;</code> 必须与 servlet 容器的端口相同,</li>
<li>协议的上下文路径 <code>&lt;dubbo:protocol
contextpath=&quot;foo&quot; /&gt;</code> 必须与 servlet
应用的上下文路径相同。</li>
</ul>
-</blockquote></description></item><item><title>Overview: Rest
协议</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/v3.2_rest_protocol_design/</link><pubDate>Mon,
01 Jan 0001 00:00:00
+0000</pubDate><guid>https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/v3.2_rest_protocol_design/</guid><description>
+</div></description></item><item><title>Overview: Rest
协议</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/v3.2_rest_protocol_design/</link><pubDate>Mon,
01 Jan 0001 00:00:00
+0000</pubDate><guid>https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/v3.2_rest_protocol_design/</guid><description>
<h1 id="dubborestprotocol设计文档">Dubbo RestProtocol 设计文档</h1>
<h2 id="原版本dubborest">原版本dubbo rest</h2>
<p>consumer</p>
diff --git
a/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/rest/index.html
b/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/rest/index.html
index bfbfd15585..9af8fc1e30 100644
--- a/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/rest/index.html
+++ b/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/rest/index.html
@@ -1,4 +1,4 @@
-<!doctype html><html lang=zh-cn class=no-js><head><meta name=ROBOTS
content="INDEX, FOLLOW"><link rel=canonical
href=https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/rest/><meta
charset=utf-8><meta name=viewport
content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta
name=generator content="Hugo 0.113.0"><link rel="shortcut icon" type=image/png
href=/imgs/favicon.png><link rel=apple-touch-icon
href=/favicons/apple-touch-icon-180x180.png sizes [...]
+<!doctype html><html lang=zh-cn class=no-js><head><meta name=ROBOTS
content="INDEX, FOLLOW"><link rel=canonical
href=https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/rest/><meta
charset=utf-8><meta name=viewport
content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta
name=generator content="Hugo 0.113.0"><link rel="shortcut icon" type=image/png
href=/imgs/favicon.png><link rel=apple-touch-icon
href=/favicons/apple-touch-icon-180x180.png sizes [...]
<script>var
doNotTrack=!1;if(!doNotTrack){window.dataLayer=window.dataLayer||[];function
gtag(){dataLayer.push(arguments)}gtag("js",new
Date),gtag("config","G-1TFHM5YBH0",{anonymize_ip:!1})}</script><link
rel=preload
href=/scss/main.min.827bbd3e83b1e0c66a1c08738c713f88f8068e84600146c2dbf9035f0f496f01.css
as=style><link
href=/scss/main.min.827bbd3e83b1e0c66a1c08738c713f88f8068e84600146c2dbf9035f0f496f01.css
rel=stylesheet integrity><script src=/js/jquery-3.5.1.min.js
integrity="sha256-9/a [...]
<link rel=stylesheet href=https://cdn.jsdelivr.net/npm/@docsearch/css@3><meta
name=theme-color content="#326ce5"><link rel=stylesheet
href=/css/feature-states.css><meta name=description content="Rest协议"><meta
property="og:description" content="Rest协议"><meta name=twitter:description
content="Rest协议"><meta property="og:url"
content="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/rest/"><meta
property="og:title" content="Rest协议"><meta name=twitter:title c [...]
<link href=/css/community.css rel=stylesheet><link href=/css/contactus.css
rel=stylesheet><link href=/css/language.css rel=stylesheet><script
src=/js/script.js></script></head><body class="td-page
td-documentation"><header><nav class="js-navbar-scroll navbar navbar-expand
navbar-dark flex-column flex-md-row td-navbar" data-auto-burger=primary><a
class=navbar-brand href=/zh-cn/><span class=navbar-logo></span><span
class="text-uppercase font-weight-bold">Apache Dubbo</span></a><div class="
[...]
@@ -671,7 +671,7 @@
<label for=m-zh-cnoverviewreferenceprotocolstriple-check><a
href=/zh-cn/overview/reference/protocols/triple/ title="Triple 协议设计理念与规范"
class="align-left pl-0 td-sidebar-link td-sidebar-link__page"
id=m-zh-cnoverviewreferenceprotocolstriple><span>Triple
协议规范</span></a></label></li><li class="td-sidebar-nav__section-title
td-sidebar-nav__section without-child"
id=m-zh-cnoverviewreferenceprotocolstcp-li><input type=checkbox
id=m-zh-cnoverviewreferenceprotocolstcp-check>
<label for=m-zh-cnoverviewreferenceprotocolstcp-check><a
href=/zh-cn/overview/reference/protocols/tcp/ class="align-left pl-0
td-sidebar-link td-sidebar-link__page"
id=m-zh-cnoverviewreferenceprotocolstcp><span>Dubbo2
协议规范</span></a></label></li><li class="td-sidebar-nav__section-title
td-sidebar-nav__section without-child"
id=m-zh-cnoverviewreferenceprotocolshttp-li><input type=checkbox
id=m-zh-cnoverviewreferenceprotocolshttp-check>
<label for=m-zh-cnoverviewreferenceprotocolshttp-check><a
href=/zh-cn/overview/reference/protocols/http/ class="align-left pl-0
td-sidebar-link td-sidebar-link__page"
id=m-zh-cnoverviewreferenceprotocolshttp><span>HTTP
协议规范</span></a></label></li></ul></li></ul></li></ul></li></ul></nav></div></div><main
class="col-12 col-md-9 col-xl-8 pl-md-5" role=main><nav aria-label=breadcrumb
class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a
href=https://dubbo.apache.org/zh-cn/o [...]
-支持 JSON、XML 和 Text 格式的请求和响应,发布和使用服务的便捷方式,也提供了服务版本控制、服务过滤、服务元数据和服务参数, 实现 Dubbo
框架的灵活性和可伸缩性。</p><h2 id=使用场景>使用场景</h2><h2 id=使用方式>使用方式</h2><h3
id=快速入门>快速入门</h3><p>在 dubbo 中开发一个 REST
风格的服务会比较简单,下面以一个注册用户的简单服务为例说明。</p><p>这个服务要实现的功能是提供如下 URL(注:这个URL不是完全符合 REST
的风格,但是更简单实用)</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>http://localhost:8 [...]
+支持 JSON、XML 和 Text 格式的请求和响应,发布和使用服务的便捷方式,也提供了服务版本控制、服务过滤、服务元数据和服务参数, 实现 Dubbo
框架的灵活性和可伸缩性。</p><h2 id=使用场景>使用场景</h2><p>将 Dubbo 服务公开为 RESTful API,与微服务和现有
RESTful 系统集成,实现与非 Java 客户端的互操作性,并促进混合通信。</p><h2 id=使用方式>使用方式</h2><h3
id=快速入门>快速入门</h3><p>在 dubbo 中开发一个 REST
风格的服务会比较简单,下面以一个注册用户的简单服务为例说明。</p><p>这个服务要实现的功能是提供如下 URL(注:这个URL不是完全符合 REST
的风格,但是更简单实用)</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=langu [...]
</span></span></code></pre></div><p>而任何客户端都可以将包含用户信息的 JSON 字符串 POST 到以上 URL
来完成用户注册。</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-java data-lang=java><span style=display:flex><span><span
style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span
style=color:#268bd2>UserService</span> <span style=color:#719e07>{</span>
</span></span><span style=display:flex><span> <span
style=color:#dc322f>void</span> <span
style=color:#268bd2>registerUser</span><span style=color:#719e07>(</span>User
user<span style=color:#719e07>);</span>
</span></span><span style=display:flex><span><span style=color:#719e07>}</span>
@@ -950,7 +950,7 @@
</span></span><span style=display:flex><span><span style=color:#719e07>}</span>
</span></span></code></pre></div><p>然后将这个 ExceptionMapper 添加到 XML
配置中即可:</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:protocol</span> name=<span
style=color:#2aa198>"rest"</span> port=<span
style=color:#2aa198>"8888"</span> extension=<span
style=color:#2aa198>"xxx.MyValidationExceptio [...]
</span></span></code></pre></div><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
[...]
+<button class="btn btn-primary mb-4
feedback--no">否</button></div><script>const
yes=document.querySelector(".feedback--yes"),no=document.querySelector(".feedback--no");document.querySelectorAll(".feedback--link").forEach(e=>{e.href=e.href+window.location.pathname});const
sendFeedback=e=>{gtag||console.log("!gtag"),gtag("event","click",{event_category:"Helpful",event_label:window.location.pathname,value:e})},disableButtons=()=>{yes.disabled=!0,yes.classList.add("feedback--button__disabled
[...]
<a
href="https://github.com/apache/dubbo-website/new/master/content/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/rest.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+
[...]
<a
href="https://github.com/apache/dubbo-website/issues/new?title=Rest%e5%8d%8f%e8%ae%ae"
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></main><div class="d-none d-xl-block
col-xl-2 td-toc d-print-none"><nav id=TableOfContents><ul><li><a
href=#特性说明>特性说明</a></li><li><a href=#使用场景>使用场景</a></li><li><a
href=#使用方式>使用方式</a><ul><li><a href=#快速入门>快速入门</a></li><li><a
href=#rest-服务提供端>REST 服务提供端</a></li><li><a href=#http-postget-的实现>HTTP POST/GET
的实现</a></li><li><a href=#annotation>Annotation</a></li><li><a href=#多数据 [...]
diff --git a/zh-cn/sitemap.xml b/zh-cn/sitemap.xml
index 19e7f8cbe7..7a9c74ace7 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-02-22T15:03:22+08:00</lastmod><changefreq>monthly</changefreq><priority>0.5</priority></url><url><loc>https://dubbo.apache.org/zh-cn/overview/mannual/jav
[...]
\ 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-02-22T15:03:22+08:00</lastmod><changefreq>monthly</changefreq><priority>0.5</priority></url><url><loc>https://dubbo.apache.org/zh-cn/overview/mannual/jav
[...]
\ No newline at end of file