dubbo 注解版 本地存根 本地伪装

        本地存根和本地伪装就是在消费方部署一个实现了目标接口的伪服务。用于在调用真正服务之前,之后的处理工作。其职能有点类似于Spring 的AOP。

        为什么要使用本地存根和本地伪装
本地存根
        通常情况下,我们调用接口之前都会生成一个请求对象。并且对请求对象中的必传字段以及类型做一定的校验,如果不满足调用接口条件,可能需要抛出异常或者其他处理方式。所以本地存根的作用可以认为是预处理信息。

本地伪装
        如果请求条件达到了调用接口的要求,但是调用失败了。这个时候又如何处理?可以通过本地伪装的方式,mock一个对象返回。可以认为是服务消费方自己做的一个容错处理机制类。

        通过上边两点,我们可以清楚的知道stub service和mock service发挥的作用类似于spring aop。所以,本着约定大于配置的要求。优先选择stub和mock而非spring sop。

        实现步骤如下

1 在服务消费者工程中,写一个类,实现 接口

package cn.taobao.consumer_springboot_1.beidichungen;
import cn.taobao.Service.NewsService;
import cn.taobao.pojo.News;
import org.springframework.util.StringUtils;
import java.util.Date;
import java.util.List;

/**
 * NewsService的本地存根实现
 */
public class newsServiceStub implements NewsService {

    private final NewsService newsService;

    /**
     * 有参构造 dubbo会自动将远程NewsService注入进来
     * @param newsService
     */
    public newsServiceStub(NewsService newsService)
    {
        this.newsService=newsService;
    }

    @Override
    public List<News> getNewsList() {
        List<News> newsList = newsService.getNewsList();
        return newsList;
    }

    /**
     * 在远程调用前可以进行判断
     * @param id
     * @return
     */
    @Override
    public News getNewsById(Integer id)  {
        // 如果id不为空则进行远程调用 否则不调
        if(!StringUtils.isEmpty(id))
        {
            News newsById = newsService.getNewsById(id);
            return newsById;
        }
        return new News(0,"没有id时---本地存根---","没有 没有时的内容",new Date());
    }
}

2 进行存根配置

    在客户端调用远程服务的注解上添加stub,值为我们客户端实现的远程服务类的全路径名
    如@Reference(version = "*",stub = "cn.taobao.consumer_springboot_1.beidichungen.newsServiceStub")

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值