本地伪装

    在 spring 配置文件中按以下方式配置:

    在工程中提供 Mock 实现 [2]

    1. package com.foo;
    2. public String sayHello(String name) {
    3. // 你可以伪造容错数据,此方法只在出现RpcException时被执行
    4. return "容错数据";
    5. }
    6. }

    如果服务的消费方经常需要 try-catch 捕获异常,如:

    1. <dubbo:reference interface="com.foo.BarService" mock="return null" />

    使用 来返回一个字符串表示的对象,作为 Mock 的返回值。合法的字符串可以是:

    • empty: 代表空,基本类型的默认值,或者集合类的空值
    • true: true
    • false: false
    • JSON 格式: 反序列化 JSON 所得到的对象

    使用 throw 来返回一个 Exception 对象,作为 Mock 的返回值。

    当调用出错时,抛出一个默认的 RPCException:

    1. <dubbo:reference interface="com.foo.BarService" mock="throw" />

    当调用出错时,抛出指定的 Exception:

    强制返回指定值:

    1. <dubbo:reference interface="com.foo.BarService" mock="force:return fake" />

    强制抛出指定异常:

    1. <dubbo:reference interface="com.foo.BarService" mock="force:throw com.foo.MockException" />

    Mock 可以在方法级别上指定,假定 com.foo.BarService 上有好几个方法,我们可以单独为 sayHello() 方法指定 Mock 行为。具体配置如下所示,在本例中,只要 sayHello() 被调用到时,强制返回 “fake”:


    1. Mock 是 Stub 的一个子集,便于服务提供方在客户端执行容错逻辑,因经常需要在出现 RpcException (比如网络失败,超时等)时进行容错,而在出现业务异常(比如登录用户名密码错误)时不需要容错,如果用 Stub,可能就需要捕获并依赖 RpcException 类,而用 Mock 就可以不依赖 RpcException,因为它的约定就是只有出现 RpcException 时才执行。