zoukankan      html  css  js  c++  java
  • 本地伪装 mock

    在开发自测,联调过程中,经常碰到一些下游服务调用不通的场景,这个时候我们如何不依赖于下游系统,就业务系统独立完成自测?

    dubbo自身是支持mock服务的,在reference标签里,有一个参数mock,该参数有四个值,false,default,true,或者Mock类的类名。分别代表如下含义:

    • false,不调用mock服务。
    • true,当服务调用失败时,使用mock服务。
    • default,当服务调用失败时,使用mock服务。
    • force,强制使用Mock服务(不管服务能否调用成功)。(使用xml配置不生效,使用ReferenceConfigAPI可以生效)

    例子:

    实现类:

    @Service
    public class TblEmpServiceImpl extends ServiceImpl<TblEmpMapper, TblEmp> implements TblEmpService {
    
    }

    Mock类(名称必须是 接口名+Mock 的形式):

    public class TblEmpServiceMock implements TblEmpService{
        /**
         * 当消费者先去调用下游服务,发现没服务,然后调用Mock服务,返回相应数据。
         */
        public boolean deleteById(Serializable id) {
            System.out.println("恭恭敬敬");
            return false;
        }
    }

    消费者xml:

    如果mock为true,则默认调用名称为 接口名+Mock 的类

    <dubbo:reference interface="com.ssmp.service.TblEmpService" id="tblEmpService" mock="com.ssmp.controller.TblEmpServiceMock" check="false"/>

    消费者:

    public class Consumer {
        public static void main(String[] args) throws Exception {
            ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/user-consumer.xml"});
            context.start();
            TblEmpService t = (TblEmpService) context.getBean("tblEmpService");
            Boolean b = t.deleteById(1);
            System.out.println(b);
            System.in.read();
        }
    }

    输出:

    恭恭敬敬

    false

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

    Offer offer = null;
    try {
        offer = offerService.findOffer(offerId);
    } catch (RpcException e) {
       logger.error(e);
    }

    请考虑改为 Mock 实现,并在 Mock 实现中 return null。如果只是想简单的忽略异常,在 2.0.11 以上版本可用:

    <dubbo:reference interface="com.foo.BarService" mock="return null" />
  • 相关阅读:
    2021.5.16 Android聊天功能
    2021.5.15 Android Gestures示例
    2021.5.14 程序员修炼之路:从小工到专家阅读笔记02
    KL 散度和交叉熵
    UBOOT学习
    UCOSII学习
    cortex-M3/M4体系学习
    一步步写RTOS
    38 操作系统-中断处理与特权级转移
    MDK、IAR将变量定义到指定位置
  • 原文地址:https://www.cnblogs.com/yifanSJ/p/9188620.html
Copyright © 2011-2022 走看看