We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
如何在 Dubbo 中利用本地伪装实现服务降级
本地伪装 1 通常用于服务降级,比如某验权服务,当服务提供方全部挂掉后,客户端不抛出异常,而是通过 Mock 数据返回授权失败。
在 spring 配置文件中按以下方式配置:
<dubbo:reference interface="com.foo.BarService" mock="true" />
或
<dubbo:reference interface="com.foo.BarService" mock="com.foo.BarServiceMock" />
在工程中提供 Mock 实现 2:
package com.foo; public class BarServiceMock implements BarService { public String sayHello(String name) { // 你可以伪造容错数据,此方法只在出现RpcException时被执行 return "容错数据"; } }
如果服务的消费方经常需要 try-catch 捕获异常,如:
Offer offer = null; try { offer = offerService.findOffer(offerId); } catch (RpcException e) { logger.error(e); }
请考虑改为 Mock 实现,并在 Mock 实现中 return null。如果只是想简单的忽略异常,在 2.0.11 以上版本可用:
2.0.11
<dubbo:reference interface="com.foo.BarService" mock="return null" />
使用 return 来返回一个字符串表示的对象,作为 Mock 的返回值。合法的字符串可以是:
return
null
true
false
使用 throw 来返回一个 Exception 对象,作为 Mock 的返回值。
throw
当调用出错时,抛出一个默认的 RPCException:
<dubbo:reference interface="com.foo.BarService" mock="throw" />
当调用出错时,抛出指定的 Exception:
<dubbo:reference interface="com.foo.BarService" mock="throw com.foo.MockException" />
在 2.6.6 以上的版本,可以开始在 Spring XML 配置文件中使用 fail: 和 force:。force: 代表强制使用 Mock 行为,在这种情况下不会走远程调用。fail: 与默认行为一致,只有当远程调用发生错误时才使用 Mock 行为。force: 和 fail: 都支持与 throw 或者 return 组合使用。
2.6.6
fail:
force:
强制返回指定值:
<dubbo:reference interface="com.foo.BarService" mock="force:return fake" />
强制抛出指定异常:
<dubbo:reference interface="com.foo.BarService" mock="force:throw com.foo.MockException" />
Mock 可以在方法级别上指定,假定 com.foo.BarService 上有好几个方法,我们可以单独为 sayHello() 方法指定 Mock 行为。具体配置如下所示,在本例中,只要 sayHello() 被调用到时,强制返回 “fake”:
com.foo.BarService
sayHello()
<dubbo:reference id="demoService" check="false" interface="com.foo.BarService"> <dubbo:parameter key="sayHello.mock" value="force:return fake"/> </dubbo:reference>
The text was updated successfully, but these errors were encountered:
No branches or pull requests
如何在 Dubbo 中利用本地伪装实现服务降级
背景
本地伪装 1 通常用于服务降级,比如某验权服务,当服务提供方全部挂掉后,客户端不抛出异常,而是通过 Mock 数据返回授权失败。
示例
在 spring 配置文件中按以下方式配置:
或
在工程中提供 Mock 实现 2:
如果服务的消费方经常需要 try-catch 捕获异常,如:
请考虑改为 Mock 实现,并在 Mock 实现中 return null。如果只是想简单的忽略异常,在
2.0.11
以上版本可用:进阶用法
return
使用
return
来返回一个字符串表示的对象,作为 Mock 的返回值。合法的字符串可以是:null
true
false
throw
使用
throw
来返回一个 Exception 对象,作为 Mock 的返回值。当调用出错时,抛出一个默认的 RPCException:
当调用出错时,抛出指定的 Exception:
force 和 fail
在
2.6.6
以上的版本,可以开始在 Spring XML 配置文件中使用fail:
和force:
。force:
代表强制使用 Mock 行为,在这种情况下不会走远程调用。fail:
与默认行为一致,只有当远程调用发生错误时才使用 Mock 行为。force:
和fail:
都支持与throw
或者return
组合使用。强制返回指定值:
强制抛出指定异常:
在方法级别配置 Mock
Mock 可以在方法级别上指定,假定
com.foo.BarService
上有好几个方法,我们可以单独为sayHello()
方法指定 Mock 行为。具体配置如下所示,在本例中,只要sayHello()
被调用到时,强制返回 “fake”:The text was updated successfully, but these errors were encountered: