本地假装 [1] 一般用于服务降级,好比某验权服务,当服务提供方所有挂掉后,客户端不抛出异常,而是经过 Mock 数据返回受权失败。html
在 spring 配置文件中按如下方式配置:spring
<dubbo:reference interface="com.foo.BarService" mock="true" />
或apache
<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
以上版本可用:spa
<dubbo:reference interface="com.foo.BarService" mock="return null" />
Mock 是 Stub 的一个子集,便于服务提供方在客户端执行容错逻辑,因常常须要在出现 RpcException (好比网络失败,超时等)时进行容错,而在出现业务异常(好比登陆用户名密码错误)时不须要容错,若是用 Stub,可能就须要捕获并依赖 RpcException 类,而用 Mock 就能够不依赖 RpcException,由于它的约定就是只有出现 RpcException 时才执行。 ↩︎code
在 interface 旁放一个 Mock 实现,它实现 BarService 接口,并有一个无参构造函数 ↩︎htm
参考文献:http://dubbo.incubator.apache.org/zh-cn/docs/user/demos/local-mock.html接口