This is an automated email from the ASF dual-hosted git repository.
github-bot pushed a commit to branch cn-site
in repository https://gitbox.apache.org/repos/asf/dubbo-website.git
The following commit(s) were added to refs/heads/cn-site by this push:
new 2c51dfe301 deploy: 1a29d24fff6afd08520a384c18720835a915421c
2c51dfe301 is described below
commit 2c51dfe30186f9b982bd1b4e451bf802506a215b
Author: AlbumenJ <[email protected]>
AuthorDate: Sun Jun 18 05:44:44 2023 +0000
deploy: 1a29d24fff6afd08520a384c18720835a915421c
---
sitemap.xml | 2 +-
.../advanced-features-and-usage/service/index.xml | 17 +++++++++--------
.../service/local-mock/index.html | 16 +++++++++-------
zh-cn/sitemap.xml | 2 +-
4 files changed, 20 insertions(+), 17 deletions(-)
diff --git a/sitemap.xml b/sitemap.xml
index 6e23f1022f..6785ab16b0 100644
--- a/sitemap.xml
+++ b/sitemap.xml
@@ -1 +1 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?><sitemapindex
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"><sitemap><loc>https://cn.dubbo.apache.org/zh-cn/sitemap.xml</loc><lastmod>2023-06-18T13:39:08+08:00</lastmod></sitemap><sitemap><loc>https://cn.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://cn.dubbo.apache.org/zh-cn/sitemap.xml</loc><lastmod>2023-06-18T13:39:30+08:00</lastmod></sitemap><sitemap><loc>https://cn.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/service/index.xml
b/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/service/index.xml
index d251d5d198..9ccbb9973d 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://cn.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://cn.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://cn.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://cn.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://cn.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://cn.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 7fac8ad732..66ad064d8b 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://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/service/local-mock/><script>var
_hmt=_hmt||[];(function(){var
e,t=document.createElement("script");t.src="https://hm.baidu.com/hm.js?3b78f49ba47181e4d998a66b689446e9",e=document.getElementsByTagName("script")[0],e.parentNode.insertBefore(t,e)})()</script><meta
charset=utf-8><meta name=v [...]
+<!doctype html><html lang=zh-cn class=no-js><head><meta name=ROBOTS
content="INDEX, FOLLOW"><link rel=canonical
href=https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/service/local-mock/><script>var
_hmt=_hmt||[];(function(){var
e,t=document.createElement("script");t.src="https://hm.baidu.com/hm.js?3b78f49ba47181e4d998a66b689446e9",e=document.getElementsByTagName("script")[0],e.parentNode.insertBefore(t,e)})()</script><meta
charset=utf-8><meta name=v [...]
<script>var
doNotTrack=!1;if(!doNotTrack){window.dataLayer=window.dataLayer||[];function
gtag(){dataLayer.push(arguments)}gtag("js",new
Date),gtag("config","G-NM6FFMT51J",{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://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/service/local-
[...]
<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://cn.dubbo.apache.org/zh-c [...]
+<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://cn.dubbo.apache.org/zh-c [...]
+如果用 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/sitemap.xml b/zh-cn/sitemap.xml
index 0fa8523b96..6902259aca 100644
--- a/zh-cn/sitemap.xml
+++ b/zh-cn/sitemap.xml
@@ -1 +1 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?><urlset
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml"><url><loc>https://cn.dubbo.apache.org/zh-cn/blog/2023/01/16/%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B4%E5%8D%87%E7%BA%A7-dubbo3-%E5%85%A8%E9%9D%A2%E5%8F%96%E4%BB%A3-hsf2/</loc><lastmod>2023-02-22T15:03:22+08:00</lastmod><changefreq>monthly</changefreq><priority>0.5</priority></url><url><loc>https://cn.dubbo.apache.org/zh-cn/overview/mannu
[...]
\ No newline at end of file
+<?xml version="1.0" encoding="utf-8" standalone="yes"?><urlset
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml"><url><loc>https://cn.dubbo.apache.org/zh-cn/blog/2023/01/16/%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B4%E5%8D%87%E7%BA%A7-dubbo3-%E5%85%A8%E9%9D%A2%E5%8F%96%E4%BB%A3-hsf2/</loc><lastmod>2023-02-22T15:03:22+08:00</lastmod><changefreq>monthly</changefreq><priority>0.5</priority></url><url><loc>https://cn.dubbo.apache.org/zh-cn/overview/mannu
[...]
\ No newline at end of file