Dubbo的fallback机制

本地假装

本地假装 [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" />
  1. Mock 是 Stub 的一个子集,便于服务提供方在客户端执行容错逻辑,因常常须要在出现 RpcException (好比网络失败,超时等)时进行容错,而在出现业务异常(好比登陆用户名密码错误)时不须要容错,若是用 Stub,可能就须要捕获并依赖 RpcException 类,而用 Mock 就能够不依赖 RpcException,由于它的约定就是只有出现 RpcException 时才执行。 ↩︎code

  2. 在 interface 旁放一个 Mock 实现,它实现 BarService 接口,并有一个无参构造函数 ↩︎htm

参考文献:http://dubbo.incubator.apache.org/zh-cn/docs/user/demos/local-mock.html接口

相关文章
相关标签/搜索