Dubbo之参数配置(四)

目录

本地存根

本地伪装

延迟暴露


 

本地存根

  • 使用场景

远程服务后,客户端通常只剩下接口,而实现全在服务器端,但提供方有些时候想在客户端也执行部分逻辑,比如:做ThreadLocal缓存,提前验证参数,调用失败后伪造容错数据等等,此时就需要在API中带上Stub,客户端生成Proxy时,会把Proxy通过构造函数传输给Stub,然后把Stub暴露给用户,Stub可以决定要不要去调Proxy。

(1)调用示意图:

 

 (2)配置及Stub实例

<!--第一种-->
<dubbo:service interface="com.foo.BarService" stub="true" />
<!--第二种-->
<dubbo:service interface="com.foo.BarService" stub=com.foo.BarServiceStub" />
package com.foo;

public class BarServiceStub implements BarSerivce{
    private final BarService barService;
    //构造函数传入真正的远程代理对象
    public BarServiceStub(BarSerivce barSerivce){
        this.barService = barService;
    }
    public String sayHello(String name){
        //此代码在客户段执行
        //可以在客户端做ThreadLocal本地缓存,或预先验证参数是否合法等待
        try{
            return barService.sayHello(name);
        }catch(Exception e){
            //可以容错
            return "容错数据";
        }
    }
}

本地伪装

  • 使用场景

Mock通常用于服务降级,比如某验权服务,当服务提供方全部挂掉后,客户端不抛出异常,而是通过Mock数据返回授权失败。

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

  • 配置
<dubbo:service interface="com.foo.BarService" mock="true" />
or
<dubbo:service interface="com.foo.BarService" mock="com.foo.BarServiceMock" />
package com.foo
public class BarServiceMock implements BarService{
    public String sayHello(String name){
        return "容错数据";
    }
}

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

try{
    //逻辑代码
}catch(Exception e){
    logger.error(e);
}

可以考虑改为Mock实现,并在Mock中return null。

<!--如果只是想简单的忽略异常,在2.0.11以上版本可以用:-->
<dubbo:service interface="com.foo.BarService" mock="return null" />

延迟暴露

  • 使用场景

如果服务需要warmup时间,比如初始化缓存,等待相关资源就位,可以使用delay进行延迟暴露。

<!--延迟暴露5s-->
<dubbo:service delay="5000" />
<!--延迟到Spring初始化完成后,再暴露服务(基于Spring的ContextRefreshedEvent事件触发暴露-->
<dubbo:service delay="-1" />

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值